jueves, 29 de abril de 2010

Copiar un archivo: C++

0

Acabo de terminar un programa de ejemplo en c++ que copia dos archivos, espero que te sea de utilidad.

#include <iostream>
#include <fstream>

using namespace std;

int main (int argn, char * argv[])
{
    if(argn < 3) return 1;

    ifstream in(argv[1], ios::binary);
    if(!in.is_open())
        return 2;

    ofstream out(argv[2], ios::binary);
    if(!out.is_open())
        return 3;

    in.seekg(0,ios::end);
    long size = in.tellg();
    in.seekg(0,ios::beg);
    size -= long(in.tellg());
    cout << "FileSize: " << size << "bytes" << endl;

    char * buffer;
    long buffsize = size;

    do
        buffer = new char [buffsize];
    while (!buffer && bool(buffsize/=2));

    cout << "BuffSize: " << buffsize << "bytes" << endl;

    while(size > buffsize)
    {
        in.read(buffer,buffsize);
        out.write(buffer,buffsize);
        //if(!out.good()) return 4;
        size -= buffsize;
    }

    if(size != 0)
    {
        in.read(buffer,size);
        out.write(buffer,size);
    }

    in.close();
    out.close();

    return 0;
}
Comparte o puntua esta publicación ▼

miércoles, 28 de abril de 2010

Saber si un año es bisiesto

0

Si alguna vez, haciendo un programa, as trabajado con fechas seguramente te hallas encontrado con el problema de que el mes de febrero no siempre tiene 28 días. Los años que en vez de tener 365 días tienen 366 (febrero tiene un día mas, 29) se les llama años bisiestos.

Un año es bisiesto si es divisible por 4, excluyendo los que sean divisibles por 100, pero no los que lo sean por 400.

bool is_leap_year(int year)
{
 if(year % 400 == 0)
  return true;
 else if(year % 100 == 0)
  return false;
 else if(year % 4 == 0)
  return true;
 else
  return false;
}

De otra manera:

bool es_bisiesto(int year)
{
 return (year%4==0 && (year%100!=0 || year%400==0));
}
Comparte o puntua esta publicación ▼

jueves, 22 de abril de 2010

Menú con efecto blur solo con css

0

Os presento un menú fácil de hacer, que tiene un efecto bonito y que podéis usar en vuestras paginas web, lo único que tienes que tener en cuenta es que no le di soporte para Internet Explorer (quizás en un futuro lo haga para que no lo tengáis que hacer vosotros), pero si lo necesitas, en el post anterior dice lo necesario para que se vea bien en IE.

Demo / DescargarSource Code

Se trata de un menú cuyos elementos se encuentran borrosos, y al poner el ratón encima se quita el efecto blur viéndose el texto mas claro.

Para los navegadores mas modernos le puse una animación para que al poner o quitar el ratón de encima valla gradualmente poniéndose o quitándose el blur, para firefox 3.6 e inferiores e IE, hay que usar algún javascript para darle ese toque de animación.

Comparte o puntua esta publicación ▼

domingo, 18 de abril de 2010

Cross-Browser blurred text

1

Bueno, no se si "Texto borroso" se escribe "blurred text", pero lo importante ahora no es el título, sino la posibilidad de crear el efecto blur solo con css.

Demo / DescargarSource code

Con el siguiente código css podrás hacer que cualquier texto se vea borroso como en la imagen de arriba y funcionando en la mayoría de los navegadores.

.blur {
  text-shadow: #F00 0 0 4px;
  color: rgba(0, 0, 0, 0);
  color: #F00\9; /* Color for IE */
  width: 100%;   /* IE 5.5, 6, 7 Fix */
  filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius='2.5');
  -ms-filter: "progid:DXImageTransform.Microsoft.Blur(PixelRadius='2.5')";
}

El color del texto se cambia en la propiedad text-shadow y en la tercera linea, que he necesitado usar este css hack para IE.

El tamaño o nivel de desenfoque también se cambia en la propiedad text-shadow, concretamente el ultimo valor y para Internet Explorer, para que quede lo mas parecido al resto de navegadores tiene que ser aproximadamente la mitad, yo prefiero la mitad mas 0.5 (size/2+0.5).

La tabla de compatibilidad no esta completa, pero mas o menos es así:

  • Firefox: 3.1+
  • Chrome: Todas las versiones
  • Safari: 4+
  • Internet Explorer: 5.5+
  • Opera: 9+
  • Konqueror 4+

El único inconveniente es que habría que crear una clase para cada efecto blur con tamaño o color diferente. También me a parecido ver que en algunas versiones de ciertos navegadores soportan rgba y no text-shadow, lo que hace no se vea nada.

Comparte o puntua esta publicación ▼

jueves, 15 de abril de 2010

Calculando números primos (C++)

2
Este programa calcula todos los números primos hasta el 4294967295, o 232, que es el numero de 32 bits mas grande.
También mide el tiempo que tarda en calcularlos, que suelen ser unas cuantas horas, aunque depende de tu computadora.
Los tiempos en un ordenador a 3.4 GHz serán mas o menos:
Numeros total hh:mm:ss Numeros primos
100000 00:00:00 9593
1000000 00:00:00,3 78499
10000000 00:00:03,7 664580
100000000 0:01:20 5761456
1000000000 0:32:18 50847535
4294967295 sobre 5 horas? Todavia no lo calculé

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

