La vida da vueltas inesperadas, hace poco me dolia tener que dejar mi trabajo , ahora, estoy libre...
Subitamente ahora estoy buscando trabajo, luego de haber rechazado ofertas que me hubiera gustado tomar, a causa del compromiso que sentia.
La vida me abrio los ojos, yo estaba equivocado, es bueno tener la oportunidad de estar en una empresa bien formada y tener puertas abiertas en otros lados.
Supongo que estaré Freelance por algún tiempo, pero lo más importante de todo es que estoy de vacaciones despues de 2 años... wow por fin.
Pese a que es el peor momento para estar sin trabajo, me parece lo mejor que me ha pasado, me estaba enfermando... y siento que no progresaba en lo más minimo.
Que bien es la Libertad
jueves, 22 de noviembre de 2007
domingo, 18 de noviembre de 2007
Password con ritmo!
Esta idea me vino a la mente tras cambiar mis password frente a una camara de vigilancia a mi espalda, (si se que me estan viendo).
La idea es simple, no solo se guardan los caracteres, tambien el ritmo con que son tecleados. Dificil? - no, uno puede taradear una canción:
p--a.s.s----w--o.r--d
Así que en realidad hay más qué solo letras...
La idea es simple, no solo se guardan los caracteres, tambien el ritmo con que son tecleados. Dificil? - no, uno puede taradear una canción:
p--a.s.s----w--o.r--d
Así que en realidad hay más qué solo letras...
viernes, 2 de noviembre de 2007
Ingenieria de Sonido, algo nuevo + algo viejo
Uno de los problemas del software de edición de audio es no poder controlar al mismo tiempo todas las entradas, aquí se presenta una posibilidad:
martes, 30 de octubre de 2007
Stefany
El Viernes 26/10/2007, conocí a Stafany una más que hermosa joven, la vi entrar al local, y resaltó entre todas la mujeres, en un instante desee conocerla y a los 15 mín estaba hablando con ella, ella me llamó con un gesto de mano.
Esto nunca pasa, al menos no a mi.
Estoy feliz, que así sea...
Esto nunca pasa, al menos no a mi.
Estoy feliz, que así sea...
domingo, 28 de octubre de 2007
Montañas
Hace poco una amiga subió una montaña y me estaba esperando en cierto punto de ella. Supuestamente tenia que seguir todo el tiempo derecho en el camino, pero encontré una bifurcación, el camino se dividió en tres.
¿Qué camino elegir?
Miré hacia arriba a ver si divisaba a mi amiga, pero nada, no aparecía en ningún lado, ¿cual es el camino?, decidí tantear cada uno, comenzando por el de la izquierda, este me llevo a un claro donde pude descansar un poco pero sabia que no debía continuar por ese camino, ¿cómo lo sabia? no fue del todo razonamiento sino intuición, me devolví y continué por el camino de la derecha y de pronto escuche voces, ella debía estar más arriba pero estaba en el camino correcto.
¿Qué camino elegir?
Definitivamente depende de donde queremos estar...
Mucho de lo que aprendí subiendo el Avila me ayudó a tomar decisiones, a identificar cosas que de otra manera serian invisibles a la vista.
Subir una montaña es parte de la vida y al mismo tiempo es una metáfora que habla sobre la vida, es una forma pura, natural y simple de entender algo a mayor escala.
Lo maravilloso es que todo el mundo sin importar la edad puede subir una montaña, y dependiendo de su sensibilidad.
¿Qué camino elegir?
Miré hacia arriba a ver si divisaba a mi amiga, pero nada, no aparecía en ningún lado, ¿cual es el camino?, decidí tantear cada uno, comenzando por el de la izquierda, este me llevo a un claro donde pude descansar un poco pero sabia que no debía continuar por ese camino, ¿cómo lo sabia? no fue del todo razonamiento sino intuición, me devolví y continué por el camino de la derecha y de pronto escuche voces, ella debía estar más arriba pero estaba en el camino correcto.
¿Qué camino elegir?
Definitivamente depende de donde queremos estar...
Mucho de lo que aprendí subiendo el Avila me ayudó a tomar decisiones, a identificar cosas que de otra manera serian invisibles a la vista.
Subir una montaña es parte de la vida y al mismo tiempo es una metáfora que habla sobre la vida, es una forma pura, natural y simple de entender algo a mayor escala.
Lo maravilloso es que todo el mundo sin importar la edad puede subir una montaña, y dependiendo de su sensibilidad.
Espiritualidad
Ultimamente he tenido que confrontar muchos de mis errores, pasado y entender que tales deben permanecer en el recuerdo pero no afectar mi vida actual.
"Karma se transforma en Dharma".
No se entiende a cabalidad hasta que se vive, aunque me siento coaccionado a vivirlo.
Como sea más allá de cualquier conceptaulización el universo parece guiarme, entiendase por universo como: Dios, Naturaleza, Destino, Magia, Totalidad, Inteligencia Biologia. No importa la palabra, en el mundo de las palabra-significado es dificil dar con un termino que lo defina universalmente. Lo sierto es que es más grande que la voluntad humana y sin embargo la voluntad humana es parte de eso.
Siento un conexión con eso y aún cuando esa "conexión" fuese mera ilusión, me siento bien con esto, además estoy aprendiendo a ver la realidad tal cual es, no estoy dejando que mi mente interfiera o me afecte las cosas que no estoy preparado psicologicamente para ver.
"Karma se transforma en Dharma".
No se entiende a cabalidad hasta que se vive, aunque me siento coaccionado a vivirlo.
Como sea más allá de cualquier conceptaulización el universo parece guiarme, entiendase por universo como: Dios, Naturaleza, Destino, Magia, Totalidad, Inteligencia Biologia. No importa la palabra, en el mundo de las palabra-significado es dificil dar con un termino que lo defina universalmente. Lo sierto es que es más grande que la voluntad humana y sin embargo la voluntad humana es parte de eso.
Siento un conexión con eso y aún cuando esa "conexión" fuese mera ilusión, me siento bien con esto, además estoy aprendiendo a ver la realidad tal cual es, no estoy dejando que mi mente interfiera o me afecte las cosas que no estoy preparado psicologicamente para ver.
jueves, 25 de octubre de 2007
¿Salvé a mi empresa?
Hace poco deseaba renunciar, aún lo deseo (para ser honesto), pero, me siento obligado a quedarme pienso que lo correcto es no abandonar a esta gente que alguna vez me tendió su mano.
Solo quedamos tres personas programando y cada uno sabe ahora que si se marcha uno, los otros dos fracasaran por el gran volumen de trabajo que hay. Hace poco sentí que el destino de la empresa pesaba sobre mis hombros; si no terminaba lo que estaba haciendo en ese momento la empresa enfrentaría una demanda quizá la ruina.
Estoy agotado física y mentalmente, enfermo y con nudos en la espalda del stress, pero finalmente se mostró el software y solamente tubo criticas sobre el formato de la UI.
Paralelamente un amigo está grave, pero tengo esperanza en que todo sea reversible, viajé a Merida a verlo, y no solo me encontré con él sino conmigo mismo, un espejo de mis propios errores. Pero verlo es algo que tenía que hacer, hay tantas cosas que debo afrontar más importantes que un trabajo.
Tantos eventos que suceden a diario, tantas decisiones, tantos caminos, pero finalmente no importa el camino que se toma siempre se llega a un destino.
"Hay una puerta sin puerta, la cual la atraviesan muchos caminos, quien transita algún camino, camina entre el cielo y la tierra" - Zen
¿Acaso si hubiera renunciado condeno a la empresa al fracaso? ¿Cómo saberlo? Como sea, no quiero tener algo así en mi mente, en cuanto sea apropiado para todos renunciaré, trataré de entrar en una empresa apropiada para mi.
Siento que he elegido mi propio castigo al quedarme en está empresa, es el camino más difícil (al menos por el momento), pero si algo es cierto en esta vida es que nadie tiene garantía de nada en ningún lugar o tiempo, pienso que debo aprovechar el tiempo aprendiendo todo lo que pueda y exigirme más a mi mismo en muchos sentidos.
Entre ayer y hoy pude descansar un poco, me tomé la libertad de faltar algunas horas al trabajo, claro me reclamaron, pero que importa, pese a que suelo pasar días sin dormir no soy una maquina debo descansar como todos.
A veces parece que nunca tenemos tiempo, pero como tenerlo si nunca nos lo damos. Tenemos que crear mecanismos que nos ayuden a trabajar menos.
Ahorita se puede decir que soy esclavo del dinero, no es codicia lo que siento, pero si dependo de él. De alguna manera siento que es una obligación, mi familia necesita una entrada más, el hambre no espera. ¿Cuantas cosas no hacemos en inconsciencia?.
Al menos sé algo, siento que estoy en lo correcto al quedarme un poco más y no abandonar a mis amigo. Ya vendrán tiempos mejores para mi.
Solo quedamos tres personas programando y cada uno sabe ahora que si se marcha uno, los otros dos fracasaran por el gran volumen de trabajo que hay. Hace poco sentí que el destino de la empresa pesaba sobre mis hombros; si no terminaba lo que estaba haciendo en ese momento la empresa enfrentaría una demanda quizá la ruina.
Estoy agotado física y mentalmente, enfermo y con nudos en la espalda del stress, pero finalmente se mostró el software y solamente tubo criticas sobre el formato de la UI.
Paralelamente un amigo está grave, pero tengo esperanza en que todo sea reversible, viajé a Merida a verlo, y no solo me encontré con él sino conmigo mismo, un espejo de mis propios errores. Pero verlo es algo que tenía que hacer, hay tantas cosas que debo afrontar más importantes que un trabajo.
Tantos eventos que suceden a diario, tantas decisiones, tantos caminos, pero finalmente no importa el camino que se toma siempre se llega a un destino.
"Hay una puerta sin puerta, la cual la atraviesan muchos caminos, quien transita algún camino, camina entre el cielo y la tierra" - Zen
¿Acaso si hubiera renunciado condeno a la empresa al fracaso? ¿Cómo saberlo? Como sea, no quiero tener algo así en mi mente, en cuanto sea apropiado para todos renunciaré, trataré de entrar en una empresa apropiada para mi.
Siento que he elegido mi propio castigo al quedarme en está empresa, es el camino más difícil (al menos por el momento), pero si algo es cierto en esta vida es que nadie tiene garantía de nada en ningún lugar o tiempo, pienso que debo aprovechar el tiempo aprendiendo todo lo que pueda y exigirme más a mi mismo en muchos sentidos.
Entre ayer y hoy pude descansar un poco, me tomé la libertad de faltar algunas horas al trabajo, claro me reclamaron, pero que importa, pese a que suelo pasar días sin dormir no soy una maquina debo descansar como todos.
A veces parece que nunca tenemos tiempo, pero como tenerlo si nunca nos lo damos. Tenemos que crear mecanismos que nos ayuden a trabajar menos.
Ahorita se puede decir que soy esclavo del dinero, no es codicia lo que siento, pero si dependo de él. De alguna manera siento que es una obligación, mi familia necesita una entrada más, el hambre no espera. ¿Cuantas cosas no hacemos en inconsciencia?.
Al menos sé algo, siento que estoy en lo correcto al quedarme un poco más y no abandonar a mis amigo. Ya vendrán tiempos mejores para mi.
martes, 23 de octubre de 2007
Herramientas Visuales PHP
Desde hace unos 5 años vengo usando herramientas visuales para trabajar rápidamente en PHP, actualmente estoy viendo una un poco diferente a las que he usado antes:
http://www.visualwade.com
O esta otra que está sonando entre los amantes de LAMP:
http://www.activegrid.com/
Aparentemente todo se genera a partir de un diagrama de clases, a partir de allí todo el trabajo parece ser drag & drop.
http://www.visualwade.com
O esta otra que está sonando entre los amantes de LAMP:
http://www.activegrid.com/
Aparentemente todo se genera a partir de un diagrama de clases, a partir de allí todo el trabajo parece ser drag & drop.
viernes, 19 de octubre de 2007
jueves, 11 de octubre de 2007
Sumas de expresiones simbolica
No sé si este título es el correcto, pero quiero escribir este truco:
Digamos que se desea sumar: (I) 3a+2y
con: (II) 2a+5y+3z
Tome en cuenta que puede expresarlas con tuplas así: (3,2,0) + (2,5,3) = (5,7,3) = 5a+7y+3z
¿Trivial? Imagine tener que sumar ecuaciones en una calculadora que tiene listas o tuplas y no tiene la posibilidad de calculos simbolicos o en un lenguaje de programación, está es una opción fácil.
Digamos que se desea sumar: (I) 3a+2y
con: (II) 2a+5y+3z
Tome en cuenta que puede expresarlas con tuplas así: (3,2,0) + (2,5,3) = (5,7,3) = 5a+7y+3z
¿Trivial? Imagine tener que sumar ecuaciones en una calculadora que tiene listas o tuplas y no tiene la posibilidad de calculos simbolicos o en un lenguaje de programación, está es una opción fácil.
jueves, 4 de octubre de 2007
Hace poco actualicé mi C.V.
En el año 2003, decidí hacer mi resumen curricular con un formato de alta calidad gráfica
y la información extremadamente sintetizada y ordenada cronológicamente como todo típico currículo.
En el 2004,2005,solo actualicé ese mismo añadiéndole uno que otra cosa.
Al leerlo, me hice la pregunta ¿Que puede decir de mi alguien que lea esto? - Pués el formato estaba tan bien hecho que solo podría decir que busco la perfección, o quizá tengo un carácter obsesivo,o probablemente soy bueno para el diseño gráfico, pero no brinda ninguna información importante, no dice realmente nada sobre mí; dice lo que cualquiera que allá estudiado ingeniería informática diría.
Definitivamente no soy nadie, uno más entre muchos otros iguales.
Este año decidí hacer algo distinto, y prescindir de la estética de un formato, escribí cuanto pude de lo poco que he hecho con los conocimientos que tengo, con la intención de ser transparente, de ser yo, de decir algo de verdad.
En mi trabajo actual dicen que soy un caso, todo un personaje, por que necesito hacer que las cosas fluyan naturalmente, disfrutar lo que hago.
El trabajo no es la vida, el propósito de trabajar es vivir, no vivir en el trabajo; y eso que he pasado 2 años solamente trabajando abstraído dentro de los confines de este desarrollo, pero todo es una enseñanza, esté quizá sea el trabajo más estresante que he tenido todo parece detenido en el tiempo y hay que hacer cientos de cosas para ayer, todas con prioridad uno(1). Así que estoy preparado para un trabajo más tranquilo como desarmar artefactos explosivos.
Si hay una autentica prioridad/responsabilidad en la vida, es uno mismo, su salud, su paz. Y de esto derivan otras responsabilidades ligadas como los hijos, esposa, ...
¿Por que no expresarlo de alguna manera?- Si lo sé, no vende.
Xss, yo soy una excentricidad, soy de esos que no encajan en la estadística y debo ser eliminado, pero tengo ideas continuamente no paran, siempre estoy pensando en como hacer algo en menos tiempo y con menos trabajo. En ingeniería del software la flojera si paga. Lol
Sigo pensando en lo que es un CV y en el titulo, hay tantas cosas tan falsas en este mundo, como puede un papel decir quien soy ¿...?
Estoy animado con mi próximo CV, lo haré cuadrado como suelen los japoneses escribir sus libros, siendo tan descriptivo que no van a necesitar entrevistarme, con sumo cuidado en los detalles, que sea placentero verlo, que diste de ser ordinario.
y la información extremadamente sintetizada y ordenada cronológicamente como todo típico currículo.
En el 2004,2005,solo actualicé ese mismo añadiéndole uno que otra cosa.
Al leerlo, me hice la pregunta ¿Que puede decir de mi alguien que lea esto? - Pués el formato estaba tan bien hecho que solo podría decir que busco la perfección, o quizá tengo un carácter obsesivo,o probablemente soy bueno para el diseño gráfico, pero no brinda ninguna información importante, no dice realmente nada sobre mí; dice lo que cualquiera que allá estudiado ingeniería informática diría.
Definitivamente no soy nadie, uno más entre muchos otros iguales.
Este año decidí hacer algo distinto, y prescindir de la estética de un formato, escribí cuanto pude de lo poco que he hecho con los conocimientos que tengo, con la intención de ser transparente, de ser yo, de decir algo de verdad.
En mi trabajo actual dicen que soy un caso, todo un personaje, por que necesito hacer que las cosas fluyan naturalmente, disfrutar lo que hago.
El trabajo no es la vida, el propósito de trabajar es vivir, no vivir en el trabajo; y eso que he pasado 2 años solamente trabajando abstraído dentro de los confines de este desarrollo, pero todo es una enseñanza, esté quizá sea el trabajo más estresante que he tenido todo parece detenido en el tiempo y hay que hacer cientos de cosas para ayer, todas con prioridad uno(1). Así que estoy preparado para un trabajo más tranquilo como desarmar artefactos explosivos.
Si hay una autentica prioridad/responsabilidad en la vida, es uno mismo, su salud, su paz. Y de esto derivan otras responsabilidades ligadas como los hijos, esposa, ...
¿Por que no expresarlo de alguna manera?- Si lo sé, no vende.
Xss, yo soy una excentricidad, soy de esos que no encajan en la estadística y debo ser eliminado, pero tengo ideas continuamente no paran, siempre estoy pensando en como hacer algo en menos tiempo y con menos trabajo. En ingeniería del software la flojera si paga. Lol
Sigo pensando en lo que es un CV y en el titulo, hay tantas cosas tan falsas en este mundo, como puede un papel decir quien soy ¿...?
Estoy animado con mi próximo CV, lo haré cuadrado como suelen los japoneses escribir sus libros, siendo tan descriptivo que no van a necesitar entrevistarme, con sumo cuidado en los detalles, que sea placentero verlo, que diste de ser ordinario.
miércoles, 3 de octubre de 2007
Colores para programar
Cuando era niño usaba la computadora a diario, en aquel entonces lo que veía en el monitor era un fondo negro y letras grises. Nunca había tenido problemas con la vista, desde los 11 años hasta los 22 tenia mi vista perfecta.
Luego de eso, al tener contacto cada vez con más frecuencia con sistemas operativos de ventanas cuyos textos tienen fondo blanco para semejarse al uso del papel mi visión a sufrido lo que tras una década de la consola negra no sufrió.
Basta con entender que el fondo blanco no es muy diferente a ver continuamente un bombillo, el nivel de radiación debe ser 99% mayor que el fondo negro con letras grises.
Voy a experimentar con este Blog aprovechando la facilidades que tiene para cambiar sus colores, según tengo entendido lo importante es el alto contraste para que las letras sean legibles.
Se dice que los colores más apropiados para el fondo son: azul oscuro, gris 50% o verde.
Yo lo estoy usando negro, me parece la solución lógica es como si apagaras el monitor.
Luego de eso, al tener contacto cada vez con más frecuencia con sistemas operativos de ventanas cuyos textos tienen fondo blanco para semejarse al uso del papel mi visión a sufrido lo que tras una década de la consola negra no sufrió.
Basta con entender que el fondo blanco no es muy diferente a ver continuamente un bombillo, el nivel de radiación debe ser 99% mayor que el fondo negro con letras grises.
Voy a experimentar con este Blog aprovechando la facilidades que tiene para cambiar sus colores, según tengo entendido lo importante es el alto contraste para que las letras sean legibles.
Se dice que los colores más apropiados para el fondo son: azul oscuro, gris 50% o verde.
Yo lo estoy usando negro, me parece la solución lógica es como si apagaras el monitor.
Todo es producto de la necesidad
Todo debe ser producto de la necesidad y no más.
A veces le damos tantas vueltas a lo que hacemos tratando de mejorarlo que terminamos por saturarlo.
A veces le damos tantas vueltas a lo que hacemos tratando de mejorarlo que terminamos por saturarlo.
lunes, 1 de octubre de 2007
Menos es Más
En la filosofía Zen, existen poemas de 17 silabas en total, generalmente dispuestos en tres lineas de 5,7 y 5 silabas, el propósitos del poema es capturar la esencia de un momento y transmitirlo a otras personas...
En informática la mesura conduce a mejores practicas, a reducir la curva de aprendizaje (al ser simple es más claro) , a pasar menos horas desarrollando...
En informática la mesura conduce a mejores practicas, a reducir la curva de aprendizaje (al ser simple es más claro) , a pasar menos horas desarrollando...
domingo, 23 de septiembre de 2007
Una idea da otra idea
Hace algún tiempo comencé a aprender sobre ingeniería de sonido, nunca he tenido destreza suficiente para interpretar mis propias composiciones musicales pero eso no me desanimó, muchos artistas plásticos usan las computadoras como medio de expresión.
¿ porque no delegar la interpretación de un pieza que solo existe en mi mente a una computadora y hacerla real?.
Es interesante, mientras más trabajas una pieza más desea llegar a la perfección, es algo sumamente laborioso pero sigues haciéndolo solo por la satisfacción de escuchar una pieza interpretada perfectamente.
Primero llevo todo a partitura en un software hecho para esto, permitiéndome hacer pruebas y nuevas combinaciones, cambiar un instrumento por otro hasta conseguir el ideal entre más de 200 instrumentos.
Luego exporto cada una de las pistas separando las por instrumento a formato MIDI, uno por uno los tracks pasan por un Sampler que los transforman en versiones más realistas usando instrumentos reales pre grabados. Generalmente puedo hacer variaciones con los samplers y las comparo entré sí, la mejor de ellas las transformo en formato WAV al doble de la calidad de CD.
Ahora de la música paso a la ingeniería de sonido.
Coloco cada uno de los archivos WAV sobre un sofware multitrack, y los escucho finalmente todos juntos, Wow! que diferencia con el MIDI, parece casi real, pero falta un montón de detalles importantes aún: Tengo instrumentos puros, pero no se puede desprender el sonido de un ambiente donde evolucionan.
El sonido se dispersa en forma de esfera en el aire chocando contra todo lo que encuentra, en cada colisión se absorbe parte de la energía y otra parte es reflejada causando un echo tenue copia del sonido original retrasado unos mili segundos a veces con armónicos de más o de menos, en fin, el ambiente produce un sonido nuevo en respuesta al sonido original.
Esto me lleva a usar algo totalmente distinto: La transformada rápida de Fourier.
Es impresionante, Fourier estaba tratando de medir la dispersión de la temperatura en el tiempo sobre una barra de cobre, ¿Para que? ¿Que estaría pensando? Algún otro invento necesitaba de este paso previo, de un problema de termodinámica pasó a la Serie de Fourier que es de gran importancia para el análisis de señales, funciones periódicas que se pueden descomponer en términos más simples como senos y cosenos.
Ahora bien, ¿Que tiene que ver con el sonido? -Todo, es imposible simular con exactitud un ambiente dentro de una computadora con tan solo algunos pocos parámetros, y necesito transformar el sonido artificial en real.
Un músico se llevaría su instrumento a una catedral e interpretaría virtuosamente su obra mientras se graba el sonido irrepetible de ese momento, de ese lugar, de su emisión, de su virtuosismos. Pero yo solo tengo un mundo virtual, alrededor de 1Gbyte de instrumentos pre grabados, la capacidad de un ordenador de interpretar más de 100 instrumentos distintos a la vez, y algo de conocimientos de física.
El último paso es simple, se emite un sonido puro dentro de la catedral, digamos un La (A440) este se dispersa por la catedral causando un nuevo sonido La' transformación del primero.
En términos simples: proceso(La)= La'
Y tengo la impresión qué proceso podría definirse como proceso(onda) = onda * La'/La
Donde * es la multiplicación de cada muestra.
En Matlab se puede usar un wav como un vector, luego les cuento si tenia razón o si encontré alguna otra manera de re-crear el ambiente.
Una idea conduce a otra y a otra ... no para.
Estaba usando un ETL llamado Kettle, tiene varios tipos de entradas y salidas, todos se ven como una tabla de base de datos, donde las entradas se convierten en salidas mediante una transformación o varias, todo se conecta, se transforma, pero siempre se usa el misma estructura de datos.
Esta idea me conduce a otra, si en el ETL se puede por que no en un patrón MVC. Seria una forma genérica, un modelo que se re-usaria siempre.
Me gusta trabajar con MVC, y por fin tengo una manera de generar un Model que se puede conectar a cualquier View,el Model podría ser originalmente una hoja de excell, un generador, un archivo de texto, un script o una base da datos, pero siempre accedería al Model con exactamente los mismo métodos. Una forma homogenia !!
De hecho ODBC lo hace, se puede leer un texto, o una hoja de excell como si fuera una base de datos con comando SQL.
Me explicaré mejor sobre MVC luego...
¿ porque no delegar la interpretación de un pieza que solo existe en mi mente a una computadora y hacerla real?.
Es interesante, mientras más trabajas una pieza más desea llegar a la perfección, es algo sumamente laborioso pero sigues haciéndolo solo por la satisfacción de escuchar una pieza interpretada perfectamente.
Primero llevo todo a partitura en un software hecho para esto, permitiéndome hacer pruebas y nuevas combinaciones, cambiar un instrumento por otro hasta conseguir el ideal entre más de 200 instrumentos.
Luego exporto cada una de las pistas separando las por instrumento a formato MIDI, uno por uno los tracks pasan por un Sampler que los transforman en versiones más realistas usando instrumentos reales pre grabados. Generalmente puedo hacer variaciones con los samplers y las comparo entré sí, la mejor de ellas las transformo en formato WAV al doble de la calidad de CD.
Ahora de la música paso a la ingeniería de sonido.
Coloco cada uno de los archivos WAV sobre un sofware multitrack, y los escucho finalmente todos juntos, Wow! que diferencia con el MIDI, parece casi real, pero falta un montón de detalles importantes aún: Tengo instrumentos puros, pero no se puede desprender el sonido de un ambiente donde evolucionan.
El sonido se dispersa en forma de esfera en el aire chocando contra todo lo que encuentra, en cada colisión se absorbe parte de la energía y otra parte es reflejada causando un echo tenue copia del sonido original retrasado unos mili segundos a veces con armónicos de más o de menos, en fin, el ambiente produce un sonido nuevo en respuesta al sonido original.
Esto me lleva a usar algo totalmente distinto: La transformada rápida de Fourier.
Es impresionante, Fourier estaba tratando de medir la dispersión de la temperatura en el tiempo sobre una barra de cobre, ¿Para que? ¿Que estaría pensando? Algún otro invento necesitaba de este paso previo, de un problema de termodinámica pasó a la Serie de Fourier que es de gran importancia para el análisis de señales, funciones periódicas que se pueden descomponer en términos más simples como senos y cosenos.
Ahora bien, ¿Que tiene que ver con el sonido? -Todo, es imposible simular con exactitud un ambiente dentro de una computadora con tan solo algunos pocos parámetros, y necesito transformar el sonido artificial en real.
Un músico se llevaría su instrumento a una catedral e interpretaría virtuosamente su obra mientras se graba el sonido irrepetible de ese momento, de ese lugar, de su emisión, de su virtuosismos. Pero yo solo tengo un mundo virtual, alrededor de 1Gbyte de instrumentos pre grabados, la capacidad de un ordenador de interpretar más de 100 instrumentos distintos a la vez, y algo de conocimientos de física.
El último paso es simple, se emite un sonido puro dentro de la catedral, digamos un La (A440) este se dispersa por la catedral causando un nuevo sonido La' transformación del primero.
En términos simples: proceso(La)= La'
Y tengo la impresión qué proceso podría definirse como proceso(onda) = onda * La'/La
Donde * es la multiplicación de cada muestra.
En Matlab se puede usar un wav como un vector, luego les cuento si tenia razón o si encontré alguna otra manera de re-crear el ambiente.
Una idea conduce a otra y a otra ... no para.
Estaba usando un ETL llamado Kettle, tiene varios tipos de entradas y salidas, todos se ven como una tabla de base de datos, donde las entradas se convierten en salidas mediante una transformación o varias, todo se conecta, se transforma, pero siempre se usa el misma estructura de datos.
Esta idea me conduce a otra, si en el ETL se puede por que no en un patrón MVC. Seria una forma genérica, un modelo que se re-usaria siempre.
Me gusta trabajar con MVC, y por fin tengo una manera de generar un Model que se puede conectar a cualquier View,el Model podría ser originalmente una hoja de excell, un generador, un archivo de texto, un script o una base da datos, pero siempre accedería al Model con exactamente los mismo métodos. Una forma homogenia !!
De hecho ODBC lo hace, se puede leer un texto, o una hoja de excell como si fuera una base de datos con comando SQL.
Me explicaré mejor sobre MVC luego...
lunes, 17 de septiembre de 2007
IE Developer Tool Bar
Es inevitable trabajar con ambos browsers IE y FF, son los más usados actualmente. En particular extraño los extras (add-on) de FireFox para desarrollo cuando uso IE.
Existe actualmente un hack para usar IE WebBrowserControl en FireFox pero son pocos los extras que funcionan con este hack, seguramente en el futuro se encontrará una solución que permita a los extras trabajar con ambos motores.
Como siempre desconfió del IE, busqué una herramienta semejante a FF WebDeveloper y FireBug para IE en MSDN y la encontré: IE Developer Tool Bar
Aún me agradan más las de FF, pero es una ayuda.
Existe actualmente un hack para usar IE WebBrowserControl en FireFox pero son pocos los extras que funcionan con este hack, seguramente en el futuro se encontrará una solución que permita a los extras trabajar con ambos motores.
Como siempre desconfió del IE, busqué una herramienta semejante a FF WebDeveloper y FireBug para IE en MSDN y la encontré: IE Developer Tool Bar
Aún me agradan más las de FF, pero es una ayuda.
domingo, 16 de septiembre de 2007
Luna
Deseo escribir un lenguaje, lo estoy bautizando Luna.
En primer lugar en que lenguaje debe estar las palabras reservadas: ¿Ingles, Español, Esperanto, InterLingua (Latin Moderno), Japones?
El Ingles parece ser el más apropiado, todo el mundo lee Ingles, Para escribirlo en Español, Esperanto, Portugues, Italenano o Frances prefiero que sea en InterLingüa, debido a que cualquiera que hable un lenguje indioeuropeo puede entender el InterLingüa.
¿Japones?, me gusta el japones, pero nadie aprenderia japones solo por poder programar.
¿Multilingüa?, si el orden preferente de un lenguaje es por ejemplo SOV como en el caso del japones, las aciones (aplicaciones, funciones, funtores, metodos,transformaciones, modificadores...) se escribirian, por decir algo, como:
En primer lugar en que lenguaje debe estar las palabras reservadas: ¿Ingles, Español, Esperanto, InterLingua (Latin Moderno), Japones?
El Ingles parece ser el más apropiado, todo el mundo lee Ingles, Para escribirlo en Español, Esperanto, Portugues, Italenano o Frances prefiero que sea en InterLingüa, debido a que cualquiera que hable un lenguje indioeuropeo puede entender el InterLingüa.
¿Japones?, me gusta el japones, pero nadie aprenderia japones solo por poder programar.
¿Multilingüa?, si el orden preferente de un lenguaje es por ejemplo SOV como en el caso del japones, las aciones (aplicaciones, funciones, funtores, metodos,transformaciones, modificadores...) se escribirian, por decir algo, como:
a,"hola".upper.assign
En lenguajes con orden SVO por el contrario:
assing( upper("hola"), a)
Se puede notar que las palabras quedan justo al contrario:a-hola-upper-assign assing-upper-hola-a
viernes, 14 de septiembre de 2007
Un ETL
Hace unos meses tenia la oportunidad de hacer una migración desde una hoja de Excell a PostgreSQL, pasé todo a un formato intermedio, es decir, una tabla en la base de datos con los mismos campos de la hoja de calculo.
En primer lugar, debían concordar los tipos de datos, hacer sustituciones en las cadenas de texto con patrones regulares.
Luego tenia que hacer las transformaciones necesarias para colocar los datos desde la tabla origen a las tablas correspondientes en la base de datos manteniendo todas las relaciones.
Tenia dos alternativas (Sin Herramientas):
1. Crear un programa que leyera cada renglón (row) de la tabla origen, y hacer todas las inserciones necesarias en las diferentes tablas de la base de dato.
2. Hacer consultas (queries) que me permitieran separar los datos de la tabla origen y permitirme insertar los registros en las tablas destino por separado.
La opción 2 me agradó, no me ataba a hacer modificaciones posteriores si necesitaba solo los datos para una sola de las tablas destino.
Recuerdo, que hice las consultas a partir de la definición de las tablas (DDL) cada campo pasaba a ser un alias y su tipo de dato un cast.
Algo más o menos así:
INSERT INTO Empleado
SELECT
oid ::int AS id
,nombre ::varchar(30) AS nombre
,apellido ::varchar(30) AS apellido
FROM
(
SELECT ... /*Tranformaciones necesarias*/
FROM tabla_origen
) AS transformaciones
El primer Select al tener el mismo orden y tipo que la tabla destino facilita la inserción en tablas semejantes que difieren en el orden de los campos o el tipo de datos, sin tener que manipular las transformaciones que se mantienen intactas y separadas dentro del select anidado. Por supuesto, solo es por razones practicas que lo hago, es posible hacerlo más corto así:
INSERT INTO Empleado (id,nombre,apellido)
SELECT
LPAD(oid,'0',4) ::int AS id
, TRIM(UPPER(primer_nombre)) ::varchar(30) AS nombre
, TRIM(UPPER(primer_apellido)) ::varchar(30) AS apellido
Los CASE WHEN THEN END ayudan mucho para tranformar los datos.
SUBSTRING() acepta patrones regulares, lol!
SIMILAR TO y LIKE, ayudan a interpretar campos de textos.
Luego de hacer esto para cada una de las tablas cortando y pegando desde el DDL al Query y alterandolo desde un editor con patrones regulares para hacerlo más fácil, procedí a hacer pruebas para saber cuanta data podía migrar.
Después de todo esto, no me quedaron ganas de hacerlo de nuevo, tras leer más sobre ETL, me agrado una herramienta hecha en Java y opensource llamada Pentaho kettle.
http://kettle.pentaho.org/screenshots/
Fue diseñada para migraciones aun más complicadas incluso se puede usar JavaScript para hacer transformaciones.
:D
Aprendí mucho sobre ETL al hacerlo todo a mano, de patrones regulares en SQL, de OIDs, y que a mano solo se pierde tiempo, aunque se gana conocimiento.
En primer lugar, debían concordar los tipos de datos, hacer sustituciones en las cadenas de texto con patrones regulares.
Luego tenia que hacer las transformaciones necesarias para colocar los datos desde la tabla origen a las tablas correspondientes en la base de datos manteniendo todas las relaciones.
Tenia dos alternativas (Sin Herramientas):
1. Crear un programa que leyera cada renglón (row) de la tabla origen, y hacer todas las inserciones necesarias en las diferentes tablas de la base de dato.
2. Hacer consultas (queries) que me permitieran separar los datos de la tabla origen y permitirme insertar los registros en las tablas destino por separado.
La opción 2 me agradó, no me ataba a hacer modificaciones posteriores si necesitaba solo los datos para una sola de las tablas destino.
Recuerdo, que hice las consultas a partir de la definición de las tablas (DDL) cada campo pasaba a ser un alias y su tipo de dato un cast.
Algo más o menos así:
INSERT INTO Empleado
SELECT
oid ::int AS id
,nombre ::varchar(30) AS nombre
,apellido ::varchar(30) AS apellido
FROM
(
SELECT ... /*Tranformaciones necesarias*/
FROM tabla_origen
) AS transformaciones
El primer Select al tener el mismo orden y tipo que la tabla destino facilita la inserción en tablas semejantes que difieren en el orden de los campos o el tipo de datos, sin tener que manipular las transformaciones que se mantienen intactas y separadas dentro del select anidado. Por supuesto, solo es por razones practicas que lo hago, es posible hacerlo más corto así:
INSERT INTO Empleado (id,nombre,apellido)
SELECT
LPAD(oid,'0',4) ::int AS id
, TRIM(UPPER(primer_nombre)) ::varchar(30) AS nombre
, TRIM(UPPER(primer_apellido)) ::varchar(30) AS apellido
Los CASE WHEN THEN END ayudan mucho para tranformar los datos.
SUBSTRING() acepta patrones regulares, lol!
SIMILAR TO y LIKE, ayudan a interpretar campos de textos.
Luego de hacer esto para cada una de las tablas cortando y pegando desde el DDL al Query y alterandolo desde un editor con patrones regulares para hacerlo más fácil, procedí a hacer pruebas para saber cuanta data podía migrar.
Después de todo esto, no me quedaron ganas de hacerlo de nuevo, tras leer más sobre ETL, me agrado una herramienta hecha en Java y opensource llamada Pentaho kettle.
http://kettle.pentaho.org/screenshots/
Fue diseñada para migraciones aun más complicadas incluso se puede usar JavaScript para hacer transformaciones.
:D
Aprendí mucho sobre ETL al hacerlo todo a mano, de patrones regulares en SQL, de OIDs, y que a mano solo se pierde tiempo, aunque se gana conocimiento.
viernes, 7 de septiembre de 2007
La programación es un dialogo con uno mismo.
Encontré un Post bastante interesante, a mi me agradaba en mi época de Freelance ocupar el mayor número de horas con bloques de descanso escribiendo el programa y luego tomarme unos días de descanso, generalmente tenia 1 mes de holgura y en otros hasta 3 meses.
Era más efectivo , eficiente y me era más divertido, sentía que disfrutaba mi trabajo y que era el mejor trabajo del mundo.
Ahora al trabajar fijo, esto entre 6 y 10 horas a diario programando, eso me ha dado resistencia, pero ciertamente siempre estoy cansado. Aprovecho cada día tratando de aprender más sobre ingeniería del Software.
Cuando llego a casa también me quedo un rato programando en la madrugada, no siempre el cansancio me lo permite pero siempre tengo nuevas ideas sobre cosas que aprendo
http://paulgraham.com/head.html
Era más efectivo , eficiente y me era más divertido, sentía que disfrutaba mi trabajo y que era el mejor trabajo del mundo.
Ahora al trabajar fijo, esto entre 6 y 10 horas a diario programando, eso me ha dado resistencia, pero ciertamente siempre estoy cansado. Aprovecho cada día tratando de aprender más sobre ingeniería del Software.
Cuando llego a casa también me quedo un rato programando en la madrugada, no siempre el cansancio me lo permite pero siempre tengo nuevas ideas sobre cosas que aprendo
http://paulgraham.com/head.html
miércoles, 5 de septiembre de 2007
Patrón F, como los usuarios leen las paginas web
El Patrón F es un patrón general humano. Las personas escudriñan (scan) las páginas web por lo general en Forma de F, leen las primeras lineas bajan descartando información.
El estudio está en http://www.useit.com/alertbox/reading_pattern.html
Siempre habrán excepciones y seguramente dependerá de como las páginas web estilen mostrar el contenido.
El estudio está en http://www.useit.com/alertbox/reading_pattern.html
Siempre habrán excepciones y seguramente dependerá de como las páginas web estilen mostrar el contenido.
lunes, 20 de agosto de 2007
FireFox es ideal para Developers
FireFox tiene de todo, no solo el famoso FireBugs sino diccionarios en español para corregir la ortografia, editores de texto y html, todo para hacer el trabajo del desarrollo web más comodo.
viernes, 17 de agosto de 2007
JS FrameWork
Web2.0 complica más los desarrollo, ya los Browser evolucionaran a su debido tiempo en clientes equipados con una mejor técnologia.
Estaba probando Rico basado en Prototype, al ver su CalendarControl me puse a hacer una version minimalista de una Calendar desde cero, tengo la intención de mandársela, su versión es muy larga y no fué hecha para ser adaptable a otros usos.
Para asegurarme que fuera lo más simple y minimalista posible me enfoque en la data que debia manejar lo cual se resume a: el número de días de cada mes tomando en cuenta si el año es bissiesto y el día de la semana en que comienza el mes.
A medida que uso Rico le encuentro cada vez más bugs, están tratando de sacar la versión 2.0 pero el componente principal LiveGrid está fallando demasiado y aun no se compara a componentes como DHtmlXGrid. Sin embargo sé que será un buen FrameWork con el tiempo.
Luego de leer muchas lineas de código del DHtmlXGrid y darme cuenta que se puede hacer algo más simple partiendo de CSS con el overflow:scroll y un simple buffer, debo decir que vale la pena estudiar estos frameworks pero no usarlos, es mejor usar lo que se necesite y empezar en limpio tomando en cuenta las cosas que ya se ha madurado en estos.
Mientras más simple y legible será más fácil de usar y adaptar. Parece mentira pero mientras más evidente sea el código mientras más tienda a lo básico es más fácil de leer y entender, cuando uno es demasiado astuto usando las propiedades de un lenguaje el código cada vez pierde legibilidad y muchas veces flexibilidad limitándonos, es mejor escribir pequeños componentes genéricos fáciles de entender y usar, con estos crear otros componentes que se verán pequeños también.
Por ahora tengo un dilema, es ideal poder extender las funciones del DOM añadiendo nuevos metodos a las objetos Node, Element , HTMLElement porque hace que las nuevas clases que agregue sean más cortas al reusar los metodos del DOM.
Estoy haciendo una clase Template y necesito buscar nodos y sustituir el texto dentro de esos nodos, los metodos que necesito los estoy haciendo dentro de la misma clase, como en el caso de un Walk-Visitor para optener todos los nodos y procesarlos, pero al ser el Walk-Visitor una forma simple de reusar codigo podría estar dentro de la Element, Ha! pero por alguna razón IE no me permite añadir metodos usando Element.prototype como en otros Browsers.
Estaba probando Rico basado en Prototype, al ver su CalendarControl me puse a hacer una version minimalista de una Calendar desde cero, tengo la intención de mandársela, su versión es muy larga y no fué hecha para ser adaptable a otros usos.
Para asegurarme que fuera lo más simple y minimalista posible me enfoque en la data que debia manejar lo cual se resume a: el número de días de cada mes tomando en cuenta si el año es bissiesto y el día de la semana en que comienza el mes.
A medida que uso Rico le encuentro cada vez más bugs, están tratando de sacar la versión 2.0 pero el componente principal LiveGrid está fallando demasiado y aun no se compara a componentes como DHtmlXGrid. Sin embargo sé que será un buen FrameWork con el tiempo.
Luego de leer muchas lineas de código del DHtmlXGrid y darme cuenta que se puede hacer algo más simple partiendo de CSS con el overflow:scroll y un simple buffer, debo decir que vale la pena estudiar estos frameworks pero no usarlos, es mejor usar lo que se necesite y empezar en limpio tomando en cuenta las cosas que ya se ha madurado en estos.
Mientras más simple y legible será más fácil de usar y adaptar. Parece mentira pero mientras más evidente sea el código mientras más tienda a lo básico es más fácil de leer y entender, cuando uno es demasiado astuto usando las propiedades de un lenguaje el código cada vez pierde legibilidad y muchas veces flexibilidad limitándonos, es mejor escribir pequeños componentes genéricos fáciles de entender y usar, con estos crear otros componentes que se verán pequeños también.
Por ahora tengo un dilema, es ideal poder extender las funciones del DOM añadiendo nuevos metodos a las objetos Node, Element , HTMLElement porque hace que las nuevas clases que agregue sean más cortas al reusar los metodos del DOM.
Estoy haciendo una clase Template y necesito buscar nodos y sustituir el texto dentro de esos nodos, los metodos que necesito los estoy haciendo dentro de la misma clase, como en el caso de un Walk-Visitor para optener todos los nodos y procesarlos, pero al ser el Walk-Visitor una forma simple de reusar codigo podría estar dentro de la Element, Ha! pero por alguna razón IE no me permite añadir metodos usando Element.prototype como en otros Browsers.
viernes, 27 de julio de 2007
Bugs 1500-02-29
Encontré un Bug al intentar buscar años bissiestos (LeapYear), estoy escribiendo una clase Calendar en JS y uno de los metodos es isLeapYear(year) queria probar si el metodo estaba funcionando bien.
Calendar.isLeapYear: function(year){
return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
}
Abrí la consola de Ruby y probé con el año 1500. "1500-02-29" está fecha no debería existir, según el algoritmo bissiento.
Calendar.isLeapYear: function(year){
return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
}
Abrí la consola de Ruby y probé con el año 1500. "1500-02-29" está fecha no debería existir, según el algoritmo bissiento.
jueves, 19 de julio de 2007
Comunas?
Luego de leer a Osho, creo que no es mala la idea de comuna.
Uno disfruta más el noviasgo que el matrimonio.
Uno disfruta más el noviasgo que el matrimonio.
martes, 3 de julio de 2007
En búsqueda de un Lenguaje de programación
Lenguajes estudiados:
Scala: Reune varios paradigmas en una forma elegante
Interprete/Compilador
http://www.scala-lang.org/
Ruby: Un apróx a un OOP Puro, es notable la influencia de lenguajes como SmallTalk, Lisp y Python.
SmallTalk busca ser un lenguaje humanamente entendible, por igual, Ruby desea ser lo más natural posible según sostiene Matz su autor, intentando tener un aspecto simple con una gramatica más corta comparada con lenguajes como JavaScript y Python, pero, internamente más compleja.
Al visualizar la gramatica de Ruby en GraphViz, se puede ver un nodo llamado primary él solo, engloba la gramatica de las expresiones del lenguaje, es interezante comparar las gramaticas visualizandolas como grafos, es un poco como ver la mente del diseñador. Me gustaria estudiar más detalladamente la Gramatica de Scala, F# y Ruby
Por ahora la implementación C es un poco lenta, pero a medida Ruby se ha hecho popular hay más gente estudiando nuevas posibilidades, como la de una maquina virtual para Ruby, o bien, Ruby.Net, o bien implementar Ruby on Ruby, incluso encontré un proyecto llamado RType hecho en Haskell.
Python:
PyPy es un proyecto llamativo, es una implementacion de Python en Python. Pienso que gracias a Ruby proyectos como Python, Haskell, Groovy están llamando la atención de la gente que desea probar nuevas alternativas
http://www.ruby-lang.org/es/
Lua: Un lenguaje pequeño, usando justo lo necesario.
Es mucho más fácil de aprender que Python o Ruby
http://www.lua.org/
Scala: Reune varios paradigmas en una forma elegante
Interprete/Compilador
http://www.scala-lang.org/
Ruby: Un apróx a un OOP Puro, es notable la influencia de lenguajes como SmallTalk, Lisp y Python.
SmallTalk busca ser un lenguaje humanamente entendible, por igual, Ruby desea ser lo más natural posible según sostiene Matz su autor, intentando tener un aspecto simple con una gramatica más corta comparada con lenguajes como JavaScript y Python, pero, internamente más compleja.
Al visualizar la gramatica de Ruby en GraphViz, se puede ver un nodo llamado primary él solo, engloba la gramatica de las expresiones del lenguaje, es interezante comparar las gramaticas visualizandolas como grafos, es un poco como ver la mente del diseñador. Me gustaria estudiar más detalladamente la Gramatica de Scala, F# y Ruby
Por ahora la implementación C es un poco lenta, pero a medida Ruby se ha hecho popular hay más gente estudiando nuevas posibilidades, como la de una maquina virtual para Ruby, o bien, Ruby.Net, o bien implementar Ruby on Ruby, incluso encontré un proyecto llamado RType hecho en Haskell.
Python:
PyPy es un proyecto llamativo, es una implementacion de Python en Python. Pienso que gracias a Ruby proyectos como Python, Haskell, Groovy están llamando la atención de la gente que desea probar nuevas alternativas
http://www.ruby-lang.org/es/
Lua: Un lenguaje pequeño, usando justo lo necesario.
Es mucho más fácil de aprender que Python o Ruby
http://www.lua.org/
Suscribirse a:
Entradas (Atom)