sábado, 7 de junio de 2014

Personalizar error 404 en AppServ

Mirando en varios sitios web he notado que no hay un tutorial que nos diga como personalizar el error 404 en AppServ sobre Windows, lo hay en otras plataformas, pero no en AppServ Windows. Por eso hoy les publico este pequeño tutorial que les explica lo sencillo que es personalizar esto. Empecemos…

¿Qué es el error 404?


Cuando tenemos nuestro servidor montado y el usuario intenta acceder a una página que no existe es cuando se produce el error 404, un ejemplo serio si la dirección de nuestra página es www.prueba.com/hola.php pero el usuario entra a www.prueba.com/hola.html vemos que la extensión de las paginas es diferente, por lo que el sistema no encontrara dicha página y mostrara una pantalla de error 404
En la anterior imagen vemos un error 404 y cómo podemos ver, este navegador deja ver al usuario información que a en mi opinión personal es un poco sensible porque puede ayudar a hackers a darse una idea de cómo es la “arquitectura” de tu sistema

¿Cuál es la solución?

La solución entonces en tener una página de error 404 personalizada, es decir creada por ti mismo en donde se muestre solo lo que tu desees mostrar como lo haces muchos sitios en Internet

Creamos la página

Esta página la crearemos a nuestro gusto, puedes ponerlos imágenes, fondos y todo lo que desees, o puede dejar este sencillo ejemplo que dejo aquí debajo
<?php
// basic 404 error page
header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Page not found</title>
</head>
<body>
<h1>Page not found</h1>
<p>Sorry, we cannot find that page.</p>
<p><a href="/">Please return to the home page…</a></p>
</body>
</html>

Una vez tengamos el código listo, lo guardamos con el nombre de “404.php” en nuestro directorio raíz que es la carpeta “www” y listo tenemos nuestra página lista, el siguiente paso es configurar el servidor

Configurar el AppServ

Ahora tenemos que configurar el servidor para que cuando no encuentre una página redirija al cliente a nuestra página de error y eso lo hacemos de esta manera:
Vamos al archivo de configuración de AppServ que normalmente se encuentra instalado en la carpeta “C:\AppServ\Apache2.2\conf”. El archivo se llama “httpd.conf” el cual vamos a abrir con el blog de notas.
Una vez tengamos el archivo abierto buscaremos (Ctrl+B) la línea:
 #ErrorDocument 404 /missing.html
Y la vamos a remplazar por esta otra:
ErrorDocument 404 /404.php
Nótese que esta última no tiene el carácter “#” al inicio, el cual indica que se trata de una línea comentario
Una vez esté lista la modificación; guardamos y cerramos.

Reiniciar el servicio

El último paso es reiniciar el servicio para que se apliquen los nuevos cambios que realizamos, esto lo podemos hacer de dos maneras:
Abrimos la ventana de servicios, para esto presionamos inicio y escribimos “servicios” y presionamos enter. Se nos abrirá una ventana como la siguiente, en donde seleccionaremos el servicio Apache2.2 y a la izquierda presionamos reiniciar

La segunda forma solo es reiniciar el ordenador y listo.

Y listo eso es todo, puedes empezar haciendo pruebas con páginas que no existan en tu sitio
Y si quieres personalizar cualquier otro error pues es procedimiento es casi el mismo para todos

Saludos!



sábado, 17 de mayo de 2014

Calcular edad exacta (VB.NET)

Aquí les dejo una función que me pidió una persona para calcular la edad exacta de una persona (Años, Meses, Días) ingresado como parámetros la fecha de nacimiento.


