Páginas

2009/09/29

Número a literal en javascript

Hace tiempo estuve trabajando en una empresa que ofrecía sus servicios de programación a notarías.
Es bien sabido que en los documentos notariales toda cifra o número viene acompañado de su literal.
El programa original lo hice en lenguaje Fox  y lo he reconvertido y reescrito en javascript para que pueda ser aprovechado en el mundo web.

Bien, para utilizarlo debemos incluir la librería aLiteral.js que está alojada en https://github.com/17cosas/aLiteral.js , y crear un objeto aLiteral pasándole como argumento el número que queramos convertir, de esta forma:


var numeroLiteral = new aLiteral("23");
alert(numeroLiteral); // veintitrés


Un ejemplo más completo como pasar a literales el rango 0-100, podemos hacer lo siguiente:

                    function empieza()
                    {
                        for (var i=0; i<101; i++){
                            document.write(new aLiteral(i));
                        }
                    }
                    window.onload = empieza;


Cuyo resultado será:

cero
uno
dos
tres
cuatro
cinco
seis
siete
ocho
nueve
diez
once
doce
trece
catorce
quince
dieciséis
diecisiete
dieciocho
diecinueve
veinte
veintiuno
veintidós
veintitrés
veinticuatro
veinticinco
veintiséis
veintisiete
veintiocho
veintinueve
treinta
treinta y uno
... etc (hasta 'cien')



Enlaces:

http://es.wikipedia.org/wiki/Nombres_de_los_n%C3%BAmeros_en_espa%C3%B1ol

2009/09/16

Primer libro sobre Flex 4 (Gumbo)

Peter Armstrong se ha puesto manos a la obra para escribir el primer libro sobre Flex 4 (a.k.a Gumbo):  Hello! Flex 4.

De momento solamente podemos ver el primer capítulo que se ofrece gratuitamente: http://www.manning.com/armstrong3/armstronghello_meapch1.pdf


Su editorial es Manning y constará de 225 páginas.

Referencias:
http://www.manning.com/armstrong3/
http://www.manning.com/armstrong/
http://www.peterarmstrong.com/

Hola Mundo en Flex 4 (Gumbo)


<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- holamundo.mxml -->
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mx="library://ns.adobe.com/flex/halo"
xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Script>
<![CDATA[
private function muestraHola():void {
miTextArea.text="Hola Mundo!";
}
]]>
</fx:Script>

<s:Panel title="miPanel">
<s:layout>
<s:VerticalLayout/>
</s:layout>

<s:TextArea id="miTextArea"/>

<s:Button label="Pulsa aquí" click="muestraHola();"/>
</s:Panel>
</s:Application>


Resultado:




Tendremos que seguir los mismos pasos que los descritos en: http://17cosas.blogspot.com/2009/09/hola-mundo-en-flex.html

exceptuando que el compilador Flex en este caso es de la version 4, alojado en http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4


Cabe resaltar los nuevos namespaces referentes a Halo y Spark:

* xmlns:fx="http://ns.adobe.com/mxml/2009" (MXML)

    Este namespace incluye los elementos de alto nivel del lenguaje ActionScript como son Object, Number, Boolean, Array, etc. Para ver la lista completa de estos elementos, ver la referencia del lenguaje de Adobe en el apartado 'Top Level' (http://livedocs.adobe.com/flex/gumbo/langref/)
   
    Este namespace también incluye las etiquetas que trata el compilador como , y . Para más información consultar la referencia del lenguaje de Adobe en el apartado MXML Only Tags.
   
    Este namespace no incluye los componentes Halo o Spark.
   
    También podemos ver la lista completa de elementos que contiene este namespace declarados en el fichero incluído en el SDK en frameworks\mxml-2009-manifest.xml

* xmlns:mx="library://ns.adobe.com/flex/halo" (HALO)

    Este namespace incluye todos los componentes de los paquetes mx.*, componentes gráficos (Flex charting components), y componentes de visualización de datos.
   
    Para obtener una lista completa de estos componentes podemos obtenerla en el manifiesto ubicado en el mismo directorio del SDK, framework\halo-manifest.xml
   
* xmlns:s="library://ns.adobe.com/flex/spark" (SPARK)

    Este namespace incluye todos los componentes de los paquetes spark.* y las clases de texto incluídas en los paquetes flashx.*
   
    También incluye los componentes RPC, y las clases RPC necesarias para tratar con los componentes WebService, HTTPService y RemoteObject. Estas clases están incluídas en el namespace mx:, pero por conveniencia también se pueden usar con el namespace s:
   
    La lista completa de estos elementos podemos encontralos en el manifiesto frameworks\spark-manifest.xml
   

Para saber más acerca de este nuevo framework remito a la información ofrecida por Adobe (http://livedocs.adobe.com/flex/gumbo/), aunque hay que recordar que está en beta y su contenido puede ser modificado.



Referencias:
http://www.ria212.com/node/9
http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4
http://livedocs.adobe.com/flex/gumbo/

2009/09/13

Reloj con el tag html <canvas>

He estado probando esta nueva etiqueta html solamente implementada por el momento en los navegadores Firefox, Safari y Opera.

He creado un reloj analógico con 'milisegundero' opcional. Para usarlo incluir lo siguiente:

1) Añadir la librería javascript relojcanvas.js, situada en mi página personal GitHub https://github.com/17cosas/RelojCanvas

2) Añadir el tag html <canvas>, por ejemplo:

<canvas height="200" id="micanvas" width="200" > 

Tu navegador no soporta el tag html <canvas>
</canvas>


3) Crear un objeto con las diferentes opciones que permite la clase, por ejemplo:


var reloj=new RelojCanvas({
            id: 'micanvas',
            radio: 90,
            conSombra: true,
            conMilisegs: true
            });
       
        reloj.start();





El resultado es el siguiente:
 


Referencias:
http://canvaspaint.org/ (un buen ejemplo de lo que se puede conseguir con este tag)
http://www.xs4all.nl/~peterned/3d/ (y otro magnífico ejemplo de canvas en 3d)




2009/09/11

Etiqueta html <video> en Firefox 3.5

Firefox 3.5 trae dos nuevas etiquetas html para tratar fácilmente archivos multimedia: <audio> y <video>

Por el momento solamente se pueden utilizar archivos Wav y Ogg Vorbis para el audio, y Ogg Theora para el vídeo.

He aquí un ejemplo:


<video id="mivideo" src="http://upload.wikimedia.org/wikipedia/commons/e/ec/Breitenlee-Windpark-320x240.ogg" controls="true"/>




Referencias:

https://developer.mozilla.org/En/Using_audio_and_video_in_Firefox

http://www.theora.org/
http://www.vorbis.com/
http://www.xiph.org/

2009/09/10

Hola Mundo en Flex

Este artículo es escueto pero da una idea del lenguaje MXML de Flex:

Necesitaremos lo siguiente:

1) Un editor de textos tipo Notepad, Notepad++ o vi
2) El SDK de Flex, que se ofrece gratuitamente en
http://www.adobe.com/products/flex/flexdownloads/
o
http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+3



Creamos el fichero holamundo.mxml con un editor de textos añadiendo este código:


<mx:application mx="http://www.adobe.com/2006/mxml">
<mx:panel title="Applicación Hola Mundo!" paddingtop="10"
paddingbottom="20" paddingleft="10" paddingright="10">

<mx:label text="Hola Mundo!" fontweight="bold" fontsize="24">
</mx:label>
</mx:panel>
</mx:application>


Después lo compilaremos desde consola con la herramienta mxmlc.exe alojado en el directorio \bin del SDK de Flex, por ejemplo, en mi caso:

mxmlc g:\mi.flex\pruebas\holaMundo.mxml





Si no ha habido ningún fallo en la compilación nos aparecerá este mensaje:

Loading configuration file c:\flex_sdk_3.4\frameworks\flex-config.xml
G:\mi.flex\pruebas\holaMundo.swf (182272 bytes)

Con esto se habrá creado el archivo holaMundo.swf, y el resultado es el siguiente (visto con Firefox):

Sobre los valores nulos (null values) en las bases de datos

¿Qué es un valor null? NULL NO es un valor cero, NO es un FALSE y NO es un cadena vacía. ¿Qué es entonces?

NULL hace referencia a un valor desconocido, y es desconocido porque todavía no lo hemos podido encuadrar y clasificar en nuestra lógica de negocio o en nuestro domain language y que no hemos podido trasladar a nuestra base de datos.

