miércoles, 8 de diciembre de 2010

Múltiples dominios en un mismo servidor Hosting (Addon Domains)


Quizás se en algún momento has contratado un servidor de alojamiento web (Hosting) que además te lo venden con un nombre de  dominio incluido, y te has preguntado si debes contratar otros hosting para alojar otra página web con distinto nombre de dominio.   

La respuesta generalmente a esta interrogante es NO.  Digo que casi generalmente pues todo depende de tu hosting. Solo lo mas económicos paquetes de alojamiento no permiten agregar varios dominios en un mismo servidor host. Para saberlo puedes contactar a tu administrador y preguntarle, pero si vas al tu panel de control (si es que tu paquete incluye un Panel control) y ves la opción: “Addon Domains”   entonces puedes estar seguro de que puedes agregar otros dominios a tu espacio web de forma que compartes el disco duro y el ancho de banda de tu hosting.




Pasos para agregar el dominio a tu hosting (una vez estas seguro que tu proveedor te permite hacerlo)


1- Comprar el dominio y haciendo que  apunte a las DNS de tu HOSTING

Para comprar el dominio existen muchas páginas web que permiten hacer esta operación, yo recomiendo una que ya he usado en varias ocasiones. Acá están los pasos de la compra.  

Pre-requisitos para comprar un dominio  



  • Debes saber el nombre de dominio que deseas comprar y estar seguro que nadie más lo ha comprado.

  • Debes conocer las DNS de tu hosting , por lo generar esa información te la dan cuando compras el hosting , así que revisa el primer correo cuando adquiriste el Hosting , también puedes verla en el panel de control o preguntarle a tu proveedor.  Son dos números de IP o nombres.


Pasos de la compra (Si ya estas familiarizado puedes pasar estos pasos)



  • Ve a la página: https://www.gkg.net/

  •  En la parte central donde hay una imagen que dice Domains Name: escribe el nombre de dominio que deseas comprar: mipagina.com   y pincha en el botón  GO.

  •  En la siguiente página que sale , verás muchas opciones (son las posibles combinaciones de dominios) , solo marca la que estas comprando: (mipagina.com)  y al lado selecciona: 1 year/10.69, que es el  mínimo  tiempo que puedes contratar : 1 año por 10.69 USD que  , luego en el botón CONTINUE

  •  En la siguiente página te pide  GKG username, ahí pones tu usuario si ya te creaste uno anteriormente , pero como lo más seguro que no lo tengas creado , deber crearte una cuenta.

  •  Luego aparecerán varias opciones y solo marcas:  I will be hosting these domains elsewhere - Requires Primary/ Secondary Name Server   y pincha el botón CONTINUE.

  •  En esta página te sale para que pongas: PRIMARY DNS , aquí pones: la primera DNS   y en Secondary DNS pones la segunda DNS.

  • Lo otro son los datos de la tarjeta para pagar, que de eso asumo que ya deben conocer.



2- Configurar tu HOSTING para que direccione las peticiones de forma correcta.

2.1- Configuración desde el panel de control con (Addon Domains  )

Para configurar el host, si tienes la opción Addon Domains  tienes una gran ventaja pues la configuración esta tan simple como pincha en dicha opción.

Te saldrá un formulario que debe pedir los siquientes datos:

- Nombre de dominio (el nombre que compraste)

- Usuario de FTP  (el nombre de usuario que tendrá acceso al FTP del nuevo dominio)

- Password  (la contraseña)


Luego envías el formulario y listo. Ahora debes tener en cuenta que puede que este proceso puede tardar días en funcionar. En mi experiencia particular solo me ha tardado 1 hora o menos en que todo funcione.  


Lo que hace este formulario es crear una carpeta con el mismo nombre dominio que has adicionado en el FTP , y crea un usuario y contraseña de FTP que solo puede acceder a esta carpeta , por lo que la seguridad está garantizada en caso de que le des esta cuenta a otra persona.  Además configura el  fichero .htaccess   del servidor haciendo re-direccionar las peticiones según el nombre de dominio.



2.1- Configuración  manual

Que sucede si el tu panel de control no permite hacer esto de forma automática , debes hacerlo de forma manual.



  • Creas una carpeta donde qué quieres que se aloje el nuevo sitio web.

  • Creas un usuario y contraseña que solo tenga acceso a dicha carpeta

  • El último paso es el más complicado; pero que puedes hacerlo simplemente copiando, pegando  y modificando algunas cosas en el archivo  .htaccess  de la capeta raíz donde colocaste la carpeta del sitio web.   El siguiente código permite re-direccionar la petición según el nombre de dominio:  




<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Primer dominio apuntando al directorio raíz
ReWriteCond %{HTTP_HOST} dominio_1.com
ReWriteCond %{REQUEST_URI} !/
ReWriteRule ^(.*)$ /$1 [L]
# Segundo dominio apuntando a un subdirectorio de la raíz
ReWriteCond %{HTTP_HOST} nombre_dominio2.com
ReWriteCond %{REQUEST_URI} !subdirectorio_dominio2 /
ReWriteRule ^(.*)$ subdirectorio_dominio2/$1 [L]
</IfModule>



Solo debes modificar nombre_dominio2.com  por el dominio que has configurado y subdirectorio_dominio2 por el subdirectorio que creaste.

martes, 7 de diciembre de 2010

Convertir URL largas en URL cortas a través de http://tinyurl.com

A veces tenemos obtenemos URL extremadamente grandes pues contienen una gran cantidad de parámetros. Estas URL son bien complicadas de recordar y además se ven bien feas. Ya en el artículo dedicado a URL amigable se vio una solución para hacer más legibles las URL.
Sin embargo hay ocasiones en las que se tienen URL de sitios externos y no podemos modificar dicha URL pues evidentemente no tenemos acceso dicho servidor, no somos los propietarios, por lo que para convertir una URL externa en una URL amigable , tenemos que descartar toda posibilidad explicada en el artículo dedicado URL amigables cambiando el archivo de configuración .htaccess.


La solución está en este servicio brindado por la web: http://tinyurl.com
Esta web permite construir una URL de unos 26 caracteres (bien pequeña) que re-direcciona hacia la URL deseada.
Si deseas convertir una URL de forma manual solo debes ir a: http://tinyurl.com , escribe la URL en el campo donde dice: “Enter a long URL to make tiny: picha el botón: "Make TinyURL" y verás como te construye una URL bien pequeña.

Al convertí la URL de la web: http://moises-soft.com , lo que se obtiene es lo siguiente: http://tinyurl.com/2a9smnd , claro que este ejemplo no es válido pues esa URL inicial no tan grande, de hecho es más pequeña que la resultante. De modo que si pinchamos en http://tinyurl.com/2a9smnd , estemos yendo a http://moises-soft.com.


Que sucede si queremos hacer esta conversión automática para luego almacenar las URL pequeñas que nos devuelve tinyurl.com.
A continuación el código PHP que podemos utilizar para convertir una URL larga en pequeña:


function tinyUrl($url){
$tiny = "http://tinyurl.com/api-create.php?url=". urlencode(trim($url);
return file_get_contents($tiny));
}



Si no está disponible la función file_get_contents , entonces puedes usar la siguiente función:


function tinyUrl($url){
$tiny = "http://tinyurl.com/api-create.php?url=" . urlencode(trim($url));
$tinyhandle = fopen($tiny, "r");
$tinyurl = fread($tinyhandle, 26);
fclose($tinyhandle);
return $tinyurl;
}

Existen muchos sitios de internet que usan este sistema para almacenar URL , sobre todo las redes sociales. Así que cuando veas una URL parecida a esta: http://tinyurl.com/2a9smnd , ya sabes que al pichar en ella puedes a cualquier sitio web incluyendo el tuyo, pues estas URL siempre tienen la misma longitud (Al menos por ahora)

