martes, 27 de mayo de 2014

Instalar el Framework Zend de PHP en una Mac con MAMP

El Framework de desarrollo para PHP, Zend, tiene más de 10 millones de descargas, lo cual lo hace la herramienta más difundida y potente para este lenguaje para desarrollar bajo el esquema MVC.

1. Entrar a zend.com
2. Registrarse en la página
3. Bajar el framework ver 1 o 2 en zip o tar
4. Desempaquetar y guardar el directorio en "htdocs"
5. Generalmente se renombra el directorio a un nombre más sencillo (zf)
5. Abrir el php.ini
6. Buscar el init_path
7. Aumentar la ruta hacia la librería de zf /Application/MAMP/htdocs/zf/libray/
8. Abrir la terminal de Mac /Application/utilities/terminal
9, Crear una "alias": alias zf=/Application/MAMP/htdocs/zf/bin/zf.sh
10. Probar el alias con: zf show version
11. Apaga los servicios de MAMP y vuelves a encender para que se tomen los cambios

Crear un proyecto en Zend

1. Entrar a la terminal de Mac
2. Cambiarse al directorio htdocs cd /Applications/MAMP/htdocs
3. Utiliza el alias creado en la sección anterior: zf create project miAplicacion
4. Verificar las nuevas parapetas en htdocs/miAplicacion
5. Carpetas:
applications
docs
library
public
test
6. Probar la aplicación en un navegador con localhost:8888/miAplicacion/public
7. No deberá aparecer ninguna pantalla de error.


Crear una conexión con mysql-workbench
1. Debe bajar el myslq-workbench de mysql.com. La liga puede cambiar frecuentemente: http://dev.mysql.com/downloads/tools/workbench/
2. Instalarlo en la computador (quizás haga falta bajar la utilería adicional)
3. Abrirlo y debe hacer ya la conexión a MAMP

4. Pulse sobre el recuadro "local instance 8889" y voila!!! ya tendrá el editor

miércoles, 21 de mayo de 2014

ActionScript: Flecha que se estira (AS 3.0)

Autor: Francisco Arce
Correo: fj_arce@yahoo.com.mx


Esta basado en el algorito para una lineaque se estira. Aqui el chiste es dibujar la punta de la flecha y hacer que gire en el mismo ángulo que tenga la línea. Para obtener este ángulo, contamos con los puntos de la linea (el inicial y el final) y calculamos el arco tangente, el cual nos regresa el angulo en radianes. Los convertimos a grados y aplicamos la propiedad rotación. Acuerdate que los angulos en FLash estan desplazados 90 grados , por lo que ajustamos el mismo.

Como siempre se calcula la linea y la punta solo se rota, no hay distorsión. El código de la clase Flecha es el siguiente:

package {
   import flash.display.Sprite;
   import flash.events.MouseEvent;
   import flash.utils.Timer;
   import flash.events.TimerEvent;

   public class Flecha extends Sprite {
      var flecha:Sprite = new Sprite();
      var tiempo:Timer = new Timer(60,0);
      var contenedor:Sprite;
      var cuadro1:Sprite;
      var cuadro2:Sprite;
      var ancho:uint=10;
      var alto:uint=15;
      var x1:int=0;
      var y1:int=0;
      var x2:int=100;
      var y2:int=100;
      var color:uint=0;

      public function Flecha(xx,yy,lon,color):void {
      //Sujetador
      this.color=color;
      this.x1=xx;
      this.y1=yy;
      this.x2=xx+lon;
      this.y2=yy;
      //
      flecha.graphics.beginFill(0,.7);
      flecha.graphics.moveTo(-(ancho/2),-alto);
      flecha.graphics.lineTo(ancho/2,-alto);
      flecha.graphics.lineTo(0,0);
      flecha.graphics.lineTo(-(ancho/2),-alto);
      //
      addChild(flecha);
      flecha.x=x2;
      flecha.y=y2;
   //
   //Calcula segmentos
   var dx:Number=x1-x2;
   var dy:Number=y1-y2;

   //Determina el ángulo y lo convierte
   var radianes:Number=Math.atan2(dy,dx);
   var grados = 360*(radianes/(2*Math.PI));

   // point at cursor
   flecha.rotation=grados+90;
   //
   cuadro1=new Sprite ;
   cuadro1.graphics.beginFill(0xffffff);
   cuadro1.graphics.lineStyle(1,0,1);
   cuadro1.graphics.moveTo(0,0);
   cuadro1.graphics.lineTo(0,5);
   cuadro1.graphics.lineTo(5,5);
   cuadro1.graphics.lineTo(5,0);
   cuadro1.graphics.lineTo(0,0);
   //Sujetador 2
   cuadro2=new Sprite ;
   cuadro2.graphics.beginFill(0xffffff);
   cuadro2.graphics.lineStyle(1,0,1);
   cuadro2.graphics.moveTo(0,0);
   cuadro2.graphics.lineTo(0,5);
   cuadro2.graphics.lineTo(5,5);
   cuadro2.graphics.lineTo(5,0);
   cuadro2.graphics.lineTo(0,0);
   //
   contenedor=new Sprite ;
   contenedor.graphics.lineStyle(2,color,.7);
   contenedor.graphics.moveTo(x1,y1);
   contenedor.graphics.lineTo(x2,y2);
   //contenedor.x=xx;
   //contenedor.y=yy;
   addChild(contenedor);
   addChild(cuadro1);
   addChild(cuadro2);
   //
   cuadro1.x=x1-2.5;
   cuadro1.y=y1-2.5;
   cuadro2.x=x2-2.5;
   cuadro2.y=y2-2.5;
   //
   cuadro1.addEventListener(MouseEvent.MOUSE_DOWN, onMueveCuadro1);
   cuadro2.addEventListener(MouseEvent.MOUSE_DOWN, onMueveCuadro1);
   //
   cuadro1.addEventListener(MouseEvent.MOUSE_UP, onMueveCuadro2);
   cuadro2.addEventListener(MouseEvent.MOUSE_UP, onMueveCuadro2);
   }

   function onMueveCuadro1(e:MouseEvent):void {
      e.target.startDrag();
      tiempo.start()
      tiempo.addEventListener(TimerEvent.TIMER, onPintaLinea);
      //trace("inicio",e.target.name,e.target.x, e.target.y);
   }

   function onMueveCuadro2(e:MouseEvent):void {
      //trace("fin", e.target.name, e.target.x, e.target.y);
      e.target.stopDrag();
      tiempo.stop();
      pintaLinea();
   }

   function onPintaLinea(e:TimerEvent):void {
      pintaLinea();
   }

   function pintaLinea() {
      //
      //Calcula segmentos
      var dx:Number=cuadro1.x-cuadro2.x;
      var dy:Number=cuadro1.y-cuadro2.y;
      //
      //Determina el ángulo y lo convierte
      var radianes:Number=Math.atan2(dy,dx);
      var grados = 360*(radianes/(2*Math.PI));
      flecha.rotation=grados+90;
      flecha.x = cuadro2.x+2.5;
      flecha.y = cuadro2.y+2.5;
      //
      this.removeChild(contenedor);
      contenedor=new Sprite ;
      contenedor.graphics.lineStyle(2,color,1);
      contenedor.graphics.moveTo(cuadro1.x+2.5,cuadro1.y+2.5);
      contenedor.graphics.lineTo(cuadro2.x+2.5,cuadro2.y+2.5);
      addChild(contenedor);
      swapChildrenAt(3, 0);
   }
}
}

http://www.pacoarce.com

lunes, 5 de mayo de 2014

Acentos en HTML5


Los acentos en HTML5, y en HTML en general se manejan con el atributo charset. Lo podemos definir como UTF-8 o ISO-8859-1.

Si no se tiene la etiqueta <meta>, podemos escribir los siguientes símbolos en sustitución:

á -> &aacute;
é -> &eacute;
í -> &iacute;
ó -> &oacute;
ú -> &uacute;
ñ -> &ntilde;


Algunos editores trabajan con UTF-8 y si abrimos un documento en ISO-8859-1, nos pueden traer caracteres "extraños", como cuando se trabaja en Windows y lo abrimos en una MAC.

