¡Oooops! ¡Excel Ha Fallado!

19 11 2007

exUno esperaría que una aplicación de una empresa tan seria, eficiente, multimillonaria como Microsoft pudiera realizar una simple operación matemática como una multiplicación. Pero resulta que tiene un ligero detalle, Excel 2007 no puede realizar una simple multiplicación con dos cifras en especial 850 y 77.1.

Así es, si en cualquier hoja de Excel 2007 ponemos la operación 850 x 77.1 pues nos va a dar de resultado 100,000 cuando el resultado que arroja cualquier calculadora de mercado es 65,535. Creo que Microsoft debería de poner un poco más de cuidado al realizar sus aplicaciones, puesto que Excel es una herramienta que es utilizada por muchas compañías e inclusive hasta el gobierno para realizar cálculos como nóminas, impuestos, inventarios, etc.

Imaginemos que pasa si por ejemplo un trabajador que gana (en algún país ideal… no en México) $850.00 pesos por día laborado, y por algún motivo laboro durante el periodo de nómina 77.1 días, cuando el contador de la empresa que utiliza Microsoft Excel 2007 para realizar los libros de pagos introduce los datos de días laborados por el salario que recibe la persona, pues resultaría que nuestro trabajador va a cobrar $100,000.00 pesos ese periodo de pago… De una manera no premeditada la empresa estaría perdiendo $34,465.00 pesos si la nómina no es revisada y el error detectado.

Éste es un grave problema que nos pone a pensar en la seguridad que nos puede llegar a dar Microsoft con sus productos, será que no solamente nos seguirán ocasionando dolores de cabeza y molestias cuando Windows se travé, sino que ahora tendremos que preocuparnos por si Excel hace bien los cálculos…..

¡Bien Billy, sigue así!

Anuncios




Google Ingresará Al Mercado De Software Para Dispositivos Móviles

6 11 2007

phoneGoogle ha anunciado el día de hoy para terminar de una vez por todas con el rumor de que quería ingresar a la producción de teléfonos, que lo que realmente desea y va a realizar es una muy ambiciosa alianza con los fabricantes de teléfonos, compañías telefónicas y otras compañías tecnológicas para empezar la creación de telefonos más baratos al utilizar la plataforma de desarrollo “Android”.

Google ha dejado claro que no desea ingresar en la manufactura de aparatos telefónicos y tampoco pretende poner su firma/logo en ellos, lo que ha logrado es que compañías manufactureras de ésta tecnología como Samsung, Motorola y LG hayan acordado empezar a cambiar sus productos que estaban bajo licencia propietaria a la licencia abierta que propone la plataforma de Google.

Las herramientas para trabajar en dicha plataforma será liberada entre ésta y la próxima semana, permitiendo a los desarrolladores la comenzar con la creación de aplicaciones y otras mejoras de software que incrementaran los usos que hoy en día se le dan a todos los dispositivos móviles como smartphones. Lo lamentable es que los primeros teléfonos que estén equipados ya con el software y la tecnología de Google no comenzarán a estar disponibles sino hasta la segunda mitad del año 2008, las primeras empresas en ofrecer dichos teléfonos serán T-Mobile y Sprint.

Este acuerdo seguramente beneficiará a Google al incrementar sus ganancias por publicidad en teléfonos móviles, el cuál se estima que llegue a $11.4 mil millones de dólares a nivel mundial para el año 2011. Por otra parte para las compañías telefónicas se veran beneficiadas al incrementar la venta de servicios online y darles una ventaja competitiva frente a su rival AT&T y IPhone.

Éste anuncio por parte de Google y la gran aceptación que ha tenido por parte de las compañías va ser un gran empujón para la tecnología móvil, y va a permitir grandes cambios y quien sabe que es lo que nos depara el futuro.





¿Cómo Agregar Componentes Al Pallete De NetBeans?… (Calendario)

1 11 2007

Pues a petición de Fanny aquí va una explicación de cómo poder agregar el calendario que les comenté en posts pasados a NetBeans. Así que sin más preámbulo aquí va paso a paso.

  1. Primero abrimos NetBeans (creo que éste paso es lógico).
  2. A continuación le damos click derecho sobre el Pallete de los componentes de NetBeans y seleccionamos Pallete Manager como muestra la imagen 1.
  3. En la pantalla que nos aparece le damos el de “add from JAR…”. (imagen 2).
  4. En la siguiente pantalla buscamos la ubicación donde tenemos el JAR del Calendario que bajamos de FLib, y seleccionamos el JAR de jcalendar.jar. (imagen 3).
  5. En la siguiente pantalla seleccionamos los dos componentes, esto es para que nos agregre tanto el Combo como el calendario en sí. Y le damos Next. (imagen 4).
  6. A continuación seleccionamos la categoría en donde deseamos que agregue los componentes. Y le damos finish. (imagen 5).
  7. Uno creería que con eso basta, pero debemos de recordar que lo que acabamos de agregar es un “programa” de java que vamos a estar usando o “llamando” desde otra aplicación, por lo que es necesario agregarlo a las librerias de nuestra aplicación. Para hacerlo le damos click derecho en la carpeta de Libraries de nuestro proyecto y seleccionamos “Add Library”. (imagen 6).
  8. En la pantalla que aparece le damos en “Manage Libraries” (imagen 7).
  9. En la siguiente le damos en “New Library” la cuál nos desplegará un ciálogo donde debemos de poner el nombre de la librería. (imagen 8 & imagen 9).
  10. Después de darle aceptar, debemos de agregar el JAR del calendario a la nueva librería, para hacerlo le damos en “Add JAR/Folder”. Donde nos aparecerá un diálogo donde debemos de seleccionar nuevamente el JAR del calendario en donde lo tengamos guardado.(imagen 10).
  11. Después le damos en OK, seleccionamos la librería que acabamos de agregar, y le damos Add Library (imagen 11).