Private Function CalcularEdad(ByVal DiaNacimiento As Integer, ByVal MesNacimiento As Integer, ByVal AñoNacimiento As Integer)
        ' SE DEFINEN LAS FECHAS ACTUALES
        Dim AñoActual As Integer = Year(Now)
        Dim MesActual As Integer = Month(Now)
        Dim DiaActual As Integer = Now.Day
        Dim Cumplidos As Boolean = False
        ' SE COMPRUEBA CUANDO FUE EL ULTIMOS CUMPLEAÑOS
        ' FORMULA:
        '   Años cumplidos = (Año del ultimo cumpleaños - Año de nacimiento)
        If (MesNacimiento <= MesActual) Then
            If (DiaNacimiento <= DiaActual) Then
                If (DiaNacimiento = DiaActual and MesNacimiento = MesActual) Then
                    MsgBox("Feliz Cumpleaños!")
                End If
                ' MsgBox("Ya cumplio")
                Cumplidos = True
            End If
        End If

        If (Cumplidos = False) Then
            AñoActual = (AñoActual - 1)
            'MsgBox("Ultimo cumpleaños: " & AñoActual)
        End If
        ' Se realiza la resta de años para definir los años cumplidos
        Dim EdadAños As Integer = (AñoActual - AñoNacimiento)
        ' DEFINICION DE LOS MESES LUEGO DEL ULTIMO CUMPLEAÑOS
        Dim EdadMes As Integer
        If Not (AñoActual = Now.Year) Then
            EdadMes = (12 - MesNacimiento)
            EdadMes = EdadMes + Now.Month
        Else
            EdadMes = Math.Abs(Now.Month - MesNacimiento)
        End If
        'SACAMOS LA CANTIDAD DE DIAS EXACTOS
        Dim EdadDia As Integer = (DiaActual - DiaNacimiento)

        'RETORNAMOS LOS VALORES EN UNA CADENA STRING
        Return ("Ud. tiene exactamente " & EdadAños & " años , " & EdadMes & " meses y " & EdadDia & " dias")


    End Function

Nota: Tener en cuenta que los años cumplidos se sacan con la siguiente formula


 Años cumplidos = (Año del ultimo cumpleaños - Año de nacimiento)

martes, 13 de mayo de 2014

Programación basica de una extensión para Google Chrome

Introducción
 En la programación de extensiones para Google Chrome se necesita crear una serie de archivos los cuales crean una estructura que es la que el navegador interpreta como la “Extensión”. Ya que las extensiones son como programas; pueden llegar  a realizar miles de funciones, la función o necesidad que satisfaga dicha extensión o programa depende total y enteramente del programador y del publico al cual valla dirigido, por lo cual es imposible para mi enseñarles a crear una extensión propiamente dicha, ya que como acabo de mencionar depende de lo que ustedes como programadores quieran hacer.

Pero si les voy a enseñar a realizar la estructura básica que debe tener toda extensión para este navegador y además les voy a dar unas pautas de programación para los que no tienen el conocimiento en programación tan avanzado

Información
ü  El lenguaje que se utiliza para las extensiones es un poco de HTML y mucho JavaScript, así que si no manejas este lenguaje de programación o si lo manejas muy básico, te recomendaría que antes de continuar con este tutorial investigues y practiques un poco este lenguaje.
Te recomiendo iniciar leyendo  “Introducción a JavaScript” escrito por Javier Eguiluz Que puedes encontrar en este sitio web:
O la versión PDF en:
En donde se da una breve explicación de todo lo que es  JavaScript y está muy bien explicado.

ü  Si tienes experiencia en programación web, seguramente tienes Dreamweaver instalado en tu ordenador, en caso de que no lo tengas puedes usar un editor de texto muy sencillo y liviano para la descarga llamado NotePad2. Puedes utilizar cualquiera de los dos programas, ya que el código en ambos es exactamente igual.

ü  Y lo último que debes tener en cuenta es que la documentación para extensiones de Google en español es muy escasa, por no decir inexistente, así que no estará de más manejar un poco el ingles, ya que las paginas de las que nos guiaremos están en este idioma


Contenido
Lo primero que vamos a hacer es crear una carpeta en el escritorio, esta carpeta la vamos a llamar “Mi_Extension” o si ya tienes un nombre pensado para tu extensión le puedes llamar de esa manera.

Archivo Manifiest

Una vez tengas la carpeta “Mi_Extension” creada nos vamos al NotePad2 y pegamos el siguiente código:
  {
  "manifest_version": 2,

  "name": "My Extension",
  "description": "Extencion que realiza tal funcion",
  "version": "1.0",
  "icons": { "16": "icon.png",
                     "48": "icon.png",
                     "128": "icon.png" },
  "author": "Tu nombre va aquí, blog: miprogramador.blogspot.com",
  "options_page": "Opciones.html",
  "background": {
       "persistent": true,
    "page": "background.html"
  },
 

  "permissions": [
             "tabs",
             "storage",
        "*://*/"
       ],
 
  "browser_action": {
    "default_icon": "iconpup.png",
    "default_popup": "popup.html"
  }
 
 }
