lunes, 16 de diciembre de 2019

Cómo añadir/editar recordatorios y tareas en WhatsApp utilizando Any.do

whatsapp any do

WhatsApp es una de las aplicaciones de mensajería instantánea más utilizadas en todo el mundo en diferentes plataformas.
Desde su adquisición por Facebook, la aplicación ha recibido varias características que mejoran la experiencia general. Recientemente, la aplicación ha añadido soporte para tareas y recordatorios en colaboración con Any.do. Permite una mayor productividad en WhatsApp, lo que nunca fue el caso. Por lo tanto, para utilizar esta función, hemos elaborado esta guía sobre cómo añadir/guardar recordatorios y tareas en WhatsApp utilizando Any.do.

Relacionado: Foros de SEO.

Any.do es uno de los servicios de productividad líderes, y al asociarse con ellos, WhatsApp ha tomado la decisión correcta. Sin embargo, hay una advertencia, ya que esta función sólo está disponible para los suscriptores premium de Any.do, que cuesta $2.99 por mes y se factura anualmente. Dicho esto, las tareas y los recordatorios de WhatsApp pueden activarse visitando whatsapp.any.do o desde la sección de integraciones de la aplicación Any.do.

Pasos para añadir/editar recordatorios y tareas en WhatsApp


  • Abra la aplicación Any.do y vaya a Settings -> Integrations -> WhatsApp.
  • Añada su número de WhatsApp y pulse sobre Enviar.
  • Ingrese los seis dígitos de la OTP recibida a través de texto para confirmar su número.
  • Ahora, simplemente activa los recordatorios y una nueva conversación con el bot Any.do. Se añadirá a su cuenta de WhatsApp.
  • Una vez configurada la integración de WhatsApp, puede agregar/guardar recordatorios y tareas mediante dos métodos.
  • Los recordatorios y las tareas se añaden o guardan en WhatsApp enviando mensajes de texto directamente a la conversación de Any.do bot escribiendo "Remind me to..." o reenviando un mensaje de un chat diferente a Any.do bot.
  • Por lo tanto, nunca se perderá nada importante de su familia, amigos o colegas mientras charla con ellos en WhatsApp.

Esperamos que nuestra pequeña guía para agregar recordatorios y tareas en WhatsApp le haya ayudado. Si tiene algún problema durante la instalación o el acceso a los servicios anteriores, háganoslo saber a través de los comentarios que aparecen a continuación.

viernes, 13 de diciembre de 2019

Otra entrada experimental

Solo para dejar un enlace

https://www.totalwind.net/foro/memberlist.php?mode=viewprofile&u=21695

miércoles, 6 de noviembre de 2019

Qué son los backlinks en SEO y cuáles son las ventajas

Un "backlink" es una de las palabras más utilizadas en el mundo de la optimización de motores de búsqueda (SEO).

Muchos bloggers que acaban de iniciar un blog o un sitio web a menudo tienen dificultades para entender lo que significa el término "backlink".

En este post, espero ofrecerte una comprensión de lo que son los backlinks, por qué son esenciales para el SEO, y por qué son importantes para tu éxito en línea. También aprenderá a analizar los backlinks de sus competidores y a adquirirlos para su sitio.

Vamos a empezar....

Los backlinks son enlaces entrantes a una página web.


Cuando una página web enlaza a cualquier otra página, se llama backlink. En el pasado, los backlinks eran la métrica principal para el ranking de una página web. Una página con muchos backlinks tendió a ocupar un lugar más alto en todos los principales motores de búsqueda, incluyendo Google. Esto sigue siendo cierto en gran medida.

Aquí hay un glosario de términos comunes relacionados con los backlinks que usted debe saber:

    Link Juice: Cuando una página web enlaza a cualquiera de sus artículos o a la página de inicio de su sitio web, pasa "link juice". Este jugo de enlace ayuda con el ranking del artículo, y también mejora la autoridad del dominio. Como blogger, puedes dejar de pasar link juice usando una etiqueta no-follow.
    Enlace No-follow: Cuando un sitio web enlaza con otro sitio web, pero el enlace tiene una etiqueta de no-seguir, ese enlace no pasa el jugo del enlace. Los enlaces No-follow no son útiles para el ranking de una página ya que no aportan nada. En general, un webmaster utiliza la etiqueta no-follow cuando se vincula a un sitio poco fiable.
    Enlace Do-Follow: Por defecto, todos los enlaces que añades a una entrada de blog son enlaces de seguimiento y estos pasan el jugo del enlace.
    Vinculación de dominios raíz: Esto se refiere al número de backlinks que entran en su sitio web desde un dominio único. Incluso si un sitio web se ha vinculado a su sitio web diez veces, sólo será considerado como un dominio raíz vinculado.
    Enlaces de baja calidad: Los enlaces de baja calidad son enlaces que provienen de sitios recolectados, sitios automatizados, sitios de spam o incluso sitios pornográficos. Estos enlaces hacen mucho más daño que bien. Esta es una de las razones por las que debe tener cuidado al comprar backlinks.
    Enlaces internos: Los enlaces que van de una página a otra dentro del mismo dominio se denominan enlaces internos. El proceso en sí mismo se denomina enlace o interconexión interna.
    Texto del ancla: El texto que se utiliza para los hipervínculos se denomina texto de anclaje. Los anchors de texto funcionan muy bien cuando se está tratando de clasificar para determinadas palabras clave.

Ejemplos de backlinks