Después de seguir estos sencillos pasos ya podremos agregar el componente de calendario tan sencillo como agregamos un botón a nuestra aplicación.





Algoritmos De Búsqueda

25 10 2007

Algoritmo A* De BúsquedaMap

El algoritmo A* es usualmente utilizado en los problemas para encontrar la mejor ruta o camino, lo que realiza el algoritmo es construir todas las rutas desde un punto inicial hasta encontrar alguna que llegue al nodo final o meta. De éste modo solamente construye aquellas rutas que son candidatas a formar una solución o camino desde el inicio hasta el nodo final.


Para poder determinar que rutas son las que tienen mayor probabilidad de llegar al nodo meta, el algoritmo utiliza una heurística basada en la distancia de cualquier punto dado hacía la meta. Donde se diferencia el algoritmo A* de otros algoritmos avaros de “best-first search” es el hecho de que va tomando en cuenta la distancia que ya ha recorrido hasta el momento, haciendo de este modo una respuesta mucho más completa y óptima.

A* es una combinación entre los algoritmos de búsqueda de anchura con algoritmos de profundidad, esto debido a la función que utiliza f(n)= g(n)+h(n), dónde h(n) [que tiende primero a profundidad] representa el valor heurístico del nodo a evaluar y g(n) [que tiende a primero en anchura] representa el costo real del camino recorrido para poder llegar al nodo. Lo anterior lo posibilita a cambiar de camino de búsqueda cuando se encuentra un camino que pareciera ser más óptimo.
Los usos que se le pueden dar a éste algoritmo son el de trazar las rutas para llegar de una ciudad a otra, algo como lo que tiene la Secretaría de Comunicaciones y Transportes para trazar la ruta de una ciudad a otra sacando el menor costo y recorrido posible. La aplicación se llama “Traza Tú Ruta”
.

Algoritmo “Best-First-Search”
Éste algoritmo es una optimización de “breadth-first search” y lo mejora al expandir el nodo más prometedor a través de alguna regla dada. Lo que intenta realizar el algoritmo es estimar el porcentaje de probabilidad de que el nodo “n” sea la mejor opción al utilizar una heurística de evaluación de una función f(n), que depende mayormente en la descripción de “n”, es decir en la habilidad para poder describir la meta y la información que se conoce hasta el punto en el que el algoritmo se encuentra así como cualquier otra información que sea relevante para el problema.


Así el algoritmo busca predecir que tan cercano a una solución es un camino dado, esto lo realiza extendiendo los caminos que se encuentran más cercanos a dicha solución primero, el modo específico de búsqueda se conoce como “greedy best-first search”. La implementación más eficiente para la selección del mejor candidato por extensión es a través de una cola de prioridad.
domino
Creo que uno de los mejores uso que se le puede dar a éste algoritmo es la teoría de juego. Podemos ver claramente como la computadora va a ser capaz de ir seleccionando “la mejor opción hasta el momento” para ganar, o ir prediciendo cuales son los movimiento que podrán seguirle a cierta tirada.


Aunque debemos de tener en cuenta que no podrá ser aplicable para todos los juegos puesto que por ejemplo en el ajedrez simplemente para el 4to movimiento el número de posibles jugadas o movimientos es de 9,100,000, y este es un número que va aumentando exponencialmente, llegando a un total posible en el orden de los veinte septillones, es decir 20×1042.

Simulated Annealing
Éste es un algoritmo de probabilidad que busca y localiza la mejor aproximación posible para el resultado óptimo de una función dada dentro de un universo de búsqueda amplio. Se utiliza generalmente cuando el campo de búsqueda es discreto, por ejemplo los tours que visitan determinadas ciudades.


Su nombre y la idea principal provienen del método en la metalurgia de recocido, que conllevan el calentamiento y enfriamiento controlado de los materiales para elevar el número de cristales y reducir sus defectos.recocido
En éste algoritmo cada punto “s” del universo de búsqueda es comparado con el estado de algún sistema físico, y la función que se utiliza E(s) es interpretada como la energía interna del sistema en ese estado dado. La meta es llevar al sistema de un punto aleatorio inicial a un estado en el cual éste tenga la menor cantidad posible de energía.