Les debería quedar algo como esto:
Ahora damos click en Archivo, Guardar Como, y guardamos el archivo en la carpeta que acabamos de crear  con el nombre “manifest.json”
Y lo que acabamos de crear es el archivo manifest, el cual lo describiría yo como la “Cabeza” de la extensión, ya que es donde se guarda la información básica de dicha extensión. Les explicare lo que representa cada línea para que de esta manera ya lo puedan modificar según la necesidad que tengan para su extensión
  1. Name: En la línea número cuatro esta la etiqueta “Nombre” que es en donde especificamos el nombre de nuestra extensión.
  2.  Description: Mas abajo esta la etiqueta “Descripción” que es donde incluimos una breve descripción de nuestra aplicación para que el usuario final pueda ver de qué se trata nuestra extensión
  3.   Version: La versión de nuestra extensión, en este caso 1.0 porque es la primera
  4. Icons: Aquí especificamos las imágenes que nuestra extensión utilizara como iconos, como vemos necesitamos diferentes tamaños de la misma imagen para ubicar en distintos lugares, se puede utilizar la misma para todos los tamaños pero es recomendable usar la misma imagen con sus respetivos tamaños
  5.   Author: Le sigue la etiqueta “Autor” En este lugar ponemos nuestro nombre y también un correo electrónico o sitio web para que los usuarios puedan contactar con nosotros si así lo deseamos
  6.   Options_page: En este lugar especificamos la dirección de una página que se abrirá cuando el usuarios desee acceder a las opciones de la extensión, hay que tener en cuenta que esto es opcional, si no quieres poner una página de configuración o opciones; elimina esta etiqueta de tu archivo. Otra cosa a tener en cuenta es que esta página debe estar dentro de la carpeta, mas adelante programaremos una para los que deseen tenerla.
  7.   Background: En  este espacio es donde especificamos el archivo principal de la extensión.
  8. Permissions: En este espacio es donde especificamos los permisos que nuestra extensión debe tener, si nuestra extensión debe utilizar un recurso, pero el permiso para dicho recurso no se encuentra especificado en este espacio entonces se producirá un error ya que el navegador no permitirá el uso del recurso necesitado.
  9. browser_action: cuando tenemos una extensión instalada en el navegador, nos aparece un icono en la esquina superior izquierda del navegador, que en algunas ocasiones nos muestra información sobre la extensión


En donde “default_icon” seria donde especificamos el icono con extensión .png y “default_popup” el archivo html que se expandirá cuando se haga click sobre el icono
Puedes consultar más información sobre el archivo manifiest en:



Archivo background.js

Nuevamente abrimos el NotePad2 y creamos un documento nuevo y pegamos este código

<html>
<head></head>
<body>
<script src="background.js"></script>
<script>
</script>
</body>
</html>

Y lo guardamos con el nombre background.html (Nótese que este nombre concuerda con el especificado en la línea Background del archivo manifiest)

Archivo background.js

Para crear este archivo volvemos a crear un documento nuevo y lo guardamos con el nombre background.js (Nótese que concuerda con el nombre en la línea 4 del archivo background.html) pero ¿que se pone en este archivo?
Este es el archivo en donde se plasmara el código de nuestra extensión, como les mencione anteriormente esto depende de lo que quieras que realice tu extensión, pero aquí les dejo un pequeño ejemplo:

chrome.tabs.onUpdated.addListener(OnLoginHandler);
if(localStorage['Registro']==undefined){
            var user = prompt('Introduzca su Nombre');
            localStorage['User']=user;
}
Else {
            alert ("Bienvenido"+ localStorage.User);
}
Tener en cuenta:
La primera línea es un evento originario de de Google Chrome, para programas extensiones necesitamos manejar y conocer todos estos eventos, puedes aprender más de estos eventos en este link https://developer.chrome.com/extensions/events

El resto de código no es mas JavaScript simple utilizando el Local Storage, el cual si me hicieron caso al inicio de este artículo y leyeron un poco sobre javascript o si eres programador de este, ya lo debes de conocer e interpretar perfectamente.

