jueves, 16 de septiembre de 2010

Las mujeres

El miércoles antes de clase pasé a la biblioteca dado que habría varios días de descanso por eso del bicentenario jaja y yo con muchas cosas que investigar. Mientras buscaba un libro sobre el manejo de las licencias y el open source me tope con un libro titulado: El primer sexo: Las capacidades innatas de las mujeres y cómo están cambiando el mundo por Helen Fisher. Me llamó tanto la atención que como todavía faltaba para mi clase me puse a leerlo.

Iniciaba diciendo:

“Dios creó a la mujer. Y el tedio cesó en verdad desde ese momento”. Friedrich Nietzsche no era precisamente feminista, pero al parecer apreciaba la mente femenina.

Leí el primer capítulo y éste se centra en cómo las mujeres pueden hacer varias actividades al mismo tiempo y los hombres no, además de cómo las mujeres ven todas las variables y las posibles situaciones ante un problema mientras los hombres se centran a solucionar y dar sólo una solución al problema. Todo esto dando argumentos sobre como los hombres y las mujeres eran diferentes de acuerdo a los estudios realizados en cerebros de ambos sexos.
Me resulta interesante como en la actualidad existen este tipo de lecturas, continuaré leyendo este libro y veré el como nos sitúan ante la sociedad. Aquí podrán ver el libro en línea. 
En lo personal, siempre he pensado que las mujeres somo capaces de muchas cosas y que nuestra manera de pensar va más allá del simple análisis que realiza el sexo opuesto. Hace poco una compañera, amiga y hermana realizó un "post" en un blog respecto a Ada Lovelace. Y se preguntarán ¿Quién es ella? Es la primera persona en la historia en escribir el primer programa per se en 1843. Decia textualmente: 



Este programa era un “método”  que calculaba los números de Bernoulli en la máquina diferencial de Babbage. La importancia de este programa radica en que este marcó la separación entre hardware y software, esta secuencia lógica es el primer programa en la historia de la humanidad.


Con esto podemos afirmar que el papel de la mujer en el área de desarrollo de software fue de suma importancia y que mejor que decir que el primer programa desarrollado fue por una GRAN mujer Ada Lovelace. Aunque somos pocas en esta área es un orgullo ser MUJER!!!! :P Continuaré leyendo el libro y más adelante les platicaré de él.

domingo, 5 de septiembre de 2010

Tipos de Software

Hace un año para una materia leí el libro de: Pressman, Roger S. titulado: Ingeniería del software : un enfoque práctico.


Es un libro muy teórico pero sirve mucho en cuanto a la aplicación de términos así como una vista general del ciclo de vida de un proyecto, las entregas que se deben de realizar así como los pasos "a seguir". Y digo a seguir entre "" porque la poca experiencia que he tenido desarrollando software no se apega mucho a dicha teoría.

Si nos definimos como desarrolladores de Software, debemos de tener muy claro los tipos de software que existen. Pressman (2005) los cataloga de la siguiente manera :

1. Software de Sistemas: Colección de programas escritos para servir a otros programas. Algunos programas de sistemas (compiladores, editores y utilerías para la administración de archivos) procesan estructuras de información complejas pero determinadas. Otras (SO, controladores, software de red, procesadores de telecomunicaciones) procesan datos indeterminados.
2. Software de Aplicación: Programas independientes que resuelven una necesidad de negocio específica. Procesan datos empresariales o técnicos de forma que facilitan las operaciones de negocios o la toma de decisiones técnicas o de gestión.
3. Software científico y de ingeniería: Se caracterizaba por algoritmos “devoradores de números”. Sin embargo, las aplicaciones modernas han empezado a tomar características de software en tiempo real e incluso de software de sistemas.
4. Software emportado(mala traducción en el libro debería de ser como incrustado): Reside dentro de la memoria de sólo lectura del sistema y con él se implementan y controlan características y funciones para el usuario final y el sistema mismo. Ejemplo: teclado de un microondas o funciones digitales del carro.
5. Software de línea de productos: Diseñado para proporcionar una capacidad específica y la utilización de muchos clientes diferentes. Se puede enfocar en un nicho de mercado limitado (control de inventarios) o dirigirse hacia los mercados masivos (aplicaciones de hojas de cálculo, de BD)
6. Aplicaciones basadas en Web: Son apenas un poco más que un conjunto de archivos de hipertexto ligados que presenta información mediante texto y algunas gráficas. Sin embargo, las WebApps evolucionan hacia ambientes computacionales sofisticados que integran BD corporativas y aplicaciones de negocio.
7. Software de Inteligencia Artificial: Utiliza algoritmos no numéricos en la resolución de problemas complejos que es imposible abordar por medio de un análisis directo (robótica, SE, reconocimiento de patrones, redes neuronales, comprobación de teoremas y juegos en computadora).