Para XHTML podemos usar:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />o
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

Para HTML5 esta etiqueta es más sencilla:

<meta charset="UTF-8">

También debemos de verificar si nuestro servidor no tiene algún charset diferente invado, el cual tenga conflicto con neutra etiqueta <meta>.

Por lo general, en Linux el chaset se encuentra en:

/etc/apache2/conf.d/charsettambién puede cambiarse en el archivo httpd.conf

Si tienes problemas con PHP, puedes añadir un encabezado a cada página como el siguiente:



<?php
header
('Content-Type: text/html; charset=UTF-8'); ?>

http://www.pacoarce.com

jueves, 10 de abril de 2014

¿only screen o sólo screen en los media querys, en CSS3?


En muchos estilos en cascada con el media query tienen palabra "only". Si la quitas la palabra "only" funciona igual (aparentemente). Según la W3C, el organismo que regula la internet:

"The keyword ‘only’ can also be used to hide style sheets from older user agents. User agents must process media queries starting with ‘only’ as if the ‘only’ keyword was not present."

Es decir, en un navegador moderno, el only funciona igual con y sin la palabra, pero en agentes antiguos, evita que esa regla u hoja de estilo sea leída. La página de la cita es:

http://www.w3.org/TR/css3-mediaqueries/#media0

http://www.pacoarce.com




lunes, 7 de abril de 2014

Cambio del uso horario en PHP


Si tu servidor tiene diferente huso-horario, lo puedes cambiar desde PHP con la siguiente sentencia, con la cual todas las funciones de fecha y hora quedarán relacionadas con el huso horario:

<?php
date_default_timezone_set("Mexico/General");
echo "La hora en la Ciudad de México es: " . date ("H:i",time()) . "<br />";

?>
También se puede modificar el huso horario desde el archivo INI con el parámetro date.timezone.
Por omisión se tiene la zona UTC o Europe/Lisbon.
El listado de zonas horarias que se pueden utilizar lo puedes encontrar en:
Para obtener la zona horaria definida, se puede usar la función date_default_timezone_get().
La función localtime() regresa el valor de la fecha y hora local en el servidor dentro de un arreglo:
<?php
date_default_timezone_set("Mexico/General");
$localtime = localtime();
$localtime_assoc = localtime(time(), true);
print_r($localtime);
print_r($localtime_assoc);
?>
Como PHP se ejecuta en el servidor y llega al cliente ya como HTML, para obtener la hora y fecha de la computadora necesitamos utilizar JavaScript.

http://www.pacoarce.com


martes, 18 de marzo de 2014

¿Qué diablos es una función? ActionScript 3.0

Funciones

Las funciones en AS3.0 tienen nuevas características importantes para la programación orientada a objetos. En general tenemos en ActionScript tres tipos de funciones: Funciones globales, métodos (o funciones relacionadas a un objeto) y funciones hechas por el usuario.
Las funciones las podríamos definir como grupos de sentencias que tienen un fin específico. Pueden o no regresar un valor. También podemos mandarles valores a las mismas (llamados argumentos o parámetros), pero también tendremos funciones sin parámetros.

Funciones globales

Las funciones globales están incorporadas a Flash, y pueden ser llamadas en cualquier parte del programa  Por ejemplo, la función trace(), se puede utilizar en cualquier sin definir un objeto y en cualquier momento. Otras funciones globales son las puede consultar en la ayuda del paquete.

Métodos

Los métodos son funciones que están asociadas a una clase. Existen métodos, de las clases predefinidas, en que los utilizamos por medio de la notación punto, por ejemplo:
Math.random()
En la programación orientada a objetos, y por lo tanto en AS3.0, es muy común que el programador genere sus propios métodos, añadiendo funciones a las clases hechas por el usuario. De hecho al hacer un constructor, estamos escribiendo una función.

Funciones personalizadas

Aunque en AS3.0 los usuarios también hacen funciones dentro de clases, llamaremos funciones personalizadas aquellas que se definen fuera de la clase. Dentro del paquete las llaman function clausures o cierre de función.

Llamado o invocación de una función