NULL es un valor al que no le hemos encontrado cabida en la forma de interpretar las relaciones y fuentes de información de la empresa. Es un valor no definido y no contemplado por el momento, pero que, con una reflexión adecuada, puede ser sustituido y tratado adecuadamente.

Un gran número de ejemplos he visto en bases de datos empresariales: establecer a NULL un segundo apellido de un cliente extranjero, cantidades en una tabla de stock de almacén, categorías de estados no definidos correctamente, etc.

Se suele hacer la mala práctica de tomar a NULL como comodín para todo aquello que sale de lo establecido y lo no contemplado, llenando la base de datos de estos valores. Y llenar una base de datos con valores nulos supone incrementar la incertidumbre, cosa que va contra sus principios, puesto que se crearon para ofrecer información estructurada y precisa.

Y el problema es que los valores NULL son muy difíciles de tratar, explotar y operar. Por ejemplo al realizar estadísticas, podemos enumerar cuarenta valores y solamente sumar en un balance veintidós de ellos, porque estos valores nulos no son tratados.

Otros problemas pueden venir por su operabilidad: ¿Qué resultados se obtienen de operar booleanos con nulos? ¿Cómo se comporta una función agregada de SQL Server al encontrarse con nulos? ¿El resultado reflejará realmente lo esperado?

Tampoco podemos olvidar que si estamos acostumbramos a trabajar con nulos debemos tratar esta característica en un 70% de nuestras consultas SQL como por ejemplo, añadiendo la función ISNULL() o convirtiendo los valores nulos a cero, cosa que puede complicar el tratamiento de datos.

Así pues y en conclusión decir que siempre y cuando no podamos evitarlo, no utilizaremos valores nulos en nuestra base de datos.

Ahora bien, ¿qué podemos hacer cuando tenemos una columna que refleja un segundo apellido y que incluye valores nulos? La ausencia de un segundo apellido puede indicar que el cliente es extranjero, así pues podemos optar por estas dos opciones por ejemplo, cambiar los campos nulos a cadenas vacías o, por la que me decanto, rediseñar la base de datos e incluir una tabla nueva dedicada a clientes extranjeros sin segundo apellido.

¿Qué hacemos con las cantidades del almacén donde hay valores nulos? Si una cantidad aparece nula en la tabla de almacén seguramente sea porque esa cantidad de producto no existe o no se ha recibido. No podemos establecer a cero porque realmente no se ha recibido, y sería una fuente de controversias pues podría dar la posibilidad de pensar que hubo movimientos de stockaje en el pasado. Así pues, la solución vendría por crear una tabla con productos aún no recibidos o no dados de alta en el almacén y rediseñar las tablas implicadas. Así eliminamos los valores nulos y ofrecemos una información más veraz.

Enlaces:

http://www.bennadel.com/blog/85-Why-NULL-Values-Should-Not-Be-Used-in-a-Database-Unless-Required.htm
http://databases.about.com/cs/sql/a/aa042803a.htm
http://www.databasedesign-resource.com/null-values-in-a-database.html
http://www.databasedev.co.uk/null_values_defined.html

Error al ejecutar el compilador de Flex por ausencia de la librería MSVCR71.dll

Al ejecutar en un Windows Vista Home, el compilador de Flex 3.4 (mxmlc.exe) desde consola, se me ha mostrado el siguiente error:


Error loading: C:\Programa Files\Java\jre6\bin\client\jvm.dll


Y acto seguido, en una ventana emergente:

Mxmlc.exe – No se puede encontrar el componente
Error al iniciar la aplicación porque no se encontró MSVCR71.dll. La reinstalación de la aplicación puede solucionar el problema.











Bien, la solución pasa por lo siguiente:

1) Bajar la librería MSVCR71.dll de la siguiente página:
http://www.dll-files.com/dllindex/dll-files.shtml?msvcr71

2) Alojar esta librería en c:\windows\system32, o en el mismo directorio donde se encuentra el compilador, en mi caso, en c:\flex_sdk_3.4\bin

MsiInv o cómo obtener información del software instalado en tu ordenador (en Windows)

Pues como dice el título, si quieres saber realmente qué software tienes instalado en tu computadora con el sistema operativo Windows, recom...