Así es que, ¿qué tipo de software desarrollas?. Todos son con diferentes objetivos, con diferentes tecnologías y diferentes complejidades al momento de programar pero hay que tener claro lo que estamos desarrollando y así saber a dónde queremos ir y que beneficios queremos.

lunes, 31 de mayo de 2010

Parámetros en Java

Últimamente en el trabajo he escuchado decir:
"Que pasa con Java, aqui estoy asignando el valor y en este método ya no esta el valor, haber no que muy muy Java me esta fallando" 
Y aunque no vi el código que señalaban, pensé que seguramente era por la manera en que implementaban el paso de los parámetros. Pero todos sabemos que Java sólo tiene UNA forma de pasar parámetros y esto es: Parámetros por valor.

Pero y ¿qué significa esto?..... veamos unos ejemplos.

public class ParametrosValor {

 public static void main(String [] args) {
  int numero=8;
  calculaNumero(numero);
  System.out.println(numero);
 }

 public static void calculaNumero(int num){
   num=10;
 }
}


Este ejemplo imprimirá "8". Y esto es porque la variable "num" es local y recibe una copia del valor de la variable numero que se envía como parámetro y el valor de la variable num nunca se modifica.

Ahora veremos el siguiente ejemplo:

public class ParametrosValor {

 public static void main(String [] args) {
  int[] arreglo = new int[1];
  arreglo[0] = 8;
  calculaNumero(arreglo);
  System.out.println(arreglo[0]);
 }

 public static void calculaNumero(int[] array) {
  array[0] = 10;
 }
}



Pero entonces lo que aquí imprime es un 10.  Lo que pasa en este ejemplo es que como estamos utilizando un arreglo y un arreglo es un objeto, las variables que apuntan a un objeto son sólo referencias a él. Entonces el método de calculaNumero  modifica el valor del objeto. Y es donde entran las confusiones porque Java no paso los parámetros por referencia. Al contrario, pasó el valor de la referencia.

Y si no me creen,  pruebenlo!! XD! Espero les sirva. Saludos

Coolaboración en otro Blog

Hace como 2 meses me invitaron a escribir en un blog de una Consultora Mexicana llamada SoulTech (Muchas felicidades por su 2do Aniversario!!!). Así es que decidí escribir de algo muy interesante como lo son las Redes neuronales. 

http://soultech.com.mx/blog/2010/04/08/redes-neuronales-por-silvia-diaz/

Espero les agrade la primera parte de esta serie de posts referente a las ANS y agradezco a SoulTech por darme esa oportunidad aunque no forme parte de su equipo. 

Muchas gracias!!!!!



Las computadoras actuales son máquinas de von Neumann; es decir,  máquinas de procesos donde se ejecutan en serie una secuencia de instrucciones, las cuales son almacenadas en memoria. Ese fue el objetivo de la invención de las computadoras, facilitarnos procesos donde implique cálculos o razonamiento lógico. Ya que aunque el ser humano los puede realizar, el tiempo invertido en ellos es mucho comparado a la velocidad que lo puede resolver una computadora. Esto hace que el resolver problemas complejos aritméticamente resulte hasta cierto punto sencillo de programar.¿Pero qué pasa al elaborar un sistema que tome decisiones a partir de experiencias previas y factores externos? ¿Cómo hacer para que el sistema aprenda?El realizar programas que impliquen cierta “inteligencia” y que vayan aprendiendo conforme recibe información y no sólo seguir ordenes secuenciales que se programaron antes de su ejecución, ha hecho que se lleven más de 50 años trabajando en la Inteligencia Artificial. Ya que en 1950, Shannon y Turing diseñaron los primeros programas que permiten que una computadora “razone”  y juegue ajedrez, ganándole hasta al campeón mundial de ajedrez.