https://www.reverbnation.com/artist/alquimaqezb21
https://telegra.ph/Alquiler-excavadoras-09-23
https://www.intensedebate.com/people/alquimaq_ezb21
http://myfolio.com/alquimaq_ezb21
https://itsmyurls.com/alquimaq_ezb21
https://addwish.com/excavadoras
https://www.pearltrees.com/alquimaq
https://coolors.co/u/alquimaq
https://www.myearthcam.com/alquimaq
https://alquimaq.dreamwidth.org/profile
https://www.yoreparo.com/es/usuario/3372393/alquimaq
https://mootools.net/forge/profile/alquimaq
https://opencollective.com/alquimaq-alquimaq
https://www.gapyear.com/members/alquimaq/
https://myspace.com/alquimaq
https://www.boredpanda.com/author/alquimaq_ezb21/
https://alquimaq.kinja.com/plataformas-elevadoras-1838855583?rev=1570479739536
https://telegra.ph/Alquiler-excavadoras-09-23
https://addwish.com/excavadoras
https://soundcloud.com/user-616814598
https://www.ted.com/profiles/15910426/about
https://trello.com/b/ipXjrdFd/excavadoras
https://seekingalpha.com/user/50736341/
https://telegra.ph/Osteopata-09-23
https://www.reverbnation.com/artist/javierdelanuezezb21
https://www.intensedebate.com/people/javierdelanuez
http://myfolio.com/javierdelanuez_ezb
https://itsmyurls.com/javierdelanuez
https://addwish.com/osteopata
https://www.pearltrees.com/javierdelanuez_ezb21
https://coolors.co/u/javierdelanuez
https://www.myearthcam.com/javierdelanuez
https://www.yoreparo.com/es/usuario/3372389/javierdelanuez
https://javierdelanuez.dreamwidth.org/profile
https://mootools.net/forge/profile/javierdelanuez
https://opencollective.com/javierdelanuez-javierdelanuez
https://www.gapyear.com/members/javierdelanuez/
https://myspace.com/javierdelanuez
https://www.boredpanda.com/author/javierdelanuez_ezb21/
https://javierdelanuez.kinja.com/osteopata-en-sevilla-1838809882
https://knowyourmeme.com/users/javier-delanuez
https://soundcloud.com/user-781143911
https://www.ted.com/profiles/15909365/about
https://trello.com/b/p3guCDAe/fisioterapeuta
https://weheartit.com/javierdelanuez_ezb21
https://www.indiegogo.com/individuals/22492698
https://telegra.ph/Retiros-de-yoga-09-23
https://www.intensedebate.com/people/viajar_sola_
https://addwish.com/retiros-yoga
https://giphy.com/channel/viajestransformacionales
https://www.intensedebate.com/people/viajestransfor
http://myfolio.com/viajarsola
https://itsmyurls.com/retirosyoga
https://www.pearltrees.com/viajestransformacionales#item272577927
https://coolors.co/u/viajestransformacionales
https://www.myearthcam.com/viajestransformacionales
http://pininthemap.com/b7fadb3f4f0f2c518
https://revistadiscover.com/profiles/blogs/retiros-de-yoga
https://viajestransformacionales.dreamwidth.org/profile
https://mootools.net/forge/profile/viajestransformacionales
https://opencollective.com/retiros-de-yoga
https://forum.flightradar24.com/members/86062-viajestransformacion
https://www.mexicoenfotos.com/~viajestransformacionales
https://forum.routeconverter.com/user-9408.html
http://www.cameronhighlandsinfo.com/forum/member.php?action=profile&uid=62243
https://telegra.ph/Dise%C3%B1o-Web-09-23
https://www.intensedebate.com/people/nosunelanube
https://giphy.com/channel/nosunelanube
https://addwish.com/posicionamiento-web-sevilla
http://myfolio.com/nosunelanube
https://itsmyurls.com/nosunelanube
https://www.puromarketing.com/?user=194636
https://forums.interworx.com/member/63975-nosunelanube
https://www.myearthcam.com/nosunelanube
https://www.pearltrees.com/nosunelanube#item270430628
https://opencollective.com/nosunelanube
https://coolors.co/u/nosunelanube
https://www.instapaper.com/read/1239580324
https://www.yoreparo.com/es/usuario/3373214/nosunelanube
https://nosunelanube.dreamwidth.org/profile
https://mootools.net/forge/profile/nosunelanube
https://www.ted.com/profiles/15873010
https://ask.fm/nosunelanubeezb21
https://trello.com/nosunelanube
https://500px.com/nosunelanube_ezb21
https://people.sap.com/nosunelanube
https://telegra.ph/Empresas-de-reformas-09-23
https://www.intensedebate.com/people/promitec
https://giphy.com/channel/promitec
https://addwish.com/reformas-integrales
http://myfolio.com/promitec
https://itsmyurls.com/promitec
https://www.pearltrees.com/promitec#item271980922
https://coolors.co/u/promitec
https://www.myearthcam.com/promitec
https://www.instapaper.com/read/1239594653
https://www.yoreparo.com/es/usuario/3373474/promitec
https://promitec.dreamwidth.org/profile
https://mootools.net/forge/profile/promitec
https://opencollective.com/promitec
https://500px.com/promitec_ezb21
https://www.ted.com/profiles/15873730
https://ask.fm/promitecezb21
https://people.sap.com/promitec
http://www.spoke.com/lists/5d9b33642c939dafdc0011dc
https://trello.com/reformasintegrales/activity
https://seekingalpha.com/user/50730942/comments

viernes, 22 de febrero de 2019

Comparar móviles en linea

Para comprar un móvil en estos tiempos de diversidad de marcas es difícil y mas si se quiere hacer una buena inversión y recibir a cambio las mejores prestaciones que se pueden recibir por una cantidad de dinero especifica.

Muchos portales se han dedicado a crear comparadores de móviles y mi preferido es este: https://www.tugadgetshop.com/celulares/comparar.html ¿Por que? pues no solo pone una tabla donde puedes ver las características de los móviles elegidos,  cuando tienes estas tablas uno no puede saber si algo es mejor o no, en cambio en esta página cada característica comparable te la informa como tal, es decir, el móvil 1 es mejor en cámara, etc

Facilita muchísimo la verdad y si tienes unos dos o tres smartphones en mentes puedes iros comparando y sacar un virtual ganador muy rápido y sin tanta complicación.

lunes, 23 de enero de 2012

corregir problema windows xp Archivo c:\windows\system32\config\system dañado o perdido

Bueno, este dia me tope con que llegue a la oficina (donde tengo que usar windows) y encontre mi computadora con pantalla azul asi que reinicie la computadora y para mi mal me encontre con el siguiente mensaje:
"El archivo c:\windows\system32\config\system esta dañado" asi que comence a googlear que encontraba pues no quería formatear, tengo demasiados correos, mas la infinidad de programas que hay que instalar etc etc, asi que no, dije, esta vez voy a buscar una solucion.
Pues bien, encontre por ahi que arranque con el Cd de windows xp y que elija la opción de Reparar y luego que sacara copias de seguridad de los achivos como system etc etc pues bien no podia copiarlos me decia que no se podia copiar el archivo y luego acceso denegado, pues bien, hice eso y pues nada me funcionaba, hasta que leyendo y leyendo y probando y probando encontre una solucion muy simple reamlente, asi que la comparto por si alguien tiene el mismo problema.


1) Arrancar el equipo con el cd de windows xp y elegir reparar
2) te listara los discos donde hay xp instalado algo asi 1: C:\windows al elegir el 1 te pueden pasar 2 escenarios a) pasa a la consola de ms-dos o b) te pide la contraseña de administrador   y luego pasa a la consola de ms-dos
3) ya estando en ms-dos tecleas chkdsk /p /r. El procedimiento tardara un poco dependiendo del tamaño de tu disco duro 
4) al finalizar escribs fixboot (en mi caso reinicie y entre nuevamente a modo de reparacion y ya en la consola escribi fixboot pero creeria que no debe de afectar que se haga despues del chkdsk) 
5) Reinicias y tu computadora debe arrancar sin ningun problema.


Asi que espero que esto les ayude con este problema y problemas parecidos de archivos de sistema dañados.

jueves, 5 de enero de 2012

Pagina squidoo para posicionamiento SEO