lunes, 6 de diciembre de 2010

CSS y Javascript condicional. Página Web correcta en todos los navegadores

Cual es problema


De seguro que chocaste con este problema cuando hiciste tu primera página web, NO SE VE IGUAL EN TODOS LOS NAVEGADORES. Puede que en Firefox que para mí es mejor de los navegadores, se vea perfecto pues estuviste probando tu web solo con este navegador; pero cuando pruebas con el IE, no se ve igual.
Las respuesta a por qué no se ve igual es distintos navegadores es simple: todos los navegadores son hechos por empresas distintas, y todos no implementan bien los estándares o se inventan sus propios estándares sin contar con nadie, luego casi siempre estos inventos se ponen en la posteriores versiones del estándar HTML y XHTML.



CSS condicional

La solución entonces es conocer cómo funcionan las hojas de estilo según la interpretación que hace cada navegador y hacer una hoja de estilo y/o códigos javascript para cada tipo de navegador: algo como esto:


<link rel="stylesheet" href="base-style.css" type="text/css" />

<!--[if IE]>
<link rel="stylesheet" href="ie.css" type="text/css" />
<[end if]-->

<!--[if FF]>
<link rel="stylesheet" href="ff.css" type="text/css" />
<[end if]-->

<!--[if Opera]>
<link rel="stylesheet" href="opera.css" type="text/css" />
<[end if]-->

<!--[if Safari]>
<link rel="stylesheet" href="safari.css" type="text/css" />
<[end if]-->

<!--[if Konqueror]>
<link rel="stylesheet" href="konquerer.css" type="text/css" />
<[end if]-->

<!--[if iCab]>
<link rel="stylesheet" href="icab.css" type="text/css" />
<[end if]-->

<!--[if Flock]>
<link rel="stylesheet" href="flock.css" type="text/css" />
<[end if]-->




Aquí lo que estamos haciendo es poner en cometario una condición encerrada entre corchetes , de modo el código de abajo significa que si el navegador utilizado por el cliente es Internet Explorer (en cualquier versión) entonces la hoja de estilo cargada es: ie.css


<!--[if IE]>
<link rel="stylesheet" href="ie.css" type="text/css" />
<[end if]-->




Abreviaturas para navegadores

Igual para los demás navegadores las abreviaturas utilizadas son las siguientes:


FF => Firefox en cualquier versión
IE => Internet Explorer en cualquier versión
Opera => Opera en cualquier versión
Safari => Safari en cualquier versión
Konqueror => Konqueror en cualquier versión
iCab => iCab en cualquier versión (navegador propietario para Mac OS)



Versiones de navegadores

Qué pasa si queremos diferenciar entre versiones del navegador , que también tienen sus diferencias sustanciales , como es el caso en IE , donde Internet Explorer 6 (casi en de la era de palo para las páginas actuales ) tiene una muy diferente implementación de la versiones posteriores.


<!--[if IE 5.5]>
[Aquí va nuestro código]
<![endif]-->
<!--[if IE 6]>
[Aquí va nuestro código]
<![endif]-->



Simplemente se coloca la versión en la condición [if IE 5.5]


Operadores a usar en las condiciones

Si desea que el CSS se cargue cuando una versión sea inferior o superior a otra debe hacerlo de la siguiente manera:


<!--[if gt IE 5.5]>
[Esto se mostrará a versiones posteriores a IE 5.5. "gt" = mayor que]
<![endif]-->
<!--[if gte IE 5.5]>
[Esto se mostrará a IE 5.5 y versiones posteriores. "gte" = mayor que o igual]
<![endif]-->
<!--[if lt IE 6]>
[Esto se mostrará a versiones anteriores a IE 6. "lt" = menor que]
<![endif]-->
<!--[if lte IE 6]>
[Esto se mostrará a IE 6 y versiones anteriores. "lte" = menor que o igual]
<![endif]-->



En resumen estas son las sintaxis que se pueden usar:

lt – Menor que
lte – Menor o igual
eq – Igual
gte – Mayor o igual
gt – Mayor que


El operador negación (!)


<!--[if !IE]>
Si no está usando el IE
<![endif]-->




Javascript condicional

Con Javascript se puede hacer exactamente lo mismo:


<!--[if IE 6]>
<SCRIPT>
alert("Esto es Internet Explorer 6");
</SCRIPT>
<![endif]-->

<!--[if IE 7]>
<SCRIPT>
alert("Esto es Internet Explorer 7");
</SCRIPT>
<![endif]-->

<!--[if FF]>
<SCRIPT>
alert("Esto es Firefox");
</SCRIPT>
<![endif]-->



Como usar la sintaxis condicional en documentos CSS

Se hace de igual forma solo que no se coloca entre comentarios HTML


#header {
heigth: 200px;
[if IE 6] heigth: 300px;
}




En este ejemplo se arriba hemos cambiado el alto de una etiqueta con ID header en cualquier navegador tiene 200 pixel ; pero en IE tiene 300.



También se pueden importar CSS distintos desde un documento CSS:

 
[if IE] @import('ie.css');
[if FF] @import('ff.css');


CSS condicionales a nivel código del lado del servidor (Ejemplo con PHP)

En PHP con la variable Global: $_SERVER se puede obtener datos del navegador que hizo la petición, uno de estos datos es el tipo de agente , que se obtiene de la siguiente manera : $cliente = $_SERVER["HTTP_USER_AGENT"] ;
Luego teniendo el cliente se puede poner condicionalmente lo que se desee:


$cliente = $_SERVER["HTTP_USER_AGENT"] ;
$firefox = strops($cliente , \'Firefox\') ? true : false;
$safari = strpos($cliente ,\'Safari\') ? true : false;
$chrome = strpos($cliente ,\'Chrome\') ? true : false;

if($firefox )
echo ‘<link rel="stylesheet" href="ff.css" type="text/css" />’;
else
if($safari)
echo ‘<link rel="stylesheet" href="safari.css" type="text/css" />’;



En próximos artículos ampliaremos sobre casos particulares de problemas comunes en navegadores y soluciones para los mismos.

martes, 16 de noviembre de 2010

El algoritmo Luhn (Verificación de IMEI en teléfono móviles y otros códigos)

El algoritmo Luhn es un algoritmo que se usa para la verificación de números de identificación. Ejemplos de estos números: el IMEI en los celulares , los números de tarjetas de crédito. Su creador fue por Hans Peter Luhn un científico de la IBM.

El algoritmo es usado para evitar posibles errores al teclear estos números únicos.
Por ejemplo para verificar que un numero IMEI de celular, es válido se tiene en cuenta que este código es de 15 dígitos, y este algoritmo con los primeros 14 dígitos puede prever el digito 15.

En la web de Desbloqueo de Celulares vía IMEI: www.movilserver.com , se implementa este algoritmo para el cálculo automático de el ultimo digito, de manera que si un cliente teclea mal algunos de los primeros 14 dígitos, se dará cuenta pues no le coincidirá el digito 15 (automáticamente calculado) con el de su celular.

El algoritmo escrito en JAVASCRIPT para el cálculo a nivel de navegador es el siguiente:


function Calculate(Luhn)
{
var sum = 0;
for (i=0; i {
sum += parseInt(Luhn.substring(i,i+1));
}
var delta = new Array (0,1,2,3,4,-4,-3,-2,-1,0);
for (i=Luhn.length-1; i>=0; i-=2 )
{
var deltaIndex = parseInt(Luhn.substring(i,i+1));
var deltaValue = delta[deltaIndex];
sum += deltaValue;
}
var mod10 = sum % 10;
mod10 = 10 - mod10;
if (mod10==10)
{
mod10=0;
}
return mod10;
}


El algoritmo escrito en PHP para la validación del lado del cliente es el siguiente:


function CalculateLuhn($Luhn)
{
$len = strlen($Luhn);
// return 5;

$sum = 0;
for ($i=0; $i< $len; $i++ )
{
$sum += intval( substr($Luhn,$i,1));
}
$delta = array(0,1,2,3,4,-4,-3,-2,-1,0);

for ($i = $len-1; $i>=0; $i-=2 )
{
$deltaIndex = intval(substr($Luhn,$i,1));
$deltaValue = $delta[$deltaIndex];
$sum += $deltaValue;
}
$mod10 = $sum % 10;
$mod10 = 10 - $mod10;
if ($mod10==10)
{
$mod10=0;
}
return $mod10;
}


domingo, 3 de octubre de 2010

Moises Soft en Facebook

Rolando Perez

Crea tu insignia

¿Cómo obtener los nombres de las tablas y vistas en MYSQL y POSTGRESQL?

Quizás se le presente esta situación como se me presentó, mientras programaba.

1- En MYSQL

Para obtener el nombre de todas las tablas de una base de datos en Mysql, podemos usar la simple consulta:

SHOW TABLES

Esto devolverá una sola columna con los nombres de las tablas. Como puedes ver en la figura de abajo:



Sin embargo a partir de la versión 5.0 de MYSQL se introdujeron la Vistas (View) , que en concepto pueden verse como tablas con la particularidad de que en ellas no se pueden hacer inserciones , ya que son el resultado de un consulta en una o más tablas.

Algo a tener en cuenta:


La consulta : SHOW TABLES , a partir de la versión MySQL 5.0.1 , lista también las vistas en la base de datos , como si se tratara de tablas. Hay que ser cuidadosos con esto pues una vista no es lo mismo que una tabla, y puede que se le intente dar el mismo tratamiento de forma errada que a una tabla.

Un ejemplo curioso de no tener cuidado en diferenciar tablas de vistas:

Un ejemplo comprobable de las consecuencias de no tener cuidado con esto es phpmyadmin , un software muy útil que está instalado en casi todos los servidores hosting que tienen instalado Apache – PHP – Mysql . Al exportar un base datos en phpmyadmin incluyendo los datos de la misma , se introduce un error y es que el script intenta insertar datos en las vistas.
Es por eso que a partir de la versión MySQL 5.0.2 , se introduce el modificador FULL a esta consulta que permite diferenciar entre vistas y tablas.


Al ejecutar la consulta: SHOW FULL TABLES

Se introduce una nueva columna Table_Type , la cual permite diferenciar entre tablas: BASE TABLE y vistas: VIEW
Vea el resultado de la consulta en figura siguiente:






De modo que es posible filtrar la consulta para obtener las Vistas , Tablas o ambas como en el ejemplo anterior.

SHOW full TABLES where Table_type='VIEW' => Obtiene solo las vistas
SHOW full TABLES where Table_type='BASE TABLE' => Obtiene solo las tablas


2- En POSTGRESQL

Para obtener las vistas y las tablas creadas por usted en POSTGRESQL puede usar la siguiente consulta:

select * from information_schema.tables where table_schema='public'

El resultado será una tabla de 3 columnas: table_catalog(nombre de la base de datos) , table_shema, table_name (nombre de la tabla).

Puede ver el ejemplo de la siguiente figura:



Para obtener las vistas creadas por usted en POSTGRESQL puede usar la siguiente consulta:

select * from information_schema.tables where table_schema='public' and table_type='VIEW'

Para obtener las tablas creadas por usted en POSTGRESQL puede usar la siguiente consulta:

select * from information_schema.tables where table_schema='public' and table_type='BASE TABLE'

domingo, 11 de julio de 2010

Error Javascript: Se esperaba un objeto

Este es un error con el cual en cierta ocasión me encontré cuando cargaba mi página desde IE. Aparentemente no tenía nada mal en mi código , todo estaba más que revisado y probado, como es de costumbre en el FIREFOX funcionaba de maravillas , pero si algo bueno tiene IE es que no acepta casi nada fuera de lugar.


Sin más preámbulos , el error era tan sencillo como que mi código Javascript estaba escrito de la siguiente manera:



<script type="application/javascript">

// código

</script>



Esto no está mal, sin embargo hay muchos navegadores como IE que no reconocen ese MIME ( application/javascript ). El script estaba siendo ignorado y al intentar cambiar el estado de un Objeto y por eso me daba este error: (Se esperaba un objeto).


La solución es muy simple, en vez de poner type="application/javascript" poner type= "text/javascript"


¿Cómo saber me di cuenta del problema?


Ejecuté un código como este:


<script type="application/javascript">

alert('asas');

</script>


Me di cuenta que no pasaba nada, por lo tanto no se estaba reconociendo el script.


Este mi consejo:

- Usen siempre el type= "text/javascript"

Cache en PHP. Un sencillo ejemplo

El hecho de que las casi todas las páginas web actuales sean dinámicas es sin dudas una gran logro en la tecnología web. No siempre fue así y todavía existen las páginas estáticas las cuales solo contienen un simple código HTML que descarga de forma directa y es mostrado en nuestro navegador.

Si bien el uso de lenguajes que se ejecutan en los servidores web y las bases de datos, han posibilitado el dinamismo que hoy en día existen en internet; también es válido destacar la ventaja que tiene una página estática y su rapidez. Una página estática no necesita ejecutar ningún código del lado del servidor, no necesita hacer consultas a una base de datos , muchas veces de extremada complejidad. Es por eso que se han desarrollado mecanismo para simular en páginas dinámicas, la velocidad de acceso que experimenta una página estática.

El uso de Cache

La caché son datos almacenados y duplicados de los originales, estos datos originales deben ser mucho más costosos en tiempo y memoria de obtener, respecto a la copia en la caché. La idea de la cache almacenar una copia la primera vez que se accede al recurso, y a partir de ese momento los accesos que se hagan al recursos tienen una respuesta directa de la cache.
Existe una conocida controversia entre tiempo y memoria muy conocida en programación. Por lo general cuando queremos ganar en tiempo perdemos en memoria. Pero en el caso de la web el espacio es irrelevante, casi todos los servidores host profesionales tiene capacidad suficiente para hacer uso de mecanismo de cache.


¿Cuándo usar mecanismo de cache?
Se debe pensare en usar mecanismo de cache cuando tenemos un recurso que hace un intensivo uso de consultas a bases de datos , cálculos intensivos y además de todo esto este recurso es muy demandado.


¿Cada cuando tiempo se debe refrescar la cache?

El tiempo de vida de la cache antes de ser refrescado, depende en gran medida del recurso. Si es un recurso que rara vez tiene cambios se podría implementar el refrescamiento cada un largo periodo de tiempo o simplemente solo cuando se active una bandera o indicador por el administrador de dicho contenido.

Cache en PHP
No podemos hablar de cache en PHP sin hacer mención de extensión de PHP: APC (Alternative PHP Cache) . Esta es una de las mejores alternativas para implementar uso de cache en nuestras páginas escritas con código PHP. Sin embargo en este artículo no vamos a profundizar en APC sino que vamos a ver como implementar un sistema de Cache usando sencillas directivas PHP.

Ejemplo
Cree un archivo llamado: cache_ini.php (o con el nombre que desee) con el siguiente código:


<?php

// configuración
$cache_dir = 'cache/'; // directorio de cache
$cache_time = 86400; // duración del cache
$cache_ext = 'cache'; // extensión de cache
// script a procesar

$cachepage = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$cachefile = $cachedir.md5($cachepage).'.'.$cacheext;

// calculamos el tiempo del cache
if (@file_exists($cachefile)) {
$cachelast = @filemtime($cachefile);

} else {
$cachelast = 0;
}

@clearstatcache();

// Mostramos el archivo si aun no vence
if (time() - $cachetime <$cachelast) {
@readfile($cachefile);
exit();
}
ob_start();
?>


Cree un archivo llamado: cache_fin.php (o con el nombre que desee) con el siguiente código:




<?php

// Generamos el nuevo archivo cache
$fp = @fopen($cachefile, 'w');
// guardamos el contenido del buffer
@fwrite($fp, ob_get_contents());
@fclose($fp);
ob_end_flush();
?>


Asegúrese que exista un directorio llamado cache en la raíz donde estén archivos que va aplicar la cache, y que este tenga permisos de escritura.
Suponiendo que va a cachear la página de inicio(inde.php) siguiente:

<?php
include("cache_ini.php");


// Contenido de mi pagina

include("cache_fin.php");

?>


Lo único que se debe hacer es incluir el archivo cache_ini.php, al inicio del documento, y cache_fin.php, al final del archivo.
En el archivo cache_ini.php, se puede configurar el tiempo de refrescamiento de la cache , tener en cuenta que este tiempo es por segundo, 3600 es una hora.

Con este ejemplo pueden implementar de forma sencilla cacheo en sus páginas.



Moisés Soft le recomienda investigar más sobre el cacheo en PHP y librerías existentes.
Deje su comentario ,duda o sugerencia.

lunes, 21 de junio de 2010

Inyección SQL




La inyección SQL es un agujero de seguridad en la informática que se puede producir al ejecutar una sentencia en una base datos con datos entrados por usuarios mal intencionados o por error en algunos casos. La inyección se produce cuando el programador no filtra de forma correcta los datos para evitar la posible inyección.
El nombre de inyección viene dado por la forma en que se introduce el código mal intencionado en el código correcto.
El ejemplo clásico es una sentencia para verificar una autenticación de usuario.
Tenemos en la base de datos de nuestro sistema una tabla llamada usuario, que contiene el nombre del usuario, el correo electrónico, la contraseña, entre otros datos.
Para verificar los datos de un usuario, se utilizaría la siguiente sentencia SQL:



Select count(*) from usuario where nombre_usuario = 'dato_usuario' and contrasena = 'dato_pass'


Lo que se hace en esta sentencia es contar los usuarios que tengan el mismo nombre de usuario entrado (dato_usuario) y la contraseña entrada (dato_pass). Normalmente un resultado positivo daría como resultado una cantidad igual 1 si los datos coinciden y 0 si el usuario o la contraseña entrada están mal.
Por ejemplo:


Select count(*) from usuario where nombre_usuario = 'pepe' and contrasena = '12345'



Sin embargo si el programador no valida que el valor: dato_usuario y : dato_pass , no contengan datos maliciosos podría ocurrir lo siguiente:

Select count(*) from usuario where nombre_usuario = 'pepe' and contrasena = ' cualquier_cosa' or 'h' = 'h '

En este caso sea cual sea el nombre de usuario que se entre el resultado sería una cantidad mayor que 0 y por lo tanto lograría tener acceso sin la contraseña correcta al un servicio que se esté programando. La razón es que en vez de entrar una contraseña, se inyectó un código malicioso al código SQL original para alterar su funcionamiento correcto.

Fíjense que se altera el funcionamiento porque se introdujo: cualquier_cosa' or 'h' = 'h en vez de una contraseña , si lo dividimos por partes veremos que cualquier_cosa' cierra la contraseña y luego viene un operador OR lo que implica que si después del OR la operación da como resultado Verdadero toda la operación es verdadera ya que (false OR true) = true. Después del OR viene 'h'='h que se cierra con la última comilla, quedando 'h'='h' y es evidente que 'h' es igual 'h'.

Este ejemplo no es de los más trágicos pues igualmente se pueden ejecutar sentencia que borren todos los registros de la base de datos, lo cual podría provocar un serio problema en cualquier sistema.


¿Cómo evitar las Inyecciones SQL?

Evidentemente para evitar este problema simplemente hay que filtrar los datos externos que entremos en la sentencia SQL. En dependencia del sistema gestor de base datos y el lenguaje de programación existen muchas formas de evitar el problema.


Si usamos PHP - MYSQL

Si usamos el gestor de bases de datos lo que debemos hacer es eliminar las comillas. Explicaré a continuación como evitar el ataque usando lenguaje de programación PHP .


  1. No permitir comillas en casos de datos como un nombre de usuario, el cual solo debería aceptar caracteres alfanuméricos. Esto sin duda evitaría este problema sin mayores contratiempos con un simple filtro.

  2. Escapar todas las comillas de un texto determinado. Escapar no es más que colocar o anteponer el carácter “\” antes de poner una comilla, el carácter “\” indica que luego viene un carácter especial, evitando que este carácter tenga una interpretación errónea. Si sabemos en MYSQL el carácter Comilla tiene un significado especial , evitamos este significado al anteponer: “\”. Usted podría programar su propia función para realizar este filtro , sin embargo ya existen funciones en PHP que ejecutan esta tarea de manera eficiente. Lo ideal es usar la función mysql_real_escape_string.

  3. Entonces el ejmplo inicial quedaría de la siquiente forma:


    $pass = mysql_real_escape_string($pass);

    $query = “Select count(*) from usuario where nombre_usuario = ‘pepe’ and contrasena = ‘$pass’ “;


  4. La función mysql_real_escape_string está disponible en versiones superiores de PHP , no en las versiones antiguas 3 y 4. Por lo tanto es posible que tenga que usar otras formas de escapar los datos. Por ejemplo:


  5. $valor = str_replace(“’”, “\’” ,$valor); // lo que hacemos es reemplazar todas las comillas simples por \’.


  6. La función addslashes , también puede ser usada directamente para adicionar barra invertida a los caracteres comilla simple ('), comilla doble ("), barra invertida (\) y valor NULL. La función contraria a esta es stripslashes , la cual elimina las barras invertidas dejando la cadena como mismo estaba al inicio.


  7. Magic quotes , es una forma de evitar inyección SQL en PHP , la cual no recomiendo yo como programador ni prácticamente nadie en ningún artículo de los que he leído. Esta es una opción que puede habilitarse en la configuración de PHP (magic_quotes_gpc=on) y que en versiones antiguas venía habilitado por defecto. Lo que hace esta opción es aplicar el escape de las comillas en todos los datos que vienen por las variables: $_GET, $_REQUEST, $_POST and $_COOKIE de forma automática. Sin duda fue una solución muy exagerada y que trajo consigo que fue peor el remedio que la enfermedad. Si me preguntan el por qué:

    - Hay muchos muchísimos datos que usamos en nuestras aplicaciones que no intentan poner una inyección SQL. Por ejemplo cuando almacena código HTML , el cual contiene comillas que no necesariamente traen problemas en la base de datos.

    - Esto no resuelve ningún problema en gestores de base datos que tienen otras vulnerabilidades que no son precisamente las comillas.



    Nota: Es muy importante tener presente que si tenemos en uso esta opción a su conveniencia como programador, debe tener cuidado de no usar las funciones addslashes , ya que entonces obtendría una cadena con doble escape. La forma de saber esto de forma automática e independiente de la configuración PHP que tenga un servidor u otro es consultando la función get_magic_quotes_gpc() , si da como resultado 1 es que Magic quotes está activada.



    Luego si queremos recuperar estos valores de la base de datos y que se restablezcan a su estado original con las comillas podemos usar la ya mencionada función: stripslashes , que como su nombre lo indica elimina las barras invertidas.





No dude nunca en detenerse y analizar en su proyecto que método de seguridad va usar para evitar este tipo de ataque. La Inyección SQL es un ataque prevenible y que a veces se olvida tener en cuenta.

Moisés Soft , le responderá cualquier duda que tenga acerca de Inyección SQL. No dude en contactarnos

jueves, 10 de junio de 2010

SEO NOFOLLOW NOINDEX

En un articulo anterior ya explicamos que es SEO y la importancia que tiene para el existo de una página web en Internet.

En esta ocasión explicaré, la importancia que tienen las palabras NOFOLLOW NOINDEX usadas en distintas etiquetas de nuestros sitios web.

Cuando usted emprende la ardua tarea de posicionar su web en los buscadores de Internet ,la primera tarea es identificar las palabras o conjuntos de palabras que se relacionan con su web y que son las más usadas por los usuarios para buscar un servicio como el que usted brinda. Una vez que usted identifique esas palabras comenzara a usarlas de muchas maneras en su web , logrando que la densidad de las mismas sea alta. Pero de seguro tendrá contenidos no importantes, por ejemplo una de las páginas que usted de seguro no esta muy interesado que aparezca en Google, es la de los términos de uso , Login , Registro de usuario, entre muchas otras.
La respuesta está en el título de este artículo. El uso de las palabras NOFOLLOW NOINDEX , permite evitar perder la densidad de las palabras realmente importantes y los link realmente importantes.

¿Cómo hacer que una página no sea indexada por Google?
Haciendo uso de la etiqueta Meta, que debemos colocar en el Head del documento HTML de nuestra página colocaríamos lo siguiente:
<meta name=”robots” content=”noindex, nofollow” />

¿Cómo evitar que un vínculo a una página no sea seguido por Google?
Tan sencillo como escribir lo siguiente:
<a rel=”nofollow” href=”mi_vinculo_no_deseado.html”> Mi link </a>

¿Cómo hacer que un vínculo a una página no sea indexado ni seguido por Google?
Si usted además de no desear que Google rastree el link , tampoco desea que tenga en cuenta el texto del link coloca el atributo rel , indicando “nofollow, noindex”: que quiere decir no seguir , no indexar.
<a rel=”nofollow, noindex” href=”mi_vinculo_no_deseado.html”> Mi link no indexado, no seguido</a>

¿Cómo hacer que un vínculo a una página no sea indexado pero si seguido por Google?
<a rel=” noindex” href=”mi_vinculo_seguido.html”> Texto no indexado</a>

¿Cuándo usar este artificio?
- Cuando no deseamos que una página de nuestro sitio sea indexada: Etiqueta Meta
- Cuando el texto del link contiene una palabra que no deseamos que sea tomada en cuenta. Etiqueta A con rel=’NOINDEX’
- Cuando tenemos un link que no deseamos sea seguido por Google: Etiqueta A con rel=’NOFOLLOW’
- Cuando tenemos un link que no deseamos que sea indexado ni seguido por Google: Etiqueta A con rel=’NOFOLLOW, NOINDEX’

Consejos útiles:

- Usa esto atributos en todos los links salientes de tu página, por ejemplo en los mensajes de opiniones o comentarios escritos por usuarios de tu sitio web.
- En la paginas de términos de uso, registros de usuarios , login , FAQ, en otros. Aunque estas páginas no son un regla sin excepción.
- En los link que tengan palabras fijas como por ejemplo : “Ver contenido” ,”Vista previa”, “Aceptar” , entre otros tantos que se usan hoy en las web y que cuando se repiten muchas veces roban protagonismo por su densidad. Para estos link es recomendado usar NOINDEX , para evitar que Google tenga en cuenta los textos , y siga los links.

domingo, 9 de mayo de 2010

Integración del Editor Ckeditor

Ckeditor es un editor web de tipo WYSIWYG, este término ya lo explicamos en un anterior artículo. Ckeditor es la versión más actual del editor FCkeditor y es el editor web más versátil y configurable a mi modo de ver.

A continuación explicaremos como integrarlo en nuestros proyectos de la manera más sencilla.

Vea una foto del editor a continuación:



Es importante aclarar que si usted usa algún CMS o framework , estos pasos puede que no sean válidos o necesarios , por ejemplo si usa Joomla , todos estos pasos se realizan con la simple instalación de una extensión con el CKeditor , y luego habilitas como editor WYSIWYG predeterminado el CKeditor. Hecha esta aclaración continuamos con la explicación:

Pasos habilitar el editor:

1- Descárgalo de internet o adquirirlo por alguna otra vía.
2- Descomprimirlo y colocarlo en algún lugar de su directorio web
3- Colocar un textarea en el formulario de nuestra web donde queramos insertarlo
4- Colocar una referencia desde nuestra pagina a el componente Ckeditor.
5- Colocar los códigos correspondientes para cargar el editor, con la configuración que deseemos



Paso 1: Descárgalo de internet o adquirirlo por alguna otra vía.

Este componente es totalmente gratuito, puede ser descargado desde su página web oficial: http://ckeditor.com .

Paso 2: Descomprimirlo y colocarlo en algún lugar de su directorio web.


Descomprima el archivo y cópielo en algún lugar que tenga destinado para ello en su directorio web.
En el caso nuestro, tenemos una carpeta llamado Componentes, en el cual copiamos todos los componentes o bibliotecas que externas que utilizamos.




Paso 3: Colocar un textarea en el formulario de nuestra web donde queramos insertarlo

Ponga en su formulario un campo de tipo textarea donde usted desee que aparezca el editor.
Vea un ejemplo de textarea:


<textarea name="txtContenido" cols="50" rows="30" id="textarea"></textarea>


Paso 4: Colocar una referencia desde nuestra pagina a el componente Ckeditor.

Dede poner una referencia de tipo Javascript , al archivo llamado ckeditor.js , que se encuentra en la raíz de la carpeta del editor.
A continuación el código de enlace:


<script type="text/javascript" src="../Componentes/ckeditor/ckeditor.js"></script>

Es muy recomendado que esta referencia sea una referencia absoluta y no relativa, la razón es que su luego cambias de directorio o usas URL amigables tendrás que cambiar la esta dirección relativa por otra, y esto no ocurre con un dirección absoluta. Este código puede ir en cualquier sitio pero es recomendado que vaya en el head, junto con todas las otras referencias Javascript , CSS, etc.


Paso 5: Colocar los códigos correspondientes para cargar el editor, con la configuración deseada.


Si usted es curioso de seguro ya entro en la carpeta ckeditor , y se fijo que hay una carpeta dentro llama _samples , la cual contiene ejemplos de integración.
Vea la figura de abajo con la carpeta _samples



Un forma muy sencilla de cargar el editor en el textarea y a la ves configurarlo es por reemplazo de código. A continuación un ejemplo y luego explico:

<script type="text/javascript">

CKEDITOR.replace( ' txtContenido ' );

</script>


Con este codigo hemos mandado a reemplazar el textarea con nombre: txtContenido ,por el editor y su configuración por defecto.
Este código debe ir después de colocar el código del textarea , o en el evento window.onload , en el head del documento.

Sin embargo si queremos un poco que personalizar nuestro editor , colocar algunas de las herramientas , quitar otras , disponer de la posición de las mismas , entre otras cosas, entonces podemos hacer algo como esto:


<span style="font-style:italic;"><script type="text/javascript">

CKEDITOR.replace( ' txtContenido ',

{

toolbar : [

['Source','DocProps','-','Save','NewPage','Preview','-','Templates'],

['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'],

['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],

'/',

['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],

['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote','CreateDiv'],

['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],

['Link','Unlink','Anchor'],

['Image','Flash','Table','Rule','Smiley','SpecialChar','PageBreak'],

'/',

['Style','FontFormat','FontName','FontSize'],

['TextColor','BGColor']

]

} );

</script>


En este ejemplo acomodamos la barra de herramientas a nuestro gusto, a través del arreglo: toolbar , este mismo ejemplo usted puede tomarlo probarlo , quitar y/o modificar los valores y posiciones que se pasan a toolbar.


¿Cómo configurar otros aspectos del Editor?


Reamente el editor es tan configurable que necesitaremos otros artículos para explicarlo todo.
Si embargo no quiero terminar el artículo sin referirme al archivo de configuración y citar algún ejemplo.
El archivo de configuración de llama config.js , y esta en la raíz de la carpeta del ckeditor.
En dicho fichero vera un código como este:

CKEDITOR.editorConfig = function( config )
{
// Cambiar aquí la configuración
};




Dentro del mismo pueden cambiar las configuraciones. Por ejemplo para cambiar el idioma a español (debe ser un idioma soportado) puede colocar la siquiente línea:

config.language = 'es';

Los idiomas puedes verlos en la carpeta llamada lang
Para forzar a que todo lo que se copie en el componente se convierta en texto plano:

config.forcePasteAsPlainText = true;


Espero que te sea útil este modesto artículo, estamos a la espera de cualquier comentario o sugerencia.

URL amigables o semánticas

¿Qué son las URL amigables?
Las URL Amigables son las URL usadas por sitios web dinámicos para ser recordables por los usuarios, ilustrativas, y fáciles de indexar por los buscadores. Lo explico mejor a continuación y con ejemplos.
Explícame con un ejemplo
Las URL son para la el internet como los números para la telefonía; es la forma de acceder a un recurso único en la red de redes (Internet). Las páginas dinámicas introdujeron la posibilidad interactiva con los usuarios, esta interacción genera nombre de URL con variables poco ilustrativas, difíciles de recodar y que dicen poco a los buscadores a cerca del recurso que se muestra.

Por ejemplo:
http://zazua.com/details.php?id=34
Para los usuario que desconocen lo que significa esta URL, simplemente se está haciendo uso de una variable llamada: (id), en este caso es el (identificador) de un artículo, que tiene valor 34 en dicho ejemplo. Esta es una web que muestra un artículo identificado por el número 34.
Pero esta URL es fácil de recordar, una URL puede tener decenas de variables. La URL que muestro a continuación es aun más complicada de recordar:
http://zazua.com/details.php?id=34&view=1&user=user1

La solución a este gran inconveniente es la utilización de URL amigables. A continuación de muestra el ejemplo inicial con su respectiva URL amigable:
http://zazua.com/details.php?id=34
http://zazua.com/article/el-amor-todo-lo-puede--34.html

Estas 2 URL muestran el mismo artículo, sin embargo la segunda es una URL amigable, vea que tiene una porción de texto que claramente deja ver de que se trata el artículo, es mas fácil de recordar, es mas ilustrativa pues da a conocer su contenido, y es mucho más posicional para los buscadores como Google, los cuales tienen en cuenta el título de la web en correspondencia con su contenido y otros muchos aspectos.

Como implementar URL amigables
Si usas un servidor Apache como es el caso de nuestro equipo Moisés Soft , en la mayoría de los trabajos web realizados , la forma es a través del archivo .htaccess (hypertext access) . Este es un archivo que permite definir directivas de configuración y comportamiento del directorio donde se encuentre sin ir al archivo de configuración del apache. Para usarlo debes tener habilitado del modulo rewrite: rewrite_module.

El objetivo de este articulo no es explicar a fondo el funcionamiento del archivo .htaccess en profundidad. Unos de los usos de este archivo es, precisamente la construcción de URL semánticas a partir de reglas , pero tiene muchos otros:
- Restringir el acceso a directorios
- Restringir el acceso a IPs o ISPs
- Manejar errores del servidor.
- Crear redirecciones estáticas
- Controlar Cache
- Evitar hotlink
- Forzar Dominio sin WWW
- Creación de URLs Amigables (semánticas)

Quieres ver un sencillo ejemplo:
Un ejemplo sencillo de .htaccess , en el cual programamos las reglas del ejemplo inicial:
http://zazua.com/details.php?id=34 (URL Real)
http://zazua.com/article/el-amor-todo-lo-puede--34.html (URL amigable)

Lo que deberíamos escribir en el archivo .htaccess , para hacer válido el ejemplo anterior es lo siquiente:
RewriteRule ^article/(.+)--(.+)\.html details.php?id=$2
Voy a explicar de forma rápida que significa esto que hemos escrito.
Usamos la directiva RewriteRule , a esta directiva se le pasa una regla [article/(.+)--(.+)\.html] la cual puede ser una expresión regular como de lo cual estaremos hablado en otro artículo. Cuando dicha expresión regular se cumple, entonces internamente se va al segundo parámetro que es la URL real.

¿Que esta diciendo esta expresión regular?
Lo que dice esta expresión es que todoas las URL que comiencen por la palabra “article” luego un “/” , luego lo que significa “(.+)” es que puede venir cualquier texto luego dos signos de menos “--” , y por último cualquier cosa “(.+)” seguida de la terminación (.html) , como el punto “.” es un carácter reservado en las expresiones regulares se le antepone un “\” , para indicar que lo que se espera es un punto “.”

Falta explicar que significa la segunda directiva: details.php?id=$2
Si recuerdan la URL real tenía esta misma forma:
http://zazua.com/details.php?id=34
Lo único que ven distinto es el signo de dólar con un dos ($2), que lo que significa es que se le está dando el valor lo que aparezca en el segundo “(.+)” en la expresión regular.

Esquemáticamente lo que estamos haciendo es lo siguiente:
http://zazua.com/article/el-amor-todo-lo-puede--34.html
http://zazua.com/details.php?id=34
Vea como esta en rojo el ID en la URL amigable, lo estamos pasando a la URL real a través de la expresión regular
Ahora en ves que poner el Link al artículo 34 así:
http://zazua.com/details.php?id=34
Podemos ponerlo:

http://zazua.com/article/el-amor-todo-lo-puede--34.html
Lo que sucederá internamente es que re-direcciona para http://zazua.com/details.php?id=34 sin que el usuario ni el buscado se percate lo que está sucediendo pues la URL en el navegador es la primea y no la segunda.
Una aclaración es que en la parte en rojo del link de abajo, que es lo que le da la semántica a la URL puede ser cualquier texto, pero este texto no debe tener espacios en blanco ni caracteres no permitidos. Hace poco tiempo que las URL y los estándares ya permiten el uso de caracteres de diferentes lenguajes, pero aun así use solo caracteres sin acentos, y para separar las palabras use el signo de menos.
http://zazua.com/article/el-amor-todo-lo-puede--34.html

¿Cómo generar URL amigables de forma Automática?
Es muy simple, solo debes ser cuidadoso de no permitir que se te introduzcan caracteres no deseados en la URL. Para ello debes filtrar el texto que deseas poner en la URL.

El texto del ejemplo es: “El amor lo puede todo” y hay que convertirlo a “el-amor-todo-lo-puede” , eliminamos los espacios , las mayúsculas , los acentos en vocales y letras , como por ejemplo la “ñ” la cambiamos por la “n” la “ó” por “o”.
A continuación el código que usa Moisés Soft en el nuestro Framework: DIOS PHP

static function GetUrlAmigable($url)
{
$url = $titulo;
$url = strtolower($url);
// caracteres especiales latinos
$find = array('á', 'é', 'í', 'ó', 'ú', 'ñ');
$repl = array('a', 'e', 'i', 'o', 'u', 'n');
$url = str_replace ($find, $repl, $url);

// Los guiones
$find = array(' ', '&', '\r\n', '\n', '+');
$url = str_replace ($find, '-', $url);
// Reemplazamos demás caracteres especiales por “-”
$find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/');
$repl = array('', '-', '');
$url = preg_replace ($find, $repl, $url);
return $url;
}

GetUrlAmigable(“El amor lo puede todo”) == “el-amor-todo-lo-puede”

Espero que les sea útil este artículo y fijese que este blog y este articulo usan todo lo que hemos explicado si te fijas la URL es amigable: http://moises-soft.blogspot.com/2010/05/url-amigables-o-semanticas.html
Deje su comentario, ante cualquier duda o sugerencia.

miércoles, 28 de abril de 2010

WYSIWYG es una palabra muy usada en el mundo de Internet, y todos hemos interactuado con una herramienta de este tipo, es más, en este momento yo escribo en una herramienta que sigue este principio, y es el Word.

Pero qué significa WYSIWYG , esta palabra es un acrónimo de la frase en ingles: What You See Is What You Get , que en español quiere decir: lo que ves es lo que obtienes. Para explicar mejor este concepto voy poner un ejemplo: este articulo no es tan bonito como lo ves en tu navegador , si das clic derecho y buscar la opción (ver código fuente) que por lo general todos los navegadores lo tienen , podrás constatar que efectivamente el código que te hace ver este documento no es muy bonito, ya que es una mezcla de código HTML , XHTML, Javascript , CSS, y más. Estos códigos son traducidos por tu navegador y lo que te muestra es el significado o la vista de dicho código. Precisamente un editor WYSIWYG , es el encargado de mostrar en la medida que escribes un documento como quedara el resultado final.
Un ejemplo de estos editores HTML es el Dreamweaver, del cual también surgieron ideas tan buenas como los editores HTML en la web.

A continuación una imagen que ilustra una vista de código HTML en Dreamweaver:


Aquí puede ver parte del código HTML de la vista anterior:



También existen editores HTML que se insertan en formulario de la web, como son FCKeditor, TinyMCE.
El FCkeditor en su última y revolucionaria versión ahora llamada CKEditor, es el editor más completo y usado en internet.

Este ejemplo muestra como el editor CKEditor funciona muy similar al Dreamweaver. Lo increíble es que este hecho a base de código javascript y funciona en casi todos los navegadores.





Este es el Editor WYSIWYG que Moisés Soft usa en desarrollo de páginas web, se integra con cualquier CMS , Framework o tecnología. Es ideal para la administración de contenidos.
En otros artículos explicaremos como integra este editor en nuestros proyectos web.
Entonces cuando veas la palabrita WYSIWYG, ya sabes qué es. Y te enteraste aquí en el blog de Moisés Soft.

miércoles, 21 de abril de 2010

Enlaces HTML a correos electrónicos

Enlaces HTML a correos electrónicos

Una forma sencilla de hacer que los usuarios envíen un correo electrónico, es poner un enlace con la clásica  Etiqueta HTML, para ello solo haciendo algunas modificaciones.

Por ejemplo:

<A HREF="mailto:programador.profesional.net@gmail.com"> Rolando.NET </A>

Lo único que cambia en la estructura del vinculo es el protocolo http  que es el que por lo general se más se usa por (mailto:)

Cuando el usuario pinche en (Rolando.NET) automáticamente se abrirá la configuración de correo por defecto en su computadora, ya sea OUTLOOK, o cualquier otro cliente.

Que pasa si además de esto queremos hacerle la vida más fácil a los usuario, y colocar un asunto, un cuerpo para el mensaje y quizás también un correo al cual enviar copia del mensaje, o copia oculta BCC:

<A HREF="mailto:programador.profesional.net@gmail.com?cc=copia@gmail.com&subject=hola">Escribeme</A>

Aquí pueden encontrar un problema con los espacios, ya que no se pueden dejar espacios en blanco ni cambios de líneas, la forma de solucionar esto usar la  codificación de  caracteres de control.

Un espacio según la codificación es   %20 y un cambio  de línea %0D%0A:

En resumen los posibles parámetros son:

cc= Correo de Copia

bcc= Correo de Copia oculta

subject  = asunto del mensaje

body= cuerpo del correo

Si aun así le resulta difícil puede generar el código de vínculo a través de algunas herramientas de Internet como la siguiente: http://www.webexperto.com/herramientas/mailto.php

Espero que le haya sido de ayuda, y para que veas que si se hacerlo:


Autor: Rolando.NET

sábado, 17 de abril de 2010

SEO (Search Engine Optimization)

Estas siglas se han vuelto muy populares en el mundo de la web. ¿Pero qué es SEO? En este artículo trataré de explicar sin mucho tecnicismo qué es y por qué es tan importante para la web.

En español quiere decir: “Optimización para motores de búsqueda” , ahora explico , solo sígueme.

Imagina que haces una página web para tu empresa, negocio o de cualquier índole. Quizás tu página es muy llamativa, y con un buen servicio; luego solo esperas que mucha gente la encuentre en internet y comience a usarla ; he aquí el problema.
Las probabilidades de que las personas la encuentren son realmente muy bajas. Todo el que ande buscando un servicio similar al que brinde tu web, sino conoce ya otra pagina similar, se remitirá a un buscador de internet. ¿Cual buscador? Hay muchos buscadores, pero hay que ser realistas, yo cuando hablo de buscador me refiero a Google. No dudo que Google tenga información de tu pagina web , aunque tu no le hallas dicho “Oye hice una nueva página , se llama pepito.com y es para vender zapatos rosados”. El poderoso Google entra a tu sitio web aunque tu no se lo digas; pero hay otro problema: si tu sitio web no aparece en Google en los 10 primeros puestos cuando alguien tecle: “zapatos rosados” , es casi seguro que nadie se tomara el trabajo de ir a la página 2 y 3 de Google a ver si te encuentra.
Precisamente hacer que una página web aparezca en los 10 primeros puestos cuando alguien escriba palabras claves como “zapatos rosados” es trabajo SEO. Se debe aclarar que es un trabajo en el cual no se le paga nada a Google , hay páginas web que simplemente le pagan para aparecer en los primeros puestos , pero es una practica muy poco usual .

Definición formal:
Consiste en aplicar diversas técnicas para lograr que determinada página web aparezca en los buscadores de Internet en las primeras posiciones, para determinadas frases claves de búsqueda.
Se le llama SEO también a la persona encargada de realizar el trabajo de posicionamiento.

Moisés Soft , se dedica a prestar este servicio de preferencia en los mismo sitios que desarrollamos, aunque también aceptamos trabajo de SEO en sitios web ya desarrollados.

viernes, 16 de abril de 2010

Fav ICO

¿Qué es?
El fav icon que en realidad significa icono de favorito, es un icono que identifica las páginas web. Si usted usa un navegador gráfico como la mayoría de los usuarios en Internet , de seguro habrá visto en algún el icono de sitios como Google , Wikipedia, Yahoo. Estos iconos son una forma de identificar una web en las barras de los exploradores de internet y al desplegar las direcciones de dicha barra (ver figura 1); también en los favoritos.


fig. 1


Es una muy cómoda forma de encontrar la web en navegadores tienen la posibilidad de abrir varias paginas en una misma ventana a través de tabuladores , como es el caso del Firefox y el Internet Explorer 8 ,entre otros (ver figura 2).

fig. 2


Un poco de historia
Antiguamente para agregar un icono de favoritos, había que colocar dicho icono en el directorio raíz de la web, el mismo era mostrado automáticamente en navegador. Sin embargo esto no era muy flexible para páginas web dinámicas en las que si se deseaba cambiar el icono de forma obligatoria había que sobrescribirlo por uno nuevo y además de esto, la negativa de estar en el directorio raíz. Actualmente se creó una mejor forma de especificar los iconos favoritos , a través de HTML con una etiqueta LINK


¿Cómo poner un Fav icon en mi página web?
Es muy sencillo de hacer, solo hay colocar el icono en un directorio de nuestro sitio web y luego agregar la etiqueta LINK en el HEAD del cuerpo XHTML.
<link rel="shortcut icon" href="/favicon.ico" />


¿De qué tipo formato debe ser el Icono y que resolución debe tener?
Actualmente existen navegadores que soportan formatos como JPG, PNG, GIF, entre otros, así como variadas resoluciones. Sin embargo si deseamos que nuestro icono sea visto en cualquier navegador como Internet Explorer en cual nació el FAV ICON, lo recomendado es que nuestro icono tenga formato ICO y resolución 16x16, y decimos formato en todo el sentido de la palabra, no basta con cambiar la extensión del fichero. También es recomendado usar como ruta de acceso la raíz del servidor donde esté publicada la web.


Un sitio web interesante para el trabajo con Fav Icon
El sitio web http://www.getfavicon.org , te ayuda a crear y buscar iconos para tu sitio web.


Conclusiones
- Cree un archivo en formato valido .ico de resolución 16x16
- Guárdelo en la raíz de su sitio web con el nombre: favicon.ico
- Agregue la etiqueta : <link rel="shortcut icon" href="/favicon.ico" /> en el head de su web


Referencias:
http://es.wikipedia.org/wiki/Favicon
http://www.getfavicon.org

lunes, 12 de abril de 2010

Trabajos realizados por Moisés Soft

Últimos diseños de Homepages








Agencia de Viajes Buenavista Cubatours (http://buenavistacubatours.com)




La Casa de Iluminada




http://movilserver.com
Web Para desbloqueo de celulares online [De alta]





http://bom-apetite-havana.com Bom Apetite, la web de una paladar de Ciudad Habana, distinguida por su comida, servicio y visitadas por personalidades de Cuba y el mundo. [Esta pagina esta en espera de datos por parte del cliente para poner de alta definitiva]





http://nuestrosello.com
Una web argentina que promociona y vende música independiente. Actualmente la estamos actualizando.




http://pedritocalvo.com
La web del afamado cantante Cubano Pedrito Calvo , ganador de un premio Grammy (Actualmente ha sido modificada producto de un insperado cambio del Representante de Pedrito y ha sido montada otro diseño en Joomla)



http://zazua.com
Un portal para escribir artículos en formato texto o PDF de forma gratuita y para vender


http://rey-clasificado.freevar.com
Clasificado Rey , un sitio de web para la inserción de anuncios clasificados cubanos , a través de internet y vía correo electrónico

Declaración de misión de Moisés Soft

Construir páginas web a la medida que sean seguras y robustas. Satisfacer ante todo la necesidad de nuestros clientes, siempre con la idea de ganar ambas partes.

domingo, 11 de abril de 2010

Promocione su negocio con una página web en Internet, restaurantes, grupos musicales, negocios, empresas y más

Promocione su negocio con una pagina web en Internet, restaurantes, grupos musicales, negocios, empresas y más

Las páginas pueden ser:
1- Estática: Si solo necesita mostrar información, imágenes, flash promocional, etc.
2- Páginas Dinámica a través de CMS: Si lo que necesita es promocionar un negocio, a través de anuncios, noticias, fotos, videos, suscripción de usuario.
3- Página web Dinámica a la medida: .Si usted quiere una web con especificidades para su negocio o empresa. Por ejemplo un web para una Paladar o restauran en la que usted desea que los usuario hagan reservaciones vía Internet. En resumen si usted quiere que su página se adapte a necesidades especificas.



La páginas Estáticas son muchos mas rápidas de realizar y además mucho mas baratas. Por lo general como máximo tardan en desarrollarse 2 semanas y cuestan como máximo 100 CUC en dependencia de la cantidad de páginas contra diseño, el precio puede ser menor.

Las web montadas den CMS, dependen más de lo que los usuarios deseen, si incluyen diseño gráfico o no, el precio es siempre discutible.

La paginas Dinámicas a la medida no tienen precio limite, en cualquier parte del mundo hacer una web con una identidad (Logo) cuesta mucho dinero, estamos hablando de mas de 1000 Euros, sin embargo nuestro equipo oferta precios mucho mas baratos, paginas web que podrían costar 3000 euros han sido cobras en menos de 500 CUC.


¿Cómo es la comunicación durante el desarrollo de su página?
La interacción con los clientes es por internet (correo, chat) y/o teléfono para extranjeros o cubano no radicados en Ciudad Habana, para los habaneros la interacción además puede ser personal.
Usted solicita su página detallando todo lo que desea, se le hace un presupuesto con los costos y el cronograma de realización, que usted debe aprobar si esta de acuerdo, para comenzar a trabajar en su proyecto. El pago a través de depósito en tarjeta de crédito o de forma personal de ser posible.

Quiere ver alguna de las páginas que hemos realizado y están publicadas en internet:

La Web Oficial de Pedrito Calvo: http://www.pedritocalvo.com

Zazua: http://www.zazua.com (Web de publicación de y venta de archivos , y artículos de todos tipo )


La Web que promociona y vende online la música de los Festejos anuales de Palermo en Argentina:
http://www.nuestrosello.com (Actualmente trabajando en su versión 2.0)

Un página web muy sencilla para la venta de libros digitales:
http://www.todolibrosdigitales.co.cc

http://rey-clasificado.freevar.com (pagina de inserción de anuncio clasificados cubanos, muy parecida a revolico en sencillez para los usuarios)

En desarrollo la Web del restaurante de Playa: Bom Apetite

En negociación: La web de un grupo de música de Julio Pulido

Ahora le ofrecemos además todo servicio de diseño, además de la web también, le hacemos tarjetas de presentación, Carteles , propaganda grafica , animaciones flash Barner , videos y todo lo que contribuya a promocionar su negocio.

¿Quiere que su página aparezca en los primeros puestos de los buscadores de internet?
De que te sirve una web que nadie visita pues no aparece en Google?
Este servicio se llama SEO, también se lo ofertamos en el paquete si usted así lo desea, con un precio definido por mes, ya que este trabajo tarda meses.



¿Cómo publicar en internet la Web?
Para publicar su página en internet es necesario contratar un Hosting con Dominio, este proceso lo puede realizar usted mismo si lo desea, luego solo debe darnos acceso al Hosting. En caso contrario nos encargamos de hacer el contrato por usted. Aclaramos que este servicio es con terceros que se dedican a prestar este servicio.

¿Cómo contratar un servidor Hosting con Dominio?
Tener este servicio cuesta en Cuba unos 5 CUC al mes, es decir 60 CUC al ano. El proceso de contrato lo hacemos si usted no desea hacerlo, y luego le ponemos en contacto con los dueños del hosting .


Escriba a: programador.profesional.net@gmail.com , o llame a : 52 67 45 24 desde un fijo.

¿Cómo hacer contacto con nuestro Equipo?

Usted puede contactarnos a través del correo electrónico: programador.profesional.net@gmail.com

También puede llamar o enviar un SMS al teléfono: 53 52 674524

Actualmente estamos trabajando para la construcción de nuestra página web. Pero de momento nos damos a conocer a través del sitio web de clasificados conocidísimo en Cuba: http://revolico.com/ y en un sitio que web que ha desarrollado nuestro equipo, también de clasificados llamado Clasificado Rey en la dirección: http://rey-clasificado.freevar.com/

sábado, 10 de abril de 2010

Moisés Soft

Moisés Soft es un equipo de desarrollo de software , formado por cubanos , radicados en la isla. Tomamos el nombre de Moisés en honor al gran profeta que liberó al pueblo de Israel de la esclavitud en Egipto, partió al mar en dos para que el pueblo pudiera librarse de Faraón. Así como Moisés logró lo imposible con la presencia de Dios en su vida, creemos que solo la presencia de Dios puede hacer que nuestro equipo cruce el mar del anonimato a la bendición de la tierra de Canaán.