WASP Blog
26Jul/100

ASP.net Framework 4 en IIS 7

Esta semana empece a trabajar en Visual Studio 2010 con el Framework 4, ademas también estoy trabajando con Windows 7 y por tanto con IIS7 (Internet Information Server 7). Realmente me demore en poner a funcionar mi aplicación asp.net pero al final lo logre de la siguiente manera.

Habilitar IIS:

para ello vamos a Panel de Control->Programas y Características->Activar o Desactivar caracteristicas de Windows. Habilitamos entonces las siguientes caracteristicas

Internet information services

Luego de que este instalado, ingresamos en el Panel de Control->Herramientas Administrativas->Administrador de Internet Information Services (IIS).

Ventana IIS 7

Aparentemente hasta este punnto las aplicaciones asp.net framework 2 deben correr bien, pero para habilitar el framework 4 debemos registrarlos en el IIS 7, para esto vamos a la ventana de comando y colocamos :

%SystemRoot%\Microsoft.NET\Framework\v4.0.21006\aspnet_regiis.exe -i

Con esto se instalara el Framework 4 en el IIS 7.

Ya podemos crear un nuevo pool de aplicaciones y asignarle la version del Framework 4.

Espero que esto les ahorre mucho tiempo, por que la verdad perdi toda una mañana haciendo esto.

  • Share/Bookmark
13May/100

AS3: Segundos a Formato Hora

Tratando de crear un video player personalizado em encontre con la necesidad de coger el tiempo que me arroja el streaming que es en segundos y pasarlo a el formato conocido de h:mm:ss. Asi qeu cree esta clase estatica muy sencilla que hace esto de  manera  facil.  Podemos testiar nuestro codigo de la siguiente manera:

trace(TimeFormat.formatTime(210, TimeFormat.SECONDS));

Obteniendo para este caso "0:03:30".

Nuestro Clase estaria definida de la siguiente forma:

package com.wasp{

public class TimeFormat{

public static const HOURS:uint = 2;

public static const MINUTES:uint = 1;

public static const SECONDS:uint = 0;

public function TimeFormat() {
}

public static function formatTime(time:Number, detailLevel:uint = 2):String {
var intTime:uint = Math.floor(time);
var hours:uint = Math.floor(intTime/ 3600);
var minutes:uint = (intTime - (hours*3600))/60;
var seconds:uint = intTime -  (hours*3600) - (minutes * 60);
var hourString:String = detailLevel == HOURS ? hours + ":":"";
var minuteString:String = detailLevel >= MINUTES ? ((detailLevel == HOURS && minutes <10 ? "0":"") + minutes + ":"):"";
var secondString:String = ((seconds < 10 && (detailLevel >= MINUTES)) ? "0":"") + seconds;
return hourString + minuteString + secondString;
}

}

}
  • Share/Bookmark
24Mar/100

Evolucion de la memoria

Esta foto ilustra claramente como ha evolucionado la capacidad de almacenamiento, hasta limites creo seguramente hace 20 años no se imaginaba.

memoria

Esta foto muestra un disco de 2.5 gb de IBM en 1980, y una memoria microsd de 32 gb, creo que las imagenes hablan por si solas.

20GBv32GB

  • Share/Bookmark
12Ene/100

Camara de 3d Fujifilm

Actualmente las peliculas es 3d estan de moda y los proyectos realizados bajo estas caracteristicas sorprenden a todo el mundo. Mirando en la CES de este año 2010 encontramos entre todos los productos presentados (que de hecho son impresionantes) este desarrollo de fujifim que permite tomar imagenes en 3D.  Aun creo que no digiero bien esta tecnologia aunque fisicamente es sencillo de entender (un engaño a nuestro cerebro). Igual adjunto dos imagenes que muestran dos de las tecnologias utilizadas para la proyeccion de peliculas en 3D, donde el mas antiguo es la tradicional superposicion de rojo-verde ó rojo-azul que no permite una buena visualizacion (colores) comparada con la tecnologia de lentes polarizados como se muestra en la segunda imagen.

3-d-glasses-traditional

3-d-glasses-polarization-new

En este link puden encontrar más informacion sobre como funciona esta tecnologia http://computer.howstuffworks.com

Aqui esta entonces la camara desarrollada por Fujifilm que segun cuentan estara a la venta el proximo año (despues de los respectivo ajustes).

  • Share/Bookmark
14Dic/090

Tips: Elimina tu cuenta de Windows Live

Para eliminar una cuenta de Windows live haz lo siguiente:windows-live

Paso 1.-entra a aqui

paso 2.-una vez ahí ..a la izquierda “servicios de cuenta” te llevara a una ventana q te pedira tu contraseña

paso 3.-una vez en la pagina de ‘resumen de cuentas’