Bueno amigos, si quieren ganar relevancia en SEO y posicionar mejor su sitio, usar squidoo es una buena opcion, aca les dejo la mia de ejemplo


www.escachada.com - anuncios gratis

lunes, 26 de diciembre de 2011

Poner Anuncios Clasificados Gratis en Internet

Una de las principales acciones ha realizar para dar a conocer un producto o un sitio (ya sea para vender o solo darlo a conocer) es poner anuncios gratis en internet. La manera más facil para publicar anuncios gratis es a través de sitios que ofrecen servicios de publicación de avisos ordenados por categoría. Uno de los principales sitios con estos fines es www.escachada.com

Otra opción para publicar anuncios gratis en internet es a través de software o programas desarrollados que dan la posibilidad de publicar anuncios automaticamente con solo un click, por ejemplo AnuntioMatic.

Algunos sitios para poner anuncios gratis en internet son los siguientes: 

Recuerden, www.escachada.com el sitio para anunciar gratis en internet

www.escachada.com :: Anuncios Clasificados Gratis

Bueno amigos, esta vez no voy a hablarles de programación ni nada por el estilo, esta vez les quiero presentar es un sitio en el que he estado trabajando y que se encuentra en un estado aceptable, se trata de www.escachada.com un sitio creado exclusivamente para publicar anuncios clasificados de forma gratuita de forma experimental ha sido creado para los países de centro america: Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica y Panamá, y al encontrarse en un estado mas acabado será abierto para todos los países de habla hispana, incluyendo España.

Así es que si te encuentras en alguno de los países de Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica y Panamá y deseas publicar un Anuncio Clasificado Gratis, o simplemente andas buscando algo que comprar a un mejor precio que las tiendas, este es el sitio que puedes probar www.escachada.com.

Las URL’s par cada pais son:

El Salvador: http://sv.escachada.com/

Guatemala: http://gt.escachada.com/

Honduras: http://hn.escachada.com/

Nicaragua: http://ni.escachada.com/

Costa Rica: http://cr.escachada.com/

Panamá: http://pa.escachada.com/

Pero tiene un sistema de detección por país, así que si entras en http://www.escachada.com detectaremos tu país y serás redirigido al sitio correspondiente.

Mas adelante les estaré dando mas información, hasta luego.

www.escachada.com :: Anuncios Clasificados Gratis

Bueno amigos, esta vez no voy a hablarles de programación ni nada por el estilo, esta vez les quiero presentar es un sitio en el que he estado trabajando y que se encuentra en un estado aceptable, se trata de www.escachada.com un sitio creado exclusivamente para publicar anuncios clasificados de forma gratuita de forma experimental ha sido creado para los países de centro america: Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica y Panamá, y al encontrarse en un estado mas acabado será abierto para todos los países de habla hispana, incluyendo España.


Así es que si te encuentras en alguno de los países de Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica y Panamá y deseas publicar un Anuncio Clasificado Gratis, o simplemente andas buscando algo que comprar a un mejor precio que las tiendas, este es el sitio que puedes probar www.escachada.com.


Las URL’s par cada pais son:
El Salvador: http://sv.escachada.com/
Guatemala: http://gt.escachada.com/
Honduras: http://hn.escachada.com/
Nicaragua: http://ni.escachada.com/
Costa Rica: http://cr.escachada.com/
Panamá: http://pa.escachada.com/

Pero tiene un sistema de detección por país, así que si entras en http://www.escachada.com detectaremos tu país y serás redirigido al sitio correspondiente.
Mas adelante les estaré dando mas información, hasta luego.

martes, 1 de noviembre de 2011

PHP, MySQL, Apache, Xampp y otras hierbas - Diseño de la base de datos parte II

En la primera parte definimos y asumo que creamos la base de datos y las primeras tablas para el sistema de registro/login de la pagina que estamos haciendo.
Creamos 4 tablas: paises, usuarios, estados_de_usuario, tipos_de_usuario para los cuales esta vez crearemos las funciones y/o procedimientos almacenados necesarios para realizar las tareas básicas de un administrador o maestro, es decir, INSERT, SELECT, DELETE y UPDATE.
Para esto tomaremos como base la tabla paises y crearemos 4 procedimientos almacenados llamados:
  1. ipaises
  2. upaises
  3. spaises
  4. sallpaises
  5. dpaises
Así es que empecemos, si alguien no sabe que es un procedimiento almacenado le recomiendo leer esta definición de wikipedia.
Para la creación (CREATE) y modificación (ALTER) de los procedimientos almacenados utilizaremos heidiSQL ya que su interfaz nos facilitara esta tarea (y se los explique en un post anterior, así que háganme caso jjajaja), así que abrimos heidiSQL y seleccionamos la base de datos que creamos (db_shopping), hacemos clic derecho sobre el nombre de la base de datos y elegimos “create new->Stored Routine”
create_stored Nos quedará una pantalla como la siguiente:
pantalla_crear_procedimiento
En este punto definiremos el procedimiento almacenado, sus parámetros y el código SQL que ejecutará, para esto habrá que llenar los campos que tenemos disponibles:
name: ipaises
definer: dejar en blanco y el definer será el usuario que creo el procedimiento, para asignarle uno diferente deberás tener el privilegio SUPER en tu usuario (normalmente los web hosting compartidos no te dan este permiso el único que conozco yo es hostgator.com).
Type: Procedure (doesn’t return a result)
nota: en algunos casos yo prefiero utilizar una función (function) cuando lo único que devolveré es si se pudo o no ejecutar el código, pero realmente las funciones fueron pensadas en MySQL para que se ejecuten dentro del mismo MySQL, así que para respetar eso, usemos procedimientos almacenados con los cuales podemos a través de los parámetros devolver resultados tambien.
Data access: elegimos “Modifies SQL Data” ya que este procedimiento almacenado servirá para ingresar datos a la tabla. Definicion: Varias características proporcionan información sobre la naturaleza de los datos usados por la rutina. CONTAINS SQL indica que la rutina no contiene comandos que leen o escriben datos. NO SQL indica que la rutina no contiene comandos SQL . READS SQL DATA indica que la rutina contiene comandos que leen datos, pero no comandos que escriben datos. MODIFIES SQL DATA indica que la rutina contiene comandos que pueden escribir datos. CONTAINS SQL es el valor por defecto si no se dan explícitamente ninguna de estas características.
SQL Security: elegimos“Invoker” porque nos interesa que el usuario que ejecute el procedimiento almacenado tenga los permisos necesarios. Definicion: La característica SQL SECURITY puede usarse para especificar si la rutina debe ser ejecutada usando los permisos del usuario que crea la rutina o el usuario que la invoca. El valor por defecto es DEFINER. Esta característica es nueva en SQL:2003. El creador o el invocador deben tener permisos para acceder a la base de datos con la que la rutina está asociada. Desde MySQL 5.0.3, es necesario tener el permiso EXECUTE para ser capaz de ejecutar la rutina. El usuario que debe tener este permiso es el definidor o el invocador, en función de cómo la característica SQL SECURITY .
Deterministic: lo marcamos. Definicion: Un procedimiento o función se considera “determinista” si siempre produce el mismo resultado para los mismos parámetros de entrada, y “no determinista” en cualquier otro caso. Si no se da ni DETERMINISTIC ni NOT DETERMINISTIC por defecto es NOT DETERMINISTIC.
Ahora nos vamos a la pestaña “Parameters” y agregamos los parametros necesarios presionando el botón “Add”
parametros procedimiento
Para nuestro caso los parámetros de entrada serán los siguientes: (antepone la letra m a los campos de la tabla países, para mantener un estándar)
Nombre Parámetro
Tipo de Dato
Tamaño/Valor
Contexto
mpais_nombre Varchar 50 IN
mpais_codigo char 2 IN
mpais_simbolo_moneda char 10 IN
mpais_moneda_nombre char 20 IN
mpais_moneda_nombre_plural char 20 IN
mpais_moneda_iso char 3 IN
mpais_estado ENUM 'Testing','Produccion' IN
mpais_activo ENUM 'Activo','Inactivo' IN
mpais_url_testing varchar 100 IN
mpais_url_produccion varchar 100 IN
mpais_timezone char 50 IN
mpais_email_contacto varchar 50 IN
last_insert int OUT
A continuación el código SQL que colocaremos entre las etiquetas BEGIN y END:
INSERT INTO paises(
pais_nombre,
pais_codigo,
pais_simbolo_moneda,
pais_moneda_nombre,
pais_moneda_nombre_plural,
pais_moneda_iso,
pais_estado,
pais_activo,
pais_url_testing,
pais_url_produccion,
pais_timezone,
pais_email_contacto
)
VALUES(
mpais_nombre,
mpais_codigo,
mpais_simbolo_moneda,
mpais_moneda_nombre,
mpais_moneda_nombre_plural,
mpais_moneda_iso,
mpais_estado,
mpais_activo,
mpais_url_testing,
mpais_url_produccion,
mpais_timezone,
mpais_email_contacto
);