En cada paso el algoritmo considera a algunos de los vecinos del actual estado “s”, y probabilísticamente calcula y decide si debe de moverse a alguno de ellos. Las probabilidades son escogidas de tal forma que el sistema tienda a tener menor cantidad de energía. Éste paso es repetido uno número de iteraciones determinadas por el programador o hasta que se alcance un estado de energía que sea aceptable para el sistema.

Para poder aplicar éste algoritmo a un problema en específico es necesario que uno le proporcione los siguientes parámetros: el universo de estados, la meta en energía de la función E(s), la forma de generar a los candidatos a través de una función vecinos(), el nivel de aceptación probabilística en función P() y el itinerario de recocido temp(). Todos estos parámetros tienen un impacto significativo en la eficiencia del método. Lamentablemente no existe un modo de determinar que opciones de valores serán los mejores para cada problema, y no hay forma de encontrarlos para u n problema en específico.

Su uso puede ser para cualquier problema de búsqueda de mejor camino, o mejor opción siempre y cuando se puede generar los parámetros arriba mencionados que se necesitan para el funcionamiento del mismo.

Hill Climbing
Éste algoritmo pertenece a los de búsqueda local, y su implementación es bastante sencilla lo cual lo hace muchas veces la opción favorita por muchos a pesar de que existan algoritmos que puedan dar mejores y más exactos resultados.

El algoritmo puede ser utilizado en la resolución de problemas que tienen varias posibles soluciones pero en las cuales algunas son mejores que otras. El algoritmo se comienza con una de estas soluciones escogidas al azar. Y poco a poco va buscando una mejora a dicha solución, por más mínima que ésta sea. Hasta que el algoritmo llega a un punto en el que ya no puede encontrar ninguna mejora a la solución y es entonces cuando termina. Por lo general cuando llega a éste punto la solución es bastante cercana a la más optima, aunque nunca se puede garantizar que llegue a la óptima.

Lo que realiza el algoritmo es el buscar maximizar o minimizar una función f(x) dada, donde “x” se refiere a estados discretos del problema. Estos estados usualmente son representados por vértices en una gráfica. Así el algoritmo va a seguir una gráfica de vértice a vértice, siempre aumentando o disminuyendo localmente el valor de la función hasta encontrar un máximo o mínimo local.

Ant Colony Optimization
Es un algoritmo que utiliza probabilidad para solucionar problemas computacionales a través de la búsqueda de los mejores caminos en un grafo. Está inspirado en el modo en como las hormigas pueden encontrar el mejor camino hacía su colonia desde un punto dado.

Básicamente lo que éste algoritmo hace es tener una o varías hormigas dentro del grafo que van a ir recorriendo dicho grafo a través de diferentes caminos y/o decisiones, y van a ir depositando un valor de “feromona” en los caminos que utilizen para realzar la importancia del mismo. Cada feromona en el camino va a ir disminuyendo un porcentaje que el programador decide, esto es para que si éste durante un dado periodo no es visitado pierda la importancia.

De éste modo el algoritmo va a ir encontrando un camino óptimo para poder visitar todos los nodos del algoritmo de una manera sencilla (no se puede asegurar que la más óptima). El algoritmo se corre tantas veces como el programador lo requiera o hasta que no exista alteraciones sustanciales en los valores del camino encontrado, lo cual indica que el algoritmo a llegado a un punto estable.

Éste algoritmo se puede utilizar para encontrar las mejores (no se sabe si óptimas) rutas para visitar cierto “universo” de ciudades o lugares dados, o como lo mencioné en un principio cualquier problema computacional que pueda ser representado a través de grafos.





FLib…. “A Java Library”

18 10 2007

FLIB

Pues navegando por Internet buscando un componente para NetBeans para poder añadir un calendario de una forma fácil y eficiente, me di cuenta que había demasiadas implementaciones (Java Component V5.1, Mig Calendar Component, etc), pero el problema es que todas ellas cobraban entre $50 y $120 dólares, lo cuál seamos honestos es una exageración por un pedazo de código de 800Ks….

Cuando estaba apunto de darme por vencido en la página número 14 de Google encontre un vínculo a FLib la cuál es una librería diseñada por Tony Freixas, se trata de una librería de código abierto de alta calidad de tres componentes para Java:

JCalendar es un componente para calendarios, se puede utilizar para desplegar la fecha y/o el tiempo para dejar que el usuario las seleccione; viene en dos formas: un panel que contiene un calendario y una “combo box” con un calendario que se despliega al darle click.

JWizard es un componente para realizar los “Wizards” de instalación, es decir las pantallitas que nos llevan de la mano a través del proceso para completar alguna tarea como intalar un programa, configurarlo, etc. Es bastante sencillo de utilizar y contiene todas las características que tienen éste tipo de ventanas como son un logo del lado izquierdo, un título, un subtítulo para cada ventana, botones de atrás, siguiente, terminar, cancelar y ayuda, entre otras características.

TableLayout es como su nombre lo índica un manejador de layouts. Está altamente basado en HTML para de éste modo poder remplazar completamente el complicado GridLayout.
Espero que les sea de utilidad y pues es hora que continué programando mi proyecto final de APIS….