Para poder resolver este tipo de problemas se han dado una serie de paradigmas de cómputo alternativos, como lo son las redes neuronales, algoritmos genéticos o la computación evolutiva, de las cuales las dos primeras quizás sean las más relevantes y utilizadas.
Hablar de redes neuronales artificiales (ANS- Artificial Neural Systems) implica conocer primero el funcionamiento de las redes neuronales biológicas, para así poder entender más fácilmente el paralelismo que existe entre ambas.



Una neurona es el componente básico del sistema nervioso, incluyendo al cerebro. Y son células que tienen tres partes importantes:
1.       Dendritas: Son el elemento receptor, son fibras que cargan de señales eléctricas al cuerpo de la célula.
2.       Soma: Realiza la suma de las señales eléctricas recibidas por las dendritas.
3.       Axón: Es una fibra larga que lleva la señal eléctrica del cuerpo de la célula hacia otras.
El punto de contacto entre el axón de una célula y la dendrita de otra se denomina sinapsis.






Una de las neuronas será  presináptica (la que envía las señales) y la otra postsinápticas (la que recibe las señales). En la figura 2 podemos observar la comunicación entre dos neuronas de manera química. La neurona presináptica libera unas sustancias químicas llamadas neurotransmisores y atraviesan el intervalo sináptico.Si la neurona receptora posee en las dendritas o en el soma canales sensibles a los neurotransmisores liberados, los fijarán, y como consecuencia permitirán el paso de determinados iones a través de la membrana. Así se crean pequeños excitadores (positivos) o inhibidores (negativos), por lo que la neurona se disparará a mayor frecuencia cuanto mayor sea el nivel de excitación. La intensidad de una sinapsis se mide a partir de los disparos y dependiendo de la escala es el aprendizaje que se tiene entre la red de neuronas.
Así en las neuronas artificiales se simulan las entradas asociadas a un peso (la fuerza de las cargas eléctricas de conexión que reciben las dendritas) y el elemento procesador (simulando el soma) multiplica cada entrada por su peso y suma los productos.   Para finalizar el proceso se pasa a la función de la transferencia para generar un resultado, éste se transmite por la vía de salida (sería como el axón). Y la sinapsis es el proceso de aprendizaje a partir de las salidas correctas. Esto lo veremos con más detalle en el siguiente tema, que será una introducción a los Sistemas Neuronales Artificiales (ANS) así como su clasificación y sus modelos.
















Pacman en Google

La semana pasada en el logo de Google apareció el juego de Pacman esto por su 30vo aniversario. Pero lo mejor es que no era una simple imagen, era el juego!!! El Universal declaró:

"El juego Google Pacman consumió un total de 4 millones 819 mil 352 horas hombre, lo que representó un total de 120 millones 483 mil 800 dólares en productividad".
Y es que millones de personas entran a Google para hacer alguna búsqueda desde su trabajo así muchos de nosotros nos distraimos y empezamos a jugar!!! Y saben que es lo mejor que se puede seguir jugando: http://www.google.com.mx/pacman/


De acuerdo con Rescue Time:
 "Los visitantes del buscador pasaron 48 segundos en total en el sitio, cifra muy superior al promedio de 11 segundos al día. Esto se multiplicó por los 503 millones 703 mil visitantes de ese día."
 Las cifras de la pérdida monetaria fueron calculadas a partir de que cada hora/hombre equivale a 25 dólares. Aunque no todas las horas son pagas igual.

Y además cabe destacar que si se da clic en "Insert Coin" pueden jugar dos personas al mismo tiempo: uno utiliza las flechas y la otra persona las teclas de W, A, S y D.

A divertirse!! pero no en el trabajo jajaja

domingo, 30 de mayo de 2010

Flex+Java+BlazeDS

Hace como tres meses inicie con este post pero por falta de tiempo no le pude dedicar lo necesario para que fuera publicado. La semana pasada (bueno de hace ya tiempo jaja) realice para parte de un proyecto la conexión de Flex con Java. Hacerlo es muy sencillo pero cuando eres nuevo y no conoces al respecto si te lleva algo de tiempo, porque por lo menos yo no encontré la información necesaria respecto a la implementación.