#define MAX_INT 4294967295

int main()
{
    unsigned int *primos = new int [220000000];
    primos[0] = 2;
    primos[1] = 3;
    unsigned int n = 2;  // Nºde primos guardados en la matriz
    unsigned int i = 3;  // Para recorrer desde 3 a MAX_INT 
    unsigned int j, d;   // d = sqrt(i)
    clock_t tA, tB;

    tA = clock();
    while (i<MAX_INT)
    {
        d = unsigned int(sqrt(i+=2));
        for (j=1; d>=primos[j] && i%primos[j]!=0; j++) ;
        if(d<primos[j]) primos[n++] = i;
    }
    tB = clock();

    double t = double(tB-tA)/(double)CLOCKS_PER_SEC;

    printf("\nEncontrados %u numeros primos en %.3f segundos\n.",n,t);
    
    // para mostrar todos los numeros
    // for(i=0;i<p;i++) printf("%u\n",primos[i]);
    
    system("PAUSE");
    return 0;
};

Comparte o puntua esta publicación ▼

lunes, 12 de abril de 2010

Evitar inyección SQL en consultas MySQL con php

0
Con la inyección SQL es fácil que puedan acceder a muchos datos de tu base de datos e incluso modificarlos, por lo que es muy importante evitar esta vulnerabilidad.
Viene muy bien explicado en la Wikipedia que es y en que consiste.
Para evitar la inyección SQL tan solo tendremos que modificar un poco el código php, donde antes teniamos:
$query = 'SELECT * FROM users WHERE name = "' . $username. '"';
cambiamos $username por mysql_real_escape_string($username):
SELECT * FROM users WHERE name = "'.mysql_real_escape_string($username).'"
quedando nuestra base de datos protegida de la mayoría de los ataques. También he visto por ahí que si nuestra consulta trabaja con instrucciones como LIKE, GRANT ó REVOKE es mas seguro:
addcslashes(mysql_real_escape_string($username),'%_')

23/04/20010: Otra manera, no se si es mejor que la anterior, pero parece protegernos de lo básico. También sirve para prevenir que se pongan scripts, muy útil para filtrar los comentarios.
function strip_all($string)                                            
{
 $string = htmlentities($string);
 $string = strip_tags($string);
 $string = stripslashes($string);
 $string = addslashes($string);
 return $string;
}

O en una linea:
function strip_all($string)                                            
{
 return addslashes(stripslashes(strip_tags(htmlentities($string))));
}
Comparte o puntua esta publicación ▼

domingo, 11 de abril de 2010

Login simple con php

0
El titulo lo dice todo, iniciar sesión con php. Con el header WWW-Authenticate, que hará que salga una ventanita en nuestro navegador pidiendo un usuario y contraseña.
Muy útil para proyectos web que necesiten de un sistema básico de autentificación para acceder a áreas privadas, como un panel de control, etc ...
El ejemplo muestra como se hace para autentificar un único usuario, pero podría hacerse para todos los que se quiera, eso si, yo usaría una base de datos para almacenar los nombres de usuario y contraseñas.

<?php
function showLogin() {
 header('WWW-Authenticate: Basic realm="Company name"');
 header('HTTP/1.0 401 Unauthorized');
 echo('Lá página está protegida, usted necesita permisos.<br />');
 echo('Este texto se muestra si el usuario pulsa el boton "cancelar".');
 exit;
}

$user = (isset($_SERVER['PHP_AUTH_USER'])?$_SERVER['PHP_AUTH_USER']:"");
$pass = (isset($_SERVER['PHP_AUTH_PW'])?$_SERVER['PHP_AUTH_PW']:"");

if ($user == "admin" && $pass == "pass") {
 echo('Hola '.$user.'!');
 //header("Location: http://pagina.privada/");
} else {
 showLogin();
}

?>


Mas ejemplos e informacion: http://www.php.net/manual/es/features.http-auth.php
Comparte o puntua esta publicación ▼

sábado, 10 de abril de 2010

Conjunto de instrucciones x86

0
Navegando por la web me encontré esta pagina web puede ser muy interesante para aquellas personas interesadas en ASM o ensamblador, se trata de una lista con todas, o muchas de las instrucciones x86 de intel, con la definicion o descripcion, latencia, pseudocodigo similar al c con la operacion o lo que hace cada instrucción, y muchas cosas mas.

Comparte o puntua esta publicación ▼

lunes, 5 de abril de 2010

Letra Capital con CSS

1
Si quieres hacer que un texto de tu blog o pagina web comience con una letra capital, que por si no lo sabes, es una letra al inicio de un texto o párrafo que es más grande que el resto, quedando asi:

DEMO!


¿Como puedo hacer esto?, pues muy fácil, tan solo añadiendo unas lineas de código css y en el documento html "mete" dentro de un span la primera letra del texto al que le queremos dar estilo.

CSS:

.dropcap
{
    float: left;
    padding-right: 5px;
    display: block;
    font-size: 70px;
    line-height: 60px;
}

HTML:

<span class="dropcap">P</span>
Comparte o puntua esta publicación ▼