paso 4.-ve a la izquierda a “configuración”

paso 5.-se te abrira otra ventara y ahí a la derecha esta “tareas comunes” elige “cerrar cuenta”

recuerda que tu cuenta estara aun disponible durante 120 dias aproximadamente, por si deseas recuperarla...ya luego se cancela definitivamente.

  • Share/Bookmark
27Nov/090

PHP: listar archivos de un directorio

Listar los archivos de un directorio es necesario cuando se desea eliminar una carpeta pues no se puede eliminar carpetas con elementos dentro, de igual forma podriamos crear una siemple galeria en base a todas las imagenes que tenga una carpeta especifica.

//Directorio actual:$direct";
echo "Los rchivos:";
while ($archivo = readdir($directorio))
  echo "$archivo";
closedir($directorio);
?>

Es frecuente que podamos encontrar otras carpetas dentro de la misma y en esos casos si estas carpeta contiene informacion se tendria que elimnar primero la informacion dentro de ella antes de poderse borrar la carpeta respectiva. Para poder evaluar este tipo de situaciones podemos utilizar el funcion is_dir . Entonces si queremos mostrar todos los contenido incluidos los de las subcarpetas podemos utilizar algo asi como:

//Directorio actual:$directr";
echo "Los archivos:";
while ($archivo = readdir($directorio)) {
  if($archivo == '.')
    echo "$archivo";
  elseif($archivo == '..'){
    if($dir != '.'){
      $carpetas = split("/",$dir);
      array_pop($carpetas);
      $dir2 = join("/",$carpetas);
      echo "$archivo";
    }
  }
  elseif(is_dir("$dir/$archivo"))
    echo "$archivo";
  else echo "$archivo";
}
closedir($directorio);
?>

?>

Ya para eliminar agregamos la funcion unlink a la estructura deseada.

  • Share/Bookmark
Etiquetado con: , Sin Comentarios
16Nov/090

PHP: Clases abstractas

PHP desde su version 5 a configurado unlenguaje más robusto y tratando de ser un lenguaje Orientado a Objetos como java, c++, c# entre muchos otros. La posibilidad de crear objetos (funcionalidad propia de todo le nguaje OO) ha generado un gran entusiasmo en todo los programadores de PHP.
La abstracion de clases es un elemento sumamente importante por que son clases que definen patrones para otras clases que extiendes de estas (guias).
Un ejemplo muy interesante e ilustrativo que vemos permanentemente en los libros de programacion es el de los medios de transporte donde la clase abstracta es la de vehiculo y de la cual extienden objetos como carro, moto, bus, bicicleta etc.
La clase abstracta se declara de la siguiente forma:

    abstract class Vehículo
   {
    public $potencia;
    public $peso;
  }

Debemos saber que esta clase no se puede instanciar, si lo intentas de arrojara un error.

La clase abstracta definira las propiedades y metodos que se necesitaran para implementar las clases derivadas. Para ilustrarlo mejor refiriendonos a la clase vehiculo tenemos lo siguiente:

abstract class Vehículo
{
  public $potencia;
  public $peso;

  function __construct($potencia,$peso)
  {
    $this->potencia = $potencia;
    $this->peso = $peso;

    return true;

  }

  function relacionPesoPotencia()
  {
    if ($this->potencia>0)
    {
      return ($this->peso/$this->potencia);
    }

    return -1;
  }

  abstract function aceleracionAproximada();

}

La clase carro que extiende de vehiculo seria:

//// una Carro es un Vehículo
class Carro extends Vehículo
{
  function __construct($potencia,$peso)
  {
    $this->potencia = $potencia;
    $this->peso = $peso;

    return true;
  }

  function aceleracionAproximada()
  {
     $coeficienteTransmision = 3.0;

     $t = $this->peso * 771.73 / (2.0 * $this->potencia * 735);
     $t = $t * $coeficienteTransmision;
     return $t;
  }
}

Caracteristicas:

  • Las clases abstractas no se pueden instanciar.
  • Las clases que heredan de esta deben implementar todos los metodos abstractos.
  • Las clases abstractas pueden heredar de otras clases.
  • Los parametros de los metodos deben ser iguales, ya que sino sera tratado como otro metodo.
  • Si una clase tiene un metodo abstracto esta debe declararse también como clase abstracta.
  • Share/Bookmark
Etiquetado con: , , , Sin Comentarios
12Nov/090

Detectar visitantes mobiles en PHP

En estos dias tenia que realizar un proyecto en el que necesitaba presentar una versión movil de un sitio si esta era accedida desde un dispositivio con estas caracteristicas y por otro lado mostrar el sitio en todo su explendor si se entraba desde un computador.

