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