Archivo Opciones.html

Creamos el archivo Opciones.html este es un archivo que sirve para que el usuario pueda especificar opciones o configuración de la extensión o si deseas mostrar alguna información al usuario. Lo podemos crear si lo deseamos, si queremos ahorrarnos el trabajo o no lo necesitamos solo eliminamos la etiqueta del archivo mafiest y listo. Nótese que como su extensión lo dice; el lenguaje en este archivo debe ser HTML. Y nótese también que el nombre de este archivo concuerda con la etiqueta “options_page” en el archivo manifiest.

Imagen iconpup.png

Este es la imagen que se mostrara como icono de la extensión que será visible en la esquina superior derecha del navegador

Archivo popup.html

Este es un documento HTML que se ejecutara cuando el usuario haga click en el icono de la extensión que se ubica en la esquina superior derecha, que acabamos de ver como iconpup.png
Este archivo es opcional, y puede ser utilizado para mostrar información o para lo que el programador dese.

Imagen icon.png

Cuando vamos a la lista de extensiones instaladas en Google Chrome nos aparasen las extensiones con una serie de información que habremos ingresado anteriormente en el archivo manifiest
Pero vemos también que cada extensión nos parece con un icono o una imagen, esta es la imagen que guardamos con el nombre icon.png (Nótese que este nombre concuerda con el especificado en el espacio “icons” del archivo manifiest)

Empaquetar extensión
Una vez tengamos todos nuestros archivos listos y que la extensión haga lo que queremos que haga sin errores, entonces estamos listo para empaquetar la extensión, que vendría siendo algo así como la compilación para que podamos crear de estos un solo archivo que será el que instalaremos en los otros ordenadores donde queramos tener nuestra extensión
Para hacerlo solo vamos a la lista de extensión instaladas y pulsamos sobre el botón que dice “Empaquetar extensión”
Una vez hecho esto nos apareceré un mensaje como este:
En “Directorio Raíz” Examinaremos y colocaremos la dirección de nuestra carpeta “Mi_extension” y el campo “Clave privada” lo dejaremos en blanco, pulsamos “Empaquetar extensión” y listo.
Al realizar estas operaciones nos aparecerán dos archivos, uno con extensión .crx y otro con .pem
El archivo con extensión .crx es nuestra extensión, la que podremos instalar y el archivo .pem es la Clave privada de nuestra extensión (Especifico lo que es esto al final del articulo)
Instalar extensión
Para instalar la extensión que acabamos de empaquetar, solo tomamos el archivo que se genero en el empaquetado y lo arrastramos hasta la lista de extensiones instaladas y listo, el navegador nos instalar la extensión.

Y si deseas subir tu extensión a la Google Store aquí les dejo el link de un video que explica como

Clave privada
La clave privada es un archivo que el navegador nos solicita si queremos realizar una segunda versión o superiores de nuestra extensión, es como una llave que asegura que se trata de una versión más reciente de la primera extensión, de este manera podemos asegurar que mas nadie haga o suplante nuestra extensión, así que aseguren bien este archivo.






lunes, 17 de febrero de 2014

Raíz Cuadrada (Programación Básica)

Hola amigos y amigas de mi blog, quiero aprovechar este post para decirles que no olviden dejar sus comentarios y seguirme en mi cuenta de TW que es @dnegrete16 Para que podamos comunicarnos, me puedan dejar sus dudas, sugerencias, peticiones de códigos o lo que quieran.

Bueno no siendo mas vamos a lo que vinimos, hace un rato me encontré una pregunta en yahoo respuesta de un problema de programación muy sencillo y he venido a compartir mi respuesta con ustedes hoy
El problema dices así:

 “Lea 6 valores, Almacenelos en un vector, Determine la raíz cuadrada de cada número, Almacénelo en otro vector, Imprima los dos vectores.”