SELECT LAST_INSERT_ID() INTO last_insert;
END IF;
Este código lo podríamos leer así: Insertar datos a la tabla paises, y si no hay error guarde en la variable last_insert el insert_id de la tabla.
¿Como lo probamos???
Pues utilizando siempre heidiSQL presiona el botón que esta en la esquina inferior derecha de tu monitor que dice “Run routine(s)” con esto nos solicitara los valores de cada uno de los parámetros de nuestro procedimiento almacenado, pero deben tener en cuenta que los parámetros de salida nos tocara modificarlos a pie luego del código que nos genere heidiSQL, ahora presionen y llenen los parámetros según los vaya solicitando y deberían quedar con una pantalla con error como la siguiente:
error al ejecutar
Esto se debe a la variable OUT que tenemos al final, la cual no se reconoce bien por heidiSQL, así que solo presionen el botón OK pero les quedará el Query en la pantalla el cual podremos modificar para que lo podamos ejecutar efectivamente, el código que debió quedarles es el siguiente:
CALL `ipaises`('El Salvador', 'sv', '$', 'Dolar', 'Dolares', 'USD', 'Testing', 'Activo', 'http://127.0.0.1/shopping/', '', 'America/El_Salvador', 'hstanley@shopping.com', '')

El ultimo par de comillas simples corresponden a nuestra variable OUT (last_insert) y lo reemplazaremos por el nombre de una variable en mySQL por ejempo @last_insert y para observar que nos devolvera, agregaremos ademas lo siguiente: SELECT @last_insert; quedando todo junto de la siguiente manera:
CALL `ipaises`('El Salvador', 'sv', '$', 'Dolar', 'Dolares', 'USD', 'Testing', 'Activo', 'http://127.0.0.1/shopping/', '', 'America/El_Salvador', 'hstanley@shopping.com', @last_insert);
SELECT @last_insert;

Al ejecutar este código, nos insertara si no existe el código de país y nos devolverá el valor del pais_id en la variable @last_insert y deberá mostrar algo como lo siguiente:

call procedimiento efectivo
Si ejecutamos SELECT * FROM países veremos que se agrego la fila con los datos especificados.
Si volvemos a ejecutar el procedimiento con los mismo datos, nos devolverá un error que no esta siendo controlado por nosotros, para lograr esto debemos agregar algunas líneas al inicio de nuestro script justo después de la palabra BEGIN:
DECLARE insert_error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
SET insert_error=1;
END;

Y al final del INSERT agregamos:
IF insert_error THEN
SELECT -1 INTO last_insert;
ELSE
SELECT LAST_INSERT_ID() INTO last_insert;
END IF;
Con este código estamos manejando los errores en nuestro script, y asi controlar toda la situación (ERROR HANDLER), el codigo completo seria:
BEGIN
DECLARE insert_error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
SET insert_error=1;
END;

INSERT INTO paises(
pais_nombre,
pais_codigo,
pais_simbolo_moneda,
pais_moneda_nombre,
pais_moneda_nombre_plural,
pais_moneda_iso,
pais_estado,
pais_activo,
pais_url_testing,
pais_url_produccion,
pais_timezone,
pais_email_contacto
)
VALUES(
mpais_nombre,
mpais_codigo,
mpais_simbolo_moneda,
mpais_moneda_nombre,
mpais_moneda_nombre_plural,
mpais_moneda_iso,
mpais_estado,
mpais_activo,
mpais_url_testing,
mpais_url_produccion,
mpais_timezone,
mpais_email_contacto
);

IF insert_error THEN
SELECT -1 INTO last_insert;

ELSE
SELECT LAST_INSERT_ID() INTO last_insert;
END IF;
END

Guardamos, y volvemos a ejecutar el query que ya teníamos, y esta vez @last_insert nos devolverá –1
Sencillo verdad? bueno todo es conceptual y ordenarnos un poco y como siempre digo, mantener un estándar.
Luego de INSERT ahora haremos SELECT, es decir spaises y sallpaises.
Para spaises (seleccionar un pais especifico) para crearlo realizaremos el mismo proceso anterior definiéndolo así:
name: spaises
definer: dejar en blanco y el definer será el usuario que creo el procedimiento.
Type: Procedure (doesn’t return a result)
Data access: elegimos “Reads SQL data” ya que este procedimiento almacenado servirá para leer datos.
SQL Security: elegimos“Invoker” .
Deterministic: lo marcamos.
Ahora nos vamos a la pestaña “Parameters” y agregamos los parámetros necesarios presionando el botón “Add” de la misma manera en que lo hicimos con el INSERT con la única diferencia, que esta vez los parámetros serán de salida, así:


Nombre

Tipo de Dato