Flex
Es un framework desarrollado por Adobe, la cual te permite crear aplicaciones dinámicas de Internet (RIA's- Rich Internet Applications). Esto significa que es un patrón o un esqueleto para poder llevar acabo la implementación de una aplicación. Nos sirve mucho ya que con su uso es muy fácil de distinguir el modelo MVC (Modelo-Vista-Controlador). Flex cubrirá la parte de vista y controlador y Java manejará el modelo del negocio; es decir este último llevará toda la lógica y las operaciones internas necesarias. Mientras Flex sólo será la vista y mande a llamar eventos a partir de las acciones que realice el usuario.
¿Pero por qué Flex?... Adobe define a Flex como altamente productivo además de ser opensource, el cual sirve para poder construir y mantener aplicaciones web "expresivas" que pueden ser desplegadas en más navegadores, computadoras y SO. Esto gracias a que Flex utiliza Adobe Flash Player. Otra ventaja es que Flex utiliza AS y puede desarrollar interfaces gráficas, juegos y animaciones.

BlazeDS(binary distribution)



BlazeDS es sólo un puente entre Flex (capa de vista) y Java (capa de negocio). Es decir, tiene la funcionalidad de una interfaz.



Conexión
Antes que nada lo que debemos de tener instalado o descargado en nuestra computadora es:

  1. Flex Builder 3 (http://www.adobe.com/cfusion/entitlement/index.cfm?e=flex3email)
  2. Eclipse (http://www.eclipse.org/downloads/)
  3. BlazeDS-binary distribution (http://flexorg.wip3.adobe.com/blazeds/3.0.x/milestone/3978/blazeds-bin-3.2.0.3978.zip)
  4. JDK (http://java.sun.com/javase/downloads/widget/jdk6.jsp)
  5. Apache Tomcat (http://tomcat.apache.org/download-60.cgi)
Ahora si ya que tenemos todo es hora de configurar!!!


  • Abrir eclipse. Se debe de configurar el servidor Apache Tomcat en esta IDE. Esto es en el Window-> Preferences ->Server -> Installed Runtimes. Y ahi es donde añadimos el servidor de Tomcat

  • Ahora debemos de agregar las bibliotecas de BlazeDS. Para esto es: File -> Import -> Web -> WAR File. Además se debe de escribir el nombre del proyecto.

  • Después de esto solo se deben de realizar las clases en java que se necesiten en su proyecto. Y para que flex sepa que clases son el código fuente se debe de modificar el fichero remoting-config.xml.  Como se muestra a continuacion.

<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service" class="flex.messaging.services.RemotingService">
<adapters>

   <adapters-definition id="java-object" class="flex.messaging" />
</adapters>
<default-channels>
   <channel ref="my-amf"/>
</default-channels>
<destination id="ClaseServiceDestination" channels="my-amf">
   <properties>
        <source> ejemplo.NombreClase</source>
   </properties>
</destination>


Así en las vistas realizadas en Flex se debe de agregar un RemoteObject, como se ve a continuación:



<?xml version="1.0" encoding="UTF-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
   import mx.rpc.events.ResultEvent;
   import mx.rpc.events.FaultEvent;
   import mx.controls.Alert;
   import mx.utils.ObjectUtil;
<mx:RemoteObject id="remoteClaseService" destination="ClaseServiceDestination" showBusyCursor="true">
<mx:method name="resultado" result="resultClase(event)" fault="faultResultado(event)">
</mx:RemoteObject>
<mx:Button label="Obtener Resultado" click="remoteClaseService.metodoClase()"/>
</mx:Application>


domingo, 7 de marzo de 2010

Windows 7 RC

Hace como dos semanas apareció en mi computadora un mesaje indicándome que hiciera un respaldo de mi información y que instalará una nueva versión de W7 ya que había finalizado el tiempo de prueba.
Y es que antes de que fuera el lanzamiento oficial de W7 instalé en mi computadora Windows 7 pero la versión de Release Candidate. Esta versión era simplemente la forma para poder probar el nuevo sistema operativo antes de que saliera al mercado. En el escritorio en la parte inferior derecha aparecía la siguiente leyenda de la imagen.
Pero ahora que W7 ya se encuentra en una versión final, lo que hizo Microsoft fue que días antes empezar a mandar este tipo de alertas. Haciendo que desde el pasado 1ero de Marzo si seguías con dicha versión del SO, tu computadora se reiniciaría cada 2 horas, el papel tapiz cambiaría a un fondo negro sólido y así como  que no se guardarían los archivos que realizaste al apagarse.
Por lo tanto, a instalar la versión completa de Windows 7 si es que les agradó el último SO de Microsoft.



Pero ¿qué tiene de nuevo W7?

De acuerdo a Microsoft (2010) su nuevo SO cuenta con las siguientes características:
  1. Compatibilidad de las aplicaciones: Introdujo cambios arquitectónicos a nivel de Kernel, haciéndolo más seguro que Windows XP. Pero entonces, muchas aplicaciones necesitaron modificación para funcionar poco a poco.
  2. Compatibilidad y requisitos de hardware: Windows 7 se diseñó para rendir bien en el mismo hardware con el que Windows Vista funciona bien, pero ofreciendo mejor rendimiento y mejoras de confiabilidad. El equipo de diseño de Windows 7 se centró específicamente en los aspectos fundamentales, así como en mantener compatibilidad con aplicaciones y hardware existentes. Al operarlo, descubrirá que Windows 7 arranca más rápido y tiene un menor consumo de memoria que Windows Vista
  3. Gran funcionalidad con Windows Server 2008: Uno de los beneficios clave del sistema operativo moderno es que Windows 7 y el sistema operativo Windows Server 2008 comparten un código base común, y se mantienen mediante un único modelo de servicio.
  4. Extienda el cifrado de datos a medios extraíbles: Incluye tecnología BitLocker permitiendo cifrado completo de todos los volúmenes de arranque de un equipo, junto con BitLocker To Go, ofrece protección de datos en almacenamiento portátil.
  5. Controla la cartera de aplicaciones para usuarios finales: AppLocker es una nueva capacidad que permite que los administradores de TI especifiquen las aplicaciones que se pueden ejecutar en un equipo portátil o de escritorio.Ver más detalles de instalación
  6. Automatiza tareas de rutina con sólido Scripting: PowerShell 2.0 permite bifurcación, ciclos, funciones, depuración y control de excepciones. Además posee una interfaz de usuario gráfica intuitiva que facilita la generación de scripts.Ver más detalles de instalación
  7. Soluciona problemas más rápido y eficaz: Ofrece herramientas enriquecidas para identificar y resolver problemas técnico. Esto gracias a la grabación de acciones de usuario así como de PowerShell.
  8. Crea, implementa y administra imágenes de manera más eficiente: La herramienta Administración y Mantenimientos de Imágenes de Implementación (DISM) proporciona un lugar central para implementar y realizar servicio de imágenes de Windows sin conexión.
  9. Migra más fácil datos y perfiles de usuarios: Incluye mejoras a la Herramienta de Migración de Estado de Usuario (USMT). Se utiliza para migrar configuraciones de un sistema operativo, archivos y otros datos de perfil del usuario.
  10. Mejora la productividad de usuarios en sucursales: BranchCache es una tecnología que copia en caché contenido al que se tiene acceso frecuentemente desde los archivos remotos y servidores web. De manera que así los usuarios tendrán acceso a está información más rápido.

Bueno, la decisión es de usted si quiere o no probar el funcionamiento de Windows 7 espero haya sido de su agrado.


Silvia

sábado, 6 de marzo de 2010

El nuevo inicio

Este blog será un lugar donde expresaré lo que vivo a diario, lo que estoy experimentando y los caminos que tendré que pasar para lograr mis objetivos en la vida.

Es un proyecto personal que incluirá experiencias de la vida diaria, experiencias laborales y hasta escolares. Todo esto ha surgido gracias a las nuevas experiencias que he vivido en los últimos dos meses, los cuales han estado llenos de cambios. Cambios que hasta cierto punto me han sorprendido pero eran necesarios y ahora poco a poco voy retomando el camino hacia lo que busco, hacia lo que quiero.

Espero que este proyecto poco a poco se enriquezca, no estoy segura de que alguien lo lea pero si es así que alegría y si no, no importa simplemente quiero plasmar mis ideas y mis experiencias.


Bueno mi nombre es Silvia Díaz, actualmente soy estudiante del 8vo semestre de Ingeniería en Tecnologías Computacionales en el ITESM-CCM, además me encuentro laborando como Consultor Jr. en una consultora mexicana.

Con esto, podrán darse cuenta de mi gran interés por la tecnología pero también disfruto de ver películas y series de TV así como los partidos de fútbol (obvio Pumas jaja!!). Y que mejor que compartir todo esto con amigos y salir a disfrutar de la vida después de una larga semana de estudio y trabajo XD!

Espero que este blog este lleno de información y experiencias y que en algún momento le sean de utilidad a alguien más.