public static void main(String[] args) {
      
             /* -> Lea 6 valores
              * -> Almacenelos en un vector
              * -> Detrmine la raiz cuadrada de cada numero
              * -> Almacenelo en otro vector
              * -> Imprima los dos vectores.*/
            
             //Declaro los dos vectores que voy a utilizar
             int[] Numeros = new int [6];
             float[] Cuadrados = new float [6];
             //Ciclo para solicitar datos y realizar operacion
             for (int h=0;h<=5;h++){
                    //Solicito un numero y lo guardo en una variable de tipo string llamada valor
                    String valor = JOptionPane.showInputDialog("Digite el numero para la posicion " + h);
                    //Combierto a "valor" en entero y ahora se llama "ValorInt"
                    int ValorInt = Integer.parseInt(valor);
                    //Guardo "ValorInt" en el vector "Numeros"
                    Numeros [h]=ValorInt;
                    //En el vector de cuadrados meto la raiz cuadrada del valor ubicado en el vector numeros
                    Cuadrados [h]=(float) Math.sqrt(Numeros [h]);
             }
             //Muestro por consola el resultado
             for (int v=0;v<=5;v++){
                    System.out.println ("La raiz cuadrade de " + Numeros[v] +" es " + Cuadrados[v]);
             }

       }

       }
Y listo amigos, eso es todo, programación extremadamente básica

No se olviden de dejarme sus codigos en mi TW que es @dnegrete16. Saludos a todos

lunes, 3 de febrero de 2014

Calcular signo zodiacal VB.NET

Hola amigos y amigas hoy les traigo un problema muy común entre los estudiantes que están aprendiendo condicionales y toma de decisiones, que es un programa que te dirá que signo zodiacal eres basado en tu fecha conocimiento
Primero que todo solicitamos al usuario el dia y el mes de nacimiento

  Dim dia = InputBox("Dijite el dia de nacimiento")
        Dim mes = InputBox("Dijite el mes de nacimiento")

        MsgBox("Tu eres " & calcular(dia, mes))

Aquí lo estoy haciendo por medio de un msgbox pero pueden hacerlo por TextField para los que trabajan con interfaz grafica, seria de esta manera:

        Dim Dia As String = Me.TextBox1.Text
        Dim Mes As String = Me.TextBox2.Text
  MsgBox("Tu eres " & calcular(dia, mes))

Este código lo ponen en el evento Click del botón o donde quieran y de esta manera capturara los datos de dichas cajas de texto.
Y a continuación el método que se encarga de calcular el signo zodiacal

Public Function calcular(ByVal Dia, ByVal Mes)

        If Dia >= 21 And Mes = 3 Or Dia <= 20 And Mes = 4 Then
            Return ("Aries")
        End If


        If Dia >= 21 And Mes = 4 Or Dia <= 21 And Mes = 5 Then
            Return ("Tauro")
        End If

        If Dia >= 22 And Mes = 5 Or Dia <= 21 And Mes = 6 Then
            Return ("Geminis")
        End If

        If Dia >= 21 And Mes = 6 Or Dia <= 27 And Mes = 7 Then
            Return ("Cancer")
        End If

        If Dia >= 24 And Mes = 7 Or Dia <= 23 And Mes = 8 Then
            Return ("Leo")
        End If

        If Dia >= 24 And Mes = 8 Or Dia <= 23 And Mes = 9 Then
            Return ("Virgo")
        End If

        If Dia >= 24 And Mes = 9 Or Dia <= 23 And Mes = 10 Then
            Return ("Libra")
        End If

        If Dia >= 24 And Mes = 10 Or Dia <= 22 And Mes = 11 Then
            Return ("Escorpio")
        End If

        If Dia >= 23 And Mes = 11 Or Dia <= 21 And Mes = 12 Then
            Return ("Sagitario")
        End If

        If Dia >= 22 And Mes = 11 Or Dia <= 20 And Mes = 1 Then
            Return ("Capricornio")
        End If

        If Dia >= 21 And Mes = 1 Or Dia <= 19 And Mes = 2 Then
            Return ("Acuario")
        End If

        If Dia >= 20 And Mes = 2 Or Dia <= 20 And Mes = 3 Then
            Return ("Picis")
        End If

    End Function


Y listo eso es todo, aquí está el programa completo, espero les sirva y cualquier duda no piensen en dejar su comentario o en comunicarse conmigo a mi cuenta de TW.


Ver ejemplo en Java

martes, 7 de enero de 2014

Poner el modo incognito como modo predeterminado


