lunes, 19 de marzo de 2012
Matemáticas musicales
viernes, 31 de julio de 2009
Función POWER T-SQL
¿sensible o "agarrada" (como decimos en México a los que no les gusta la idea de soltar un centavito)?
Pues nada, resulta que en el desarrollo de una aplicación de monitoreo climático de Puebla, uno de los cálculos requería logaritmos y potencias. Parecía que todo resultaba bien, pero a la hora de corroborar resultados, el dichoso (ni tanto) cálculo tenía un desfasamiento importante, entonces buscando y rebuscando nos dimos cuenta que la culpa era de la función POWER.
Resulta que esta función que recibe como parámetros una base y un exponente, cuando la base es entera, no importa que el exponente sea fraccionario (con punto decimal o flotante, que es lo mismo), el resultado que devuelve es entero ¿solución? un "casteo" o conversión a "float" de la base o agregarle un punto y tantos ceros como decimales queremos que nos regrese.
POWER(10, @ExponenteDecimal) ---------> resultado entero
POWER(CAST(10 as float), @ExponenteDecimal) ---------------> resultado con punto flotante
POWER(10.0, @ExponenteDecimal) -------------> resultado con 1 decimal luego del punto.
¿preguntas? Leer más...
miércoles, 15 de abril de 2009
RegEx (Expresiones Regulares)
| Character | Description | Example |
|---|---|---|
| Cualquier caracter excepto [\^$.|?*+() | Excepto los mencionados, todos los caracteres se representan a sí mismos . { y } son caracteres literales, excepto si son parte de un elemento en una expresión regular (ej.: calficador {n}). | a coincide con a |
| \ (backslash)segido por un [\^$.|?*+(){} | Un backslash Quita el significado a un caracter especial tratándolo como caracter común. | \+ coincide con + |
| \Q...\E | Relacional los caracteres entre \Q y \E literalmente, quitando el significado de los caracteres especiales. | \Q+-*/\E coincide con +-*/ |
sábado, 17 de enero de 2009
y qué es UML? (Casos de Uso)
Relaciones de Casos de Uso
Inclusión (Include) o (use)
Es una forma de interacción, un caso de uso dado puede "incluir" otro. El primer caso de uso a menudo depende del resultado del caso de uso incluido. Esto es útil para extraer comportamientos verdaderamente comunes desde múltiples casos de uso a una descripción individual, desde el caso de uso que lo incluye hasta el caso de uso incluido, con la etiqueta "«include»". Este uso se asemeja a una expansión de una macro, donde el comportamiento del caso incluido es colocado dentro del comportamiento del caso de uso base. No hay parámetros o valores de retorno.Extensión (Extend)
Es otra forma de interacción, un caso de uso dado, (la extensión) puede extender a otro. Esta relación indica que el comportamiento del caso de uso extensión puede ser insertado en el caso de uso extendido bajo ciertas condiciones. La notación, es una flecha de punta abierta con línea discontinua, desde el caso de uso extensión al caso de uso extendido, con la etiqueta «extend». Esto puede ser útil para lidiar con casos especiales, o para acomodar nuevos requisitos durante el mantenimiento del sistema y su extensión. La extensión se utiliza en casos de uso, un caso de uso a otro caso siempre debe tener extensión o inclusión.
"La extensión, es el conjunto de objetos a los que se aplica un concepto. Los objetos de la extensión son los ejemplos o instancias de los conceptos."
Generalización
En la tercera forma de relaciones entre casos de uso, existe una relación generalización/especialización. Un caso de uso dado puede estar en una forma especializada de un caso de uso existente. La notación es una línea solida terminada en un triángulo dibujado desde el caso de uso especializado al caso de uso general. Esto se asemeja al concepto orientado a objetos de sub-clases, en la práctica puede ser útil factorizar comportamientos comunes, restricciones al caso de uso general, describirlos una vez, y enfrentarse a los detalles excepcionales en los casos de uso especializados.
"Entonces la Generalización es la actividad de identificar elementos en común entre conceptos y definir las relaciones de una superclase (concepto general) y subclase (concepto especializado). Es una manera de construir clasificaciones taxonómicas entre conceptos que entonces se representan en jerarquías de clases. Las subclases conceptuales son conformes con las superclases conceptuales en cuanto a la intensión y extensión."
Leer más...miércoles, 7 de enero de 2009
El futuro de mi preciadísimo Delphi
Digamos que estoy esperando a que la oruga se transforme en mariposa.
Aquí está el artículo original cortesía de Embarcadero.
En breve, insisten en que no se desecharán las estructuras y demás características de Delphi en los nuevos compiladores, harán una reestructuración para incluir otras nuevas mejoras. Leer más...
viernes, 2 de enero de 2009
Paradigmas de programación
La programación imperativa, en contraposición a la programación declarativa es un paradigma de programación que describe la programación en términos del estado del programa y sentencias que cambian dicho estado. Los programas imperativos son un conjunto de instrucciones que le indican al computador cómo realizar una tarea.
La implementación de hardware de la mayoría de computadores es imperativa; prácticamente todo el hardware de los computadores está diseñado para ejecutar código de máquina, que es nativo al computador, escrito en una forma imperativa. Esto se debe a que el hardware de los computadores implementa el paradigma de las Máquinas de Turing. Desde esta perspectiva de bajo nivel, el estilo del programa está definido por los contenidos de la memoria, y las sentencias son instrucciones en el lenguaje de máquina nativo del computador (por ejemplo el lenguaje ensamblador).
Los lenguajes imperativos de alto nivel usan variables y sentencias más complejas, pero aún siguen el mismo paradigma. Las recetas y las listas de revisión de procesos, a pesar de no ser programas de computadora, son también conceptos familiares similares en estilo a la programación imperativa; cada paso es una instrucción, y el mundo físico guarda el estado (Zoom).
Los primeros lenguajes imperativos fueron los lenguajes de máquina de los computadores originales. En estos lenguajes, las instrucciones fueron muy simples, lo cual hizo la implementación de hardware fácil, pero obstruyendo la creación de programas complejos. Fortran, cuyo desarrollo fue iniciado en 1954 por John Backus en IBM, fue el primer gran lenguaje de programación en superar los obstáculos presentados por el código de máquina en la creación de programas complejos.
Los programas escritos en un lenguaje funcional están constituidos únicamente por definiciones de funciones, entendiendo éstas no como subprogramas clásicos de un lenguaje imperativo, sino como funciones puramente matemáticas, en las que se verifican ciertas propiedades como la transparencia referencial (el significado de una expresión depende únicamente del significado de sus subexpresiones), y por tanto, la carencia total de efectos laterales.
Otras características propias de estos lenguajes son la no existencia de asignaciones de variables y la falta de construcciones estructuradas como la secuencia o la iteración (lo que obliga en la práctica a que todas las repeticiones de instrucciones se lleven a cabo por medio de funciones recursivas).
Existen dos grandes categorías de lenguajes funcionales: los funcionales puros y los híbridos. La diferencia entre ambos estriba en que los lenguajes funcionales híbridos son menos dogmáticos que los puros, al admitir conceptos tomados de los lenguajes imperativos, como las secuencias de instrucciones o la asignación de variables. En contraste, los lenguajes funcionales puros tienen una mayor potencia expresiva, conservando a la vez su transparencia referencial, algo que no se cumple siempre con un lenguaje funcional híbrido.
La programación lógica consiste en la aplicación del corpus de conocimiento sobre lógica para el diseño de lenguajes de programación; no debe confundirse con la disciplina de la lógica computacional.
La programación lógica comprende dos paradigmas de programación: la programación declarativa y la programación funcional. La programación declarativa gira en torno al concepto de predicado, o relación entre elementos. La programación funcional se basa en el concepto de función (que no es más que una evolución de los predicados), de corte más matemático. El lenguaje de programación lógica por excelencia es Prolog, que cuenta con diversas variantes. La más importante es la programación lógica con restricciones (véase artículo sobre programación con restricciones), que posibilita la resolución de ecuaciones lineales además de la demostración de hipótesis.
- La Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones para diseñar aplicaciones y programas de computadora. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de 1990. Actualmente son muchos los lenguajes de programación que soportan la orientación a objetos.
Los libros de "El tigre" y "El dragón"... ¿mitología china?
Suena a algo de kung-fu o algo que tiene que ver con la filosofía china, verdad?? pues resulta que esos libros son dos buenos libros sobre... COMPILADORES
Esos libros los llevé en mi curso de Compiladores mientras estudiaba la carrera. ¿por qué lo menciono? porque mis chavos, a los que doy clases, les estoy enseñando lo poco que sé de Linux y lo que recuerdo que me fue enseñado como tecnologías bajo ese sistema operativo, es a manera de "embarradita" de programación, solo para que sepan un poquito de lo que se puede hacer con un enfoque un poquito académico y de investigación más que de entretenimiento.
Aquí les pongo un enlace a lo que en ese curso utilizamos y a algunas herramientas extras. Chéquen este post con frecuencia.
http://dinosaur.compilertools.net/
http://fbielma.org/files/docs/compiladores.pdf
http://www.dynamics.unam.edu/users/mtrejo/cursos/compiladores/compilers.pdf Leer más...
Escritorios tridimensionales
En mi caso, lo que me gustó más que la armadura o los efectos, fue la mesa de trabajo de Tonny, ese "escritorio" que mostraba holográficamente lo que fuera y pasar cosas de una pantalla a esa mesa o a otra pantalla con el movimiento de un apuntador. Y lo que pasa es que a mí me gusta la graficación tridimensional (últimamente la dejé bastante abandonadilla).
Así que aquí les presento algunos "escritorios" tridimensionales, algunos son más bien gestores de escritorios múltiples con efecto 3D al cambiar entre escritorios
Escritorio 3D (debería decir "caja de huevo" en vez de escritorio, me da la sensación de estar mirando dentro de una caja de cartón)
AltDesk Portable (debido a que primero lo ví en el Vista, diré que AltDesk se parece al efecto que tiene dicho sistema operativo al cambiar entre ventanas)
Leer más...
y qué es UML?
Pues... comenzamos!!
- Casos de uso
- Diagramas
- Actores
- Simbología