Pense en hacer yo mismo la funcion que hiciera la detección utilizando $_SERVER['HTTP_USER_AGENT'] como base, la cual me arrojara información del dispositivo de donde se realiza la conexión.

Meditando un poco y buscando encontre si necesidad de pensar mucho (ya otro lo ha hecho por mi), una función realmente util y completa que hace esta tarea. La probe con mi celular que tiene Windows Mobile 6.1 con Opera Mobile e Internet Explorer y funciona de maravilla. Aqui les dejo el codigo y espero que les sirva.  :-)

<?PHP

$mobile_browser = '0';

IF(PREG_MATCH('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone)/i',
STRTOLOWER($_SERVER['HTTP_USER_AGENT']))){
$mobile_browser++;
}

IF((STRPOS(STRTOLOWER($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml')>0) or
((ISSET($_SERVER['HTTP_X_WAP_PROFILE']) or ISSET($_SERVER['HTTP_PROFILE'])))){
$mobile_browser++;
}

$mobile_ua = STRTOLOWER(SUBSTR($_SERVER['HTTP_USER_AGENT'],0,4));
$mobile_agents = ARRAY(
'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
'wapr','webc','winw','winw','xda','xda-');

IF(IN_ARRAY($mobile_ua,$mobile_agents)){
$mobile_browser++;
}
IF (STRPOS(STRTOLOWER($_SERVER['ALL_HTTP']),'OperaMini')>0) {
$mobile_browser++;
}
IF (STRPOS(STRTOLOWER($_SERVER['HTTP_USER_AGENT']),'windows')>0) {
$mobile_browser=0;
}

IF($mobile_browser>0){
// do something
} ELSE {
// do something else
}

?>
  • Share/Bookmark
11Nov/090

Bit.ly: Una herramienta para tener en cuenta

bit.ly

Si haz visto vinculos donde el nombre del dominio es Bit.ly junto con un codigo adjunto y te haz preguntado que diablos es eso sabiendo que siempre te lleva a la pagina requerida (lo vemos constantemente en twitter). Bien como buen curioso que soy he entrado a mirar bien de que se trata y he encontrado algo realmente interesante.  Bit.ly nos permite compartir link y archivos de una forma corta, pues coge toda la url y le asigna un identificador unico.

Con esto podemos mirara numero de click por vinculo creado con su historico, tambien podemos mirar como se mueve viralmente este vinculo por twitter o friendfeed...  realmente util

  • Share/Bookmark
8Nov/090

AJAX con JQUERY

Cuando recien descubria el verdadero poder de AJAX (Asynchronous JavaScript And XML), me puse en la tarea de crear mi propia libreria de trabajo para facilitar el desarrollo de las aplicaciones que realizaba. Luego descubri los diferenes frameworks de javacript como jquery, mootools, dojo YUI, entre otras (pueden ver mi post donde hablo sobre estos frameworks), los cuales integran el manejo de ajax de una forma muy poderosa por asi decirlo.

logo_jquery_215x53

Dado la cantidad de frameworks, me ha gustado bastante trabajar con jQuery, que es sumamente sencillo de implementar y esta muy bien documentado. En este ejemplo pretendo mostrar como invocar una pagina asincronicamente utilizando las funciones que me provee jQuery.

Antes que nada debemos descargar jQuery, lo podemos hacer desde ete link. una vez agregado el framework a nuestro proyecto vamos a crear un link o boton el cual al hacer click sobre este actuliza una zona de la pagina (div) con un contenido. Le asignamos posteriormente un evento, y dentro de este invocamos nuestra funcion de ajax de jQuery. Paralelamente utilizamos la funcion ajaxStart(), para poner un letrero que diga cargando mientras trae la información.

  <html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Prueba Ajax</title>

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

<script type="text/javascript" >

function obtenerDato(){
 $("#loading").ajaxStart(function(){
 $(this).show();

 });

 $.ajax({
 type: "POST",
 url: "obtenerDatos.php",
 data: "nombre=Cesar&apellido=Suarez",
 success: function(msg){
 $("#datos").append(msg);
 $("#loading").hide();
 }
 });

}
$(document).ready(function(){
 $("#loading").hide();
 });
</script>

</head>

<body>
<label>
<input type="button" name="button" id="button" value="Enviar" onclick="javascript: obtenerDato();"/>
</label>
<div id="loading">Cargando</div>
<div id="datos"></div>
</body>
</html>

Dentro del framework de jQuery podemos encontrar varios eventos como el utilizado (ajaxStart). Estos son:

ajaxError, ajaxSend, ajaxStop, ajaxSucces. Si miramos igual la documentacion se podra encontrar el envio de datos por GET (aqui se mostro con POST), entre otras muchsa opciones.

Descargar archivos aqui.

  • Share/Bookmark