Buenas amigos, en esta ocasión hago una publicación sobre una pregunta que veo algo un poco frecuente y es como hacer para que los navegadores (Este caso Internet Explorer y Google Chrome) se inicien siempre o con iconos aparte en modo de incógnito

Listo sin más charla empecemos, usaremos algo llamado línea de comandos o parámetros que usan todos los programas o al menos la gran mayoría de estos.
Vamos al icono del navegador que queremos que inicie en modo incognito (Ya sea que este se encuentre en el menú inicio o en el escritorio o donde sea) le damos click drecho y luego propiedades


  

Se nos abriera la ventada de las propiedades como esta:

En la opción llamada Destino dice:
“C:\Program Files\Google\Chrome\Application\chrome.exe”
 y este lo vamos a remplazar por:
"C:\Program Files\Google\Chrome\Application\chrome.exe" --incognito
Y presionamos aceptar y listo, al dar click sobre el icono se nos abrirá la ventana en modo incognito


 En el caso de internet explorer es exactamente lo mismo, solo que esta vez reemplazaremos
"C:\Program Files\Internet Explorer\iexplore.exe"
Por este:
"C:\Program Files\Internet Explorer\iexplore.exe" –private


En caso de que no nos guste la ventana en blanco o quieras que inicie directamente en un sitio web, agregas la dirección o url del sitio seguido del parámetro de incógnito. Ejemplo:

"C:\Program Files\Google\Chrome\Application\chrome.exe" --incognito miprogramador.blogspot.com
"C:\Program Files\Internet Explorer\iexplore.exe" –private miprogramador.blogspot.com

Eso es todo amigos, espero haberles ayudado y no olviden dejar sus comentarios

Nota importante: Varias personas se han comunicado a decirme que el comando para Google Chrome no les funciona, para que les funcione recuerden que es "--incognito" y no "-incognito", es decir; antes de la palabra incognito van dos signos menos (--) no un guion (-). No se confundan

lunes, 6 de enero de 2014

9.Comprobar si existe un SubString

A veces se nos da la necesidad de buscar una cadena dentro de otra cadena, por ejemplo;
Cadena = "Esto es un ejemplo de substring"
PalabraClave= "ejemplo"

Teniendo entonces la palabra clave que vamos a buscar y el objeto, contenedor o variable en el cual la vamos a buscar, podemos entonces realizar la búsqueda y nos devolverá como resultado un 12 que es el numero del carácter en el cual se encuentra ubicada la palabra clave.

Código:

        Dim Pos As Integer
        Dim PalabraClave As String = "mama"
        Dim BaseInts = "hola mi nombre es superman, mama"
        Dim PosIni As Integer

        'TipoBusqueda corresponde si se busca Mayus y Minus identicas...
        Dim TipoBusqueda As Long
        'Verificar si PalabraClave no esta vacía
        If Len(PalabraClave) Then
            'Busca desde la PosIni que se indico...
            Pos = InStr(PosIni + 1, BaseInts, PalabraClave, TipoBusqueda)
            If Pos > 0 Then
                'Si devolvio mayor de 0...se encontro
                With BaseInts
                    BaseInts = Pos - 1
                    BaseInts = Len(PalabraClave)
                End With
                MsgBox("Se encontro la palabra ne la posicion " & Pos)
            Else
                'No se encontró
                MsgBox("No se encontro.")
            End If
        End If


Si corremos este código tal y como esta nos dara como resultado este mensaje

8.Barrido de Texto

El barrido de texto él una función que busca un texto X dentro de un contenedor o cadena y lo remplaza por un texto Y. como por ejemplo:

Me.TextBox1.Text = Replace(Me.TextBox1.Text, "Texto X", "Texto Y")


En la anterior linea vemos que se realiza un barrido en el contenedor , que en este caso es la caja de texto 1 (Textbox1.Text), (cabe recordar que un contenedor puede ser todo aquello que contenga texto previamente asignado, una variable tambien puede ser un contenedor para un barrido), detro del contedor se buscara el texto –“Texto X” y si existe sera remplazado por –“Texto Y”, en el caso de que el texto no exista o no concuerde no se llevara acabo ninguna accion.

Error al montar disco duro en Linux

¿Te ha ocurrido frecuentemente este error al intentar montar un disco duro en tu sistema Linux? A mi me sucede mucho y note qu...