Contexto
mpais_id INT IN
mpais_nombre varchar(50) OUT
mpais_codigo char(2) OUT
mpais_simbolo_moneda char(10) OUT
mpais_moneda_nombre char(20) OUT
mpais_moneda_nombre_plural char(20) OUT
mpais_moneda_iso char(3) OUT
mpais_estado ENUM('Testing','Produccion') OUT
mpais_activo ENUM('Activo','Inactivo') OUT
mpais_url_testing varchar(100) OUT
mpais_url_produccion varchar(100) OUT
mpais_timezone char(50) OUT
mpais_email_contacto varchar(50) OUT
A continuación el código SQL que colocaremos entre las etiquetas BEGIN y END:
SELECT
pais_nombre,
pais_codigo,
pais_simbolo_moneda,
pais_moneda_nombre,
pais_moneda_nombre_plural,
pais_moneda_iso,
pais_estado,
pais_activo,
pais_url_testing,
pais_url_produccion,
pais_timezone,
pais_email_contacto
FROM paises
WHERE pais_id=mpais_id
INTO
mpais_nombre,
mpais_codigo,
mpais_simbolo_moneda,
mpais_moneda_nombre,
mpais_moneda_nombre_plural,
mpais_moneda_iso,
mpais_estado,
mpais_activo,
mpais_url_testing,
mpais_url_produccion,
mpais_timezone,
mpais_email_contacto;
Para probarlo, debemos hacerlo de la misma forma que el INSERT pero debemos sustituir todos los parámetros de salida por variables, quedando así:
CALL spaises('1', @a, @b, @c, @d, @e, @f, @g, @h, @i, @j, @k, @l);
SELECT @a, @b, @c, @d, @e, @f, @g, @h, @i, @j, @k, @l;
Ejercicio: Ahora les dejo hacer como ejercicio el procedimiento llamado scodigo_paises, con el cual a través del campo pais_codigo podamos extraer toda la data de un país en especifico, el cual con el siguiente código nos debería devolver los datos del país con código ‘sv’:
CALL scodigo_paises('sv', @a, @b, @c, @d, @e, @f, @g, @h, @i, @j, @k, @l);
SELECT @a, @b, @c, @d, @e, @f, @g, @h, @i, @j, @k, @l;
Bueno, hasta aquí este día, en la próxima entrega haremos sall_paises, delete y update.
Saludos

lunes, 31 de octubre de 2011

PHP, MySQL, Apache, Xampp y otras hierbas - Diseño de la base de datos parte I

push_bd

Esta vez vamos a ver un tema mas que medular a la hora de hacer un sistema o web y es donde vamos a almacenar los datos necesarios para el funcionamiento de nuestra pagina (estadísticas, registros, visitas, etc).

¿por que es medular? pues mucha gente no le da la importancia necesaria al diseño de la base de datos (que debería ser producto de un buen análisis de sistemas) o desconocen o no entienden correctamente la normalización y la integridad de los datos, los cuales si no son bien pensados a la hora de querer obtener datos y reportes, se vuelve en un verdadero caos y reto sacar la data de forma lógica.

Pues bien, para poder expresarme mejor y no nos sintamos tan aburridos como en las primeras partes de esta serie de “tips” comenzaremos a ponernos manos a la obra, se me ocurre hacer un proyecto lo mas completo posible para que podamos ver todas las funcionalidades, ventajas y mas bla bla bla que digo en un proyecto mas o menos real, ya que por ahí se encuentran solo porciones o pedazos que al final nos da mas dolor de cabeza intentando entenderlo que lo que las funcionalidades que tiene cuando ya lo logramos entender y hacer funcionar. Para no acongojarnos desde el inicio, empezaremos por lo mas básico de nuestro sitio que es el registro y login (ingreso) de usuarios, y para adelantarles, el sitio que haremos funcionará en varios países manteniendo usuarios individuales por país asi que manos a la obra.

Lo mas importante en todo lo que hacemos en la vida son los estándares (insisto) así que deben considerar y meterse en la cabeza que “debo hacer las cosas lo mas estándar posible” con esto me refiero a que la forma en que nombraremos nuestra base de datos, los usuarios de la base de datos, las tablas, etc mantenga un cierto orden lógico y estándar ¿por que? pues como siempre, porque lo digo yo :D,  de esta manera cualquiera que vea nuestro diseño a parte de que le de envidia, lograremos que sea fácil de recordar los nombres de campos, tablas, etc asi que para nuestro caso adoptaremos como norma lo siguiente:

  1. A las bases de datos les pondremos el prefijo “bd_” (sin las comillas por favor). Ej: bd_mibase
  2. Los usuarios de la base de datos tendrán el prefijo “usr_”. Ej: usr_haroldcrow
  3. Las tablas principales se nombraran utilizando la palabra plural de la data que contienen y siempre en minúsculas. Ej: paises, usuarios, visitas
  4. Las tablas secundarias (tipos, estados, etc) se nombraran utilizando el prefijo “tipos_de/estados_de” seguido de la tabla principal en singular. Ej: estados_de_pais, tipos_de_visita, tipos_de_usuario, estados_de_usuario, etc.
  5. Para el caso de los procedimientos almacenados y funciones de base de datos establecer un estándar es un poco complicado, pero haremos lo siguiente, el prefijo será “sp/fu” (respectivamente)  y luego debemos hacer 4 procedimientos para realizar las 4 funciones básicas de una base de datos SQL (Insert, Delete, Select, Update) los cuales nos ayudaran en la parte administrativa en todos los casos y solo algunos utilizaremos en el front-end pero es recomendable tener los 4 básicos siempre a la mano; entonces luego del prefijo continuaremos con la letra “I/D/S/U/*sall” segun corresponda y el nombre de la tabla. Ej: sp_ipaises, sp_dpaises, fu_upaises, etc. *sall: usaremos S cuando nos devuelva un registro en especifico y sall cuando nos devuelva varias filas.

Nota: el estándar que utilicen para sus tablas, bases de datos, funciones y SP, queda muy a su criterio y lógica, pero si no tienes uno o el que tienes no te satisface, te recomiendo que utilices este que te propongo pues yo ya tengo mas de 10 años con él y le ha sido útil a muchas personas.

Lo primero que haremos es crear las primeras tablas en nuestra base de datos con el heidi o comandos, las cuales serán:

  • Paises: Contendrá la información básica de los paises donde operará la pagina y su configuracion.
  • Usuarios: contendrá el listado de usuarios registrados en el sitio por pais.
  • estados_de_usuario: contiene la lista de los diferentes estados que pueda tener un usuario (activo, inactivo, bloqueado, etc)
  • tipos_de_usuario: esta tabla contiene los tipos de usuario que podemos tener por ejemplo si quisieramos diferenciar acciones que puedan realizar los usuarios dependiendo de esta clasificacion.

Código SQL para la base de datos y tablas:

Base de datos

CREATE DATABASE IF NOT EXISTS `db_shopping` /*!40100 DEFAULT CHARACTER SET utf8 */;