Para llamar a una función se utiliza su identificador, seguido de los paréntesis. Si la función requiere de parámetros o de argumentos, estos van dentro de los paréntesis, divididos por comas. Por ejemplo, nuestra ya conocida función global trace() requiere de un parámetro:
trace(“Hola Mundo”);
Existen parámetros que son requeridos y otros que son opcionales. Por ejemplo, si escribe una función trace() sin argumentos, el compilador le enviará un mensaje de error.
Si la función no requiere parámetros, con escribir los paréntesis vacíos es suficiente. De hecho, si una función global no requiere argumentos, puede escribirla sin paréntesis, pero a esto se le considera una mala práctica de programación.

Funciones de usuario

Existen dos formas de definir una función en ActionScript 3.0: por una sentencia de función o por una expresión de función. Las características de las mismas se presentan a continuación:

Función tipo sentencia

Este estilo de codificar funciones (también conocido extraoficialmente como codificación estilo Flash 5, porque en aquellos lejanos tiempos era la única forma) son la forma más adecuada de definir variables cuando se trabaja en con el compilador en modo estricto.
Este modo tiene la siguiente sintaxis:
function nombreFuncion(arg1, arg2,…){
}
Primero va la palabra reservada function, seguido del identificador de la función. Entre paréntesis van los argumentos (si existen), y después las llaves, que forman el cuerpo de la función.

Funciones tipo expresiones

También conocida como función literal o anónima. Extraoficialmente se le conoce como tipo de codificación Flash MX, porque en esta versión apareció.
Su sintaxis es:
var nombreFunción:Function = function (arg1, arg2,…){
}
Nota: En general debe considerarse usar las funciones de sentencia, pues son más fáciles de leer y el compilador detecta de mejor manera cualquier problema que se encuentre en ellas. Las funciones de sentencia (tipo Flash 5) existen en todo el ámbito en que están definidas. Las funciones de expresión deben ser definidas antes de ser utilizadas.

Funciones que regresan valores

Para regresar un valor de una función, al igual que las versiones anteriores de AS, utilizamos la palabra reservada return. Todas las sentencias que se encuentren debajo del return ya no son procesadas, pues con esta sentencia termina la función. En el modo estricto del compilador, la función debe de regresar el mismo tipo de dato con la cual fue definida, por ejemplo:
function cuadrado(num:int):int {
            return num*num;
}
Para indicarle al compilador el tipo de dato de regreso, se debe escribir el signo de dos puntos (:) entre el paréntesis que cierra los argumentos y la llave que abre el cuerpo de la función. Los tipos deben de ser los mismos que los tipos de datos ya revisados.
Si la función no regresa ningún valor, y quiere que el compilador en modo estricto lo detecte, debe utilizar la palabra reservada void. A diferencia que en las versiones anteriores, la palabra void se escribe toda en minúsculas.

Funciones anidadas

Es posible anidar funciones, es decir, poner una o más funciones dentro de otra. Las funciones anidadas no van a poder ser acezadas fuera de la función que las contiene, a menos que sean llamadas por “referencia”, término que analizaremos más adelante.

Ejercicio


  • Abra un archivo Flash ActionScript 3.0 y guárdelo como funciones.fla en su carpeta de trabajo.
  • Abra un archivo ActionScript y guárdelo como Funciones.as en la carpeta misClases.
  • Ligue a ambos archivos en el campo Document Class.
  • Asegúrese de que se encuentra e modo estricto del compilador.
  • En el archivo de clase escriba el siguiente guión:
package misClases{
            import flash.display.Sprite;
            public class Funciones extends Sprite {
                        public function Funciones() {
                                    trace(junta("tuNombre","tuApellido"));
                        }
                        public function junta(arg1:String,arg2:String):String {
                                    function nombre(arg3:String):String {
                                                return arg3;
                                    }
                                    public apellido(arg4:String):String {
                                                return arg4;
                                    }
                                    return nombre(arg1) +" "+apellido(arg2);
                        }
            }
}
  • Ahora intente llamar a la función apellido() desde la función constructora. El compilador deberá enviarle un mensaje de error.

http://www.pacoarce.com