Tablas

CREATE TABLE `paises` (
`pais_id` INT(11) NOT NULL AUTO_INCREMENT,
`pais_nombre` VARCHAR(50) NULL DEFAULT NULL,
`pais_codigo` CHAR(2) NULL DEFAULT NULL,
`pais_simbolo_moneda` CHAR(10) NULL DEFAULT NULL,
`pais_moneda_nombre` CHAR(20) NULL DEFAULT NULL,
`pais_moneda_nombre_plural` CHAR(20) NULL DEFAULT NULL,
`pais_moneda_iso` CHAR(3) NULL DEFAULT NULL,
`pais_estado` ENUM('Testing','Produccion') NULL DEFAULT NULL,
`pais_activo` ENUM('Activo','Inactivo') NULL DEFAULT NULL,
`pais_url_testing` VARCHAR(100) NULL DEFAULT NULL,
`pais_url_produccion` VARCHAR(100) NULL DEFAULT NULL,
`pais_timezone` CHAR(50) NULL DEFAULT NULL,
`pais_email_contacto` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`pais_id`),
UNIQUE INDEX `codigo` (`codigo`),
UNIQUE INDEX `codigo_2` (`codigo`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
CREATE TABLE IF NOT EXISTS `estados_de_usuario` (
`usuario_estado_id` int(11) NOT NULL AUTO_INCREMENT,
`usuario_estado_nombre` varchar(50) DEFAULT NULL,
PRIMARY KEY (`usuario_estado_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

INSERT INTO `estados_de_usuario` (`usuario_estado_id`, `usuario_estado_nombre`) VALUES
(1, 'Creado'),
(2, 'Activado'),
(3, 'Bloqueado');

CREATE TABLE IF NOT EXISTS `tipos_de_usuario` (
`tipo_de_usuario_id` int(11) NOT NULL AUTO_INCREMENT,
`tipo_de_usuario_nombre` varchar(50) DEFAULT NULL,
PRIMARY KEY (`tipo_de_usuario_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `tipos_de_usuario` (`tipo_de_usuario_id`, `tipo_de_usuario_nombre`) VALUES
(1, 'Normal'),
(2,'Preferencial');
CREATE TABLE IF NOT EXISTS `usuarios` (
`pais_codigo` char(2) DEFAULT NULL,
`usuario_id` int(11) NOT NULL AUTO_INCREMENT,
`usuario_nombres` varchar(50) DEFAULT NULL,
`usuario_apellidos` varchar(50) DEFAULT NULL,
`usuario_email` varchar(100) DEFAULT NULL,
`usuario_clave` char(32) DEFAULT NULL,
`usuario_fecha_nacimiento` date DEFAULT NULL,
`usuario_telefono_casa` varchar(20) DEFAULT NULL,
`usuario_telefono_celular` varchar(20) DEFAULT NULL,
`usuario_sexo` enum('Femenino','Masculino') DEFAULT NULL,
`usuario_fecha_registro` datetime DEFAULT NULL,
`usuario_estado_id` int(11) DEFAULT NULL,
`usuario_fecha_activacion` datetime DEFAULT NULL,
`usuario_fecha_bloqueo` datetime DEFAULT NULL,
`usuario_codigo_activacion` varchar(100) DEFAULT NULL,
`usuario_spam` int(5) DEFAULT '0',
`usuario_facebook_id` varchar(50) DEFAULT NULL,
`tipo_de_usuario_id` int(11) DEFAULT NULL,
PRIMARY KEY (`usuario_id`),
UNIQUE KEY `cod_email` (`pais_codigo`,`usuario_email`),
KEY `codigo_3` (`pais_codigo`,`usuario_id`),
KEY `tipos_de_usuario_id` (`tipo_de_usuario_id`),
KEY `usuario_estado_id` (`usuario_estado_id`),
KEY `cod_ema_cla` (`pais_codigo`,`usuario_email`,`usuario_clave`),
CONSTRAINT `FK_usuarios_user_estados` FOREIGN KEY (`usuario_estado_id`) REFERENCES `estados_de_usuario` (`usuario_estado_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


 



Con esto ya tenemos listas la base de datos y las primeras tablas a utilizar. Si quieres descargar el script para las tablas puedes hacerlo aquí.

Nota: Podrán notar un pequeño detalle, y es que si ven la tabla paises y la tabla usuarios, el campo codigo_pais se repite en la tabla usuarios, y realmente el par codigo_pais,usuario_email se volverá nuestro índice único (unique) y espero poder explicar esto bien, si hubiese en este momento una tabla adicional que jerárquicamente este arriba de usuarios (es decir se relacione con usuarios, siendo la tabla usuarios el parent) esta tabla deberá contener este par de campos también, y con este par realizaremos la relación y así sucesivamente, por favor mantener en mente esto para que cuando creemos las siguientes tablas puedan comprender un poco mejor el concepto.

En la parte II crearemos los procedimientos almacenados a utilizar y probaremos su funcionamiento a nivel de código SQL.



 



Un saludo


miércoles, 26 de octubre de 2011

PHP, MySQL, Apache, Xampp y otras hierbas exóticas de la programación de la realidad. Parte I-b

Un saludo, ahora sigo con la parte B de la primera parte. Si leyeron por completo la primera entrega en su ambiente de desarrollo ya tienen instalado y configurado:


1) Servidor Web con PHP y MySQL con un usuario con privilegios suficientes
2) PHP Designer y
3) HeidiSQL


COLLATION Y CHARSETS




Ahora bien, algo que siempre nos rompe la cabeza es cuando hemos pasado programando un buen rato y ya tenemos buenos avances, y a alguien se le ocurre probar con tildes y ñ's y que pasa??? se muestra mal en la pagina y/o peor aun la información queda guardada en la base de datos con unos caracteres tan raros que te hacen recordar a Q*bert, como evitamos esto? pues es muy sencillo de hacer, todo esta en que tengamos un buen sentido del "estándar" (algo así como un sentido de orientación), lo que sucede es que tanto tu base de datos y su configuración manejan "juegos de caracteres (charset)", "collation" y la conexión a ella también tiene un juego de caracteres... también tu webserver, osea apache, maneja un chartset default, y tu HTML generado por el lenguaje de programación osea PHP también usa un tipo de caracteres (cuando hable de juego de caracteres, charsets, collation, tipo de caracteres, etc deben recordar que conceptualmente no es lo mismo, pero nos referimos a lo mismo).


Ahora bien, la mayoría de personas la palabra "estandar" le suena a arameo antiguo y a veces es como la religión, todos "son", "pertenecen" y saben que es, pero no practican para nada el concepto, lo mismo nos pasa con ser estándares, a veces por ignorancia otras por arrogancia, y muchas veces por "huevonancia", pero como hoy estamos viendo las cosas desde un punto de vista diferente, vamos a estandarizar nuestros charsets y collation desde un inicio para que todo nos quede bien desde el inicio.


Primero debemos tomar en cuenta donde estará hospedada la aplicación/web, a) si es en un lugar donde podemos manipular todas las configuraciones (php, apache, mysql), o b) en un lugar donde algunas configuraciones están predeterminadas y no tenemos acceso como en la mayoría de los webhostings.
Si tenemos el ambiente (a) es el mas sencillo, si tenemos el ambiente (b) es un poco mas complicado porque dependerá mucho de la configuración predeterminada que tenga, pero igual con un poco de código siempre podremos arreglar esto.


Configurando el ambiente
Tomemos el ambiente (a), empecemos por configurar Apache (como asumo que me hicieron caso y están usando XAMPP) busquen el archivo que esta en la carpeta conf de apache llamado httpd.conf y agregamos al final la siguiente linea:


AddDefaultCharset utf-8
Ademas, asegurense que en el archivo llamado charset.conv contenga esta linea (sino la agregan)


UTF-8       utf8        UTF-8
Reiniciamos apache, y con esto basta para con Apache.


Ahora vamos con MySQL, y es aquí donde debemos de tener un poco mas de cuidado ya que nuestra decisión puede ser difícil de revertir luego de haber creado bases de datos y tablas, así que estén seguros de su decisión primero, por ejemplo si eligieran que el charset default de mysql fuera UTF-8 y Collation utf8_general_ci y luego resulta que necesitaban que collation fuera utf8_unicode_ci, cambiar su BD y tablas les juro que les dará un poco de dolor de cabeza, así que les recomiendo crear una BD de pruebas y una tabla con un par de campos de caracteres (char, varchar, text) y hacer pruebas extrayendo y guardando datos desde php para asegurarnos que todo esta bien (es decir, hacer lo que les digo).
Ok, nos vamos al archivo my.ini que esta en la carpeta xampp\mysql\bin y agregan las siguientes lineas:



init-connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_general_ci
La primera linea nos define la conexión, la segunda el charset y la tercera el collation, ahora bien, esto es para que por default el ambiente quede así, pero no significa que no lo podamos cambiar con comandos ya sea de mysql o de php, así que ojo.
Guardamos my.ini y reiniciamos el servicio de MySQL, y con esto tenemos listo casi todo.


Por ultimo, y no por eso menos importante, esta el charset que usaremos en nuestro HTML, esto se define con el siguiente meta tag (si no sabes que es un meta tag, mejor búscate otro oficio por favor jajajja ) 


< meta http-equiv="content-type" content="text/html; charset=UTF-8" >
Y con esto tendríamos configurado todo el ambiente para que no tengamos problemas con los caracteres latinos (tildes, eñes, etc).




Nota: si quieren saber como esta configurada su base de datos, pueden ejecutar el siguiente comando show variables like '%collation%'

Si todas las variables tienen lo mismo, estén seguros que no tendrán problemas con la base de datos, deberia mostrarles algo asi:








Espero que les halla sido util lo que escribi, y si no les fue util... pues ni modo xD, si llegaron a este post y no han leido el primero, pueden leerlo aqui.


Saludos.











martes, 25 de octubre de 2011

PHP, MySQL, Apache, Xampp y otras hierbas exóticas de la programación de la realidad. Parte I


CREANDO EL AMBIENTE DE DESARROLLO


Introducción
Bueno, luego de haberme perdido algunos días, quiero comenzar a darle un enfoque de programación al blog, ¿por que? bueno se que a muchos no les importa el motivo, pero bueno, programar y hacer bases de datos es lo  que mejor hago, y esta será una manera de dejar un poco de lo que he aprendido en mi tiempo como programador, analista de sistemas, es decir todologo, a la humanidad, será un granito de conocimiento, pero se que a mas de uno le puede servir.

Luego de la introducción, si aun no se han aburrido, o no se han cortado las venas (verdad Miguel) quiero aclarar que la información que se presentará no esta destinada a aquellos que empiezan a programar (en general) es decir esta destinado a aquellos que ya saben programar un poco, lastimosa y desgraciadamente la pedagogia no es una fortaleza con la que cuento, soy pésimo enseñando a otros, pero haré mi mejor esfuerzo para explicarme lo mejor que pueda, y si no me sale bien, pues me contactan y ya jajajja.

Bueno, para empezar a usar PHP con MySQL es necesario que tengan un webserver configurado, claro, APACHE es genial, y pues, podríamos hacer una configuración individual, es decir, bajarnos Apache, luego PHP y MySQL, y claro complicarnos un poquitin la vida instalándolos y configurándolos uno por uno (no es la gran cosa pero no es el objetivo), y de hecho es lo que recomiendo, pero para este caso que trabajaremos en un ambiente de desarrollo, recomiendo que mejor se bajen XAMPP donde ya viene integrado todo y con unas mínimas configuraciones pueden dejarlo funcional para un ambiente aceptable de trabajo y desarrollo. Y luego les recomiendo bajar php designer que es muy bueno para escribir el codigo, pero al final escribelo donde quieras, notepad, notepad++, dreamweaver, etc realmente es opcional, yo te recomiendo php designer.
Y por ultimo, te recomiendo usar algun software para manejar las bases de datos, de mi gusto estan heidisql y sqlyog, puedes utilizar el que te guste, yo te recomiendo heidiSQLy para los que tienen plata pueden usar EMS Mysql Manager.


Nota: El ambiente de trabajo elegido por uds. es muy su prob. puede ser windows, gnu/linux, mac, etc pero quiero aclarar POR QUE HE ELEGIDO WINDOWS para el proceso de estos posts. Es muy sencillo, para bien o para mal, windows es el ambiente laboral mas común, me atrevería a decir que un 98% de las compañías trabajan y te obligan a trabajar con él, y el objetivo en si de estas publicaciones es que puedas desempeñarte mas tranquilamente en lo que vas a trabajar, pero a nivel de código de programación todo es igual, aqui y en la china asi que el ambiente es tu decisión.


Bueno luego de tener configurado tu servidor web (Apache + PHP + Mysql) quiero aclarar que utilizaremos mysqli para conectarnos a la BD, ¿por que? porque así quiero yo xD jaja, bueno no daré mayores detalles del porque pero para resumir les puedo decir que es mas rápida la conexión con mysql y es mas eficiente. 


Bueno recuerden, deben tener instalado (segun mis recomendaciones):

  1. Apache + PHP + MySQL = XAMPP
  2. Tener usuario para MySQL preferiblemente root o con GRANT para que puedan realizar todo lo que vamos a ver
  3. Instalar PHP Designer
  4. Instalar heidisql
Bueno por aquí dejamos la primera parte, en la siguiente parte, mostraré como hacer para que no tengamos problemas con las tildes, eñes y mas caracteres unicode en nuestro desarrollo... aja que pensaban, que estos detalles no los iba a tomar en cuenta!! y pues para aquellos que creyeron que solo iban a entrar y a programar pues se equivocaron, deben leer un poco para ser eficientes, porque muchos saben programar pero detalles pequeños les dan buenos tropiezos.
Nos vemos en el próximo post, nose cuando, recuerden, programar muchos pueden, pero hacer las cosas bien, es de pocos.


lunes, 4 de abril de 2011

Android vs. Android

Esta vez y sin tanto tapujo, hablaré del sistema operativo Android, el cual ha venido con gran fuerza y es casi que desconocido para muchos.

He tenido la oportunidad de conocerlo, utilizarlo y compararlo. Definitivamente aquellos que creen que un BlackBerry es lo mejor que se puede tener, definitivamente tienen que conocer Android.
Es un S.O.  potente, estable y con una proyeccion a mejorar los dispositivos moviles. Con su Market y desarrolladores de toda indole, ofrece una gama compleja y completa de herramientas para facilitar, entretener y divertir si asi se desea. Definitivamente en lo personal lo mejor que en dispositivos moviles se puede encontrar, practicamente una computadora de bolsillo.

miércoles, 22 de septiembre de 2010

Anchor o Anclas en Internet Explorer 8

Bueno esta vez estare dando tips pequeños de maquetacion con estandares y sin estandares (osea Microsoft).
En esta primera ocasion, lo que me acaba de suceder es que tengo un sitio en el que el marco es fijo (index) y una parte central que es un iframe. Pues bien, los iframes que se cargan deben de ser capaces de hacer que se vea desde la parte de arriba, ya que si uno se encuentra abajo del sitio, hace clic en un enlace y se abre un nuevo sitio en el iframe, este no sube. Pues bien, lo que hice fue poner un anchor o ancla como primera linea en cada pagina que voy cargando asi


Pues bien, funciona en todos lados menos en IE8, y pues el tema es que para que IE8 lo "valide" debe de contener "algo" el tag, por lo que se resuelve poniendole un espacio en blanco, de la siguiente manera



Podran haber otras formas, pero esta para mi ha funcionado, y sigue funcionando en navegadores con estandares como con ie del 6 al 8.
Espero que les sirva el tip

martes, 12 de enero de 2010

Elive se arruino luego de reiniciar a la fuerza

Pues bien, luego de tener ya unos meses con Elive, puedo decir que es una distro muy buena, liviana, facil de instalar, de usar y configurar, mas considerando que esta basado en mi querido debian....
Pero como todo en la vida, nada es perfecto, y eso lo encontramos desde el propio debian hasta las distros mas humanas como ubuntu, y pues para hablar de elive puedo decir que si va muy bien en computadoras PIII con unos 512 RAM maximo, pero en promedio con computadoras con 256 MB (lo tengo funcionando en unos 15 equipos con estas caracteristicas) si bien la instalacion no me da problemas, ni la configuracion, si me topo con problemas que a veces no logro resolver y ya me ha tocado reinistalar algunos equipos.
El que mas recuerdo, fue uno que le di apagar y no apagaba, asi que lo reinicie a la fuerza (si con el boton de reiniciar o apagado) y cual fue mi sorpresa, que la computadora ya no pudo arrancar, y por mas que hice e hice, no tuve mas alternativa que formatear el equipo, me salio mas rapido que resolver el problema.... lo senti como aquel pantallazo azul del sistema operativo que no se debe nombrar.... espero que esto sea algo que se corrija en un futuro cercano, ya que cuantas veces por a b o c motivo no nos toca reiniciar un equipo a la fuerza o una falla en la electricidad, y nos suceda esto.... seria una perdida de tiempo, no digo que me ha vuelto a pasar, pero es un problema a ser considerado ya que desgraciadamente SUELE PASAR, casualmente, pero pasa, asi que si ya dieron reiniciar o apagar y el equipo no se apaga o reinicia, paciencia, sino les puede pasar esto.


Y si alguien le paso y lo pudo solucionar, bienvenido sea el aporte.

sábado, 9 de enero de 2010

Elivecd.org Una Distro Gnu/Linux para computadores con pocos recursos

Elive una distro Gnu/Linux para equipos antiguos y nuevos



Bueno, esta vez les platicare sobre ELIVE una distribucion de Gnu/Linux que fusiona la calidad y estabilidad de Debian junto al escritorio liviano y poderoso Enlightenment.
Como lo encontre? pues muchas veces he intentado revivir computadoras antiguas (hablo de pentium 1 o 2, con 64, 128 y a lo mucho 256 de Ram) y pues he pasado por distros basadas en slackware que pues, han sido buenas pero que dolor de cabeza su configuracion, luego tambien puppy linux, Damm Small Linux, Xubuntu, etc, pero siempre me quedaba ese sabor de que no eran muy atractivos (a excepcion de xubuntu) y que preferia mi vieja pc monocromatica con el simple prompt para trabajar, que un ambiente grafico pobre y poco configurable, o que se necesitaba ir a dar la vuelta al mundo pasando por la luna para crear un acceso directo en el escritorio, algo que un usuario normal dificilmente podria hacer.
Realmente vale la pena probarlo y revivir esas computadoras con una distribucion de gnu/linux que te hara sentir tu pc viejita como la mas nueva del mundo
Pues bien en la busqueda de tal famosa distribucion, que me permitiera tener una pc antigua, con un escritorio agradable, y mas aun, atractivo, facil de usar, configurable y que hasta pudiera tener efectos, pues llegue a ELIVE.
ELIVE esta basado en el poderoso, unico y estable Debian
ELIVE esta basado en el poderoso, unico y estable Debian y que segun la pagina oficial, los requisitos minimos de operacion son los siguientes:
Minimum Requirements: The minimum hardware for running Elive is a 100 Mhz CPU and 64 MB of RAM, but the minimum recommended hardware is 300 Mhz and 128 Mb of RAM. You do not need any special graphics card or 3D acceleration to run Elive.
Ahora veamos unas imagenes de como se ve:
Panel
ELIVE PANEL
Elive
Elive
Aca queda un video de como se ve, como opera y mas....

Bueno, luego de todo esto, no todo es color de rosa.... todos sabemos, que SOFTWARE LIBRE no significa SOFTWARE GRATIS, y pues para poder descargar en este momento el disco, debes realizarle una donacion al creador de esta distribucion, que a mi juicio vale la pena, no pide mas que contribuciones minimas hasta de 10 USD, que a mi juicio valen mas la pena que 200 por un software malisimo, que no va a funcionar en mi computadora viejita, y que a colmo de males tiene el peor soporte del mundo y nadie me ayudara....
Realmente vale la pena probarlo y revivir esas computadoras con una distribucion de gnu/linux que te hara sentir tu pc viejita como la mas nueva del mundo.
No se arrepentiran