AdSense_BarHorizontal

martes, 31 de enero de 2017

GUIA FINALFANTASY XV - ESPAÑOL, (SPANISH)

En esta entrada de DatoByte les comparto la URL de otro Blog quien compartio la guia completa de Final Fantasy XV, Esta vez en ESPAÑOL.



Sin mas que decir les comparto la URL de MEGAUPLOAD
LINK: Guia Español - No oficial

Cabe aclarar que esta guia no es la oficial, hasta el momento solo he conseguido la oficial en su version Ingles:  Guia Ingles

martes, 24 de enero de 2017

Guia Final Fantasy XV [English] - Proximamente Español

En esta entrada de DatoByte les comparto la URL de otro Blog quien compartio la guia oficial completa de Final Fantasy XV, por desgracia en Ingles, aun asi es de mucho interes tener a la mano esta Guia, el link de descarga lo encontraran al interior de la publicacion del otro blog.


https://nicoblog.org/strategy-guide/final-fantasy-xv-the-complete-official-guide-1-02-crown-update/


Publisher: Piggyback
Language: English
Pages in book: 320
PDF: 324 pages
Platform: PS4/One

Link: https://drive.google.com/open?id=0B3BDEuPtnYXMVFNQY2FxWnpHSlU

lunes, 23 de enero de 2017

Tabla comparativa de patrones de desarrollo de software

En esta entrada de DatoByte les quiero compartir una tabla comparativa de desarrollo de software que he realizado uniendo la información de varios libros Incluyendo el famoso libro de "Gang of Four Design Patterns", en esta tabla encontraras informacion adicional incluyendo un conjunto de ejemplos en Java y .NET que te pueden brindar una mayor comprensión.

En el siguiente link les comparto el archivo para su descarga.

Tabla Comparativa

Recuerda compartir, comentar y dar +1 en la publicacion.

Bibliografia

"Gang of Four Design Patterns"

8 Causas comunes del rediseño de software

En esta entrada de DatoByte les quiero hablar acerca de una situación con la cual frecuentemente las personas involucradas en el desarrollo de software, específicamente en la etapa del desarrollo, pero con raíces en el análisis, ya que en ocasiones en las etapas iniciales no se visualiza el tamaño del software a construir y a medida que el tiempo llegan a surgir nuevas solicitudes en los requisitos , lo cual directamente conlleva un impacto en el desarrollo, por consiguiente nos lleva a rediseñar diversos objetos y/o componentes que ya se encuentran funcionando y posiblemente en un estado de producción. por ello voy a mencionar 8 causas comunes del rediseño de software que evidencian el uso de algunos patrones de desarrollo de software.

Tal vez te pueda interesar Tabla comparativa de patrones de desarrollo de software

  1. Crear un objeto especificando su clase explicitamente.

  2. Especificar el nombre de la clase al crear un objeto nos liga a una implementacion concreta en vez de a una interfaz. Esto puede complicar los cambios a futuro.

    ¿Como Evitarlo?
    Crear los objetos indirectamente

    Patrones de software que facilitan su solución
    Abstract Factory, Factory Method, Prototype

  3. Dependencia de operaciones concretas

  4. Cuando especificamos una determinada operación estamos ligando a una forma de satisfacer una petición

    ¿Como Evitarlo?
    Evitando ligar las peticiones al codigo, hacemos mas facil cambiar el modo de satisfacer una peticion, tanto en tiempo de compilacion como en tiempo de ejecucion

    Patrones de software que facilitan su solución
    Chain of responsability, Command

  5. Dependencias de plataformas hardware o software

  6. Las interfaces externas de los sistemas operativos y las interfaces de programación de aplicaciones(API) Varían para las diferentes plataformas hardware y software

    ¿Como Evitarlo?
    El software que depende de una plataforma concreta sera mas dificil de portar a otras plataformas. Incluso puede resultar dificil mantenerlo actualizado en su plataforma Nativa. Por lo tanto es importante diseñar nuestros sistemas de manera que se limiten sus dependencias de plataforma

    Patrones de software que facilitan su solución
    Abstract Factory, Bridge

  7. Dependencias de las representaciones o implementaciones de objetos

  8. Los clientes de un objeto que saben como se representa, se almacena, se localiza o implementa, quizá deban ser modificados cuando cambie dicho objeto

    ¿Como Evitarlo?
    Ocultar esta informacion a los clientes previene los cambios en cascada

    Patrones de software que facilitan su solución
    Abstract Factory, Bridge, Memento, Proxy

  9. Dependencias algorítmicas

  10. Muchas veces los algoritmos se amplían, optimizan o sustituyen por otros durante el desarrollo y posterior reutilización.

    ¿Como Evitarlo?
    Los objetos que dependen de un algoritmo tendran que cambiar cuando este cambie. Por tanto, aquellos algoritmos que es probable que cambien deberian estar aislados.

    Patrones de software que facilitan su solución
    Builder, Iterator, Strategy, Template Method, Visitor

  11. Fuerte acoplamiento

  12. Las clases que están fuertemente acopladas son difíciles de reutilizar por separado, puesto que dependen unas de otras. El fuerte acoplamiento lleva a sistemas Monolíticos, en los que no se puede cambiar o quitar una clase sin entender y cambiar muchas otras. El sistema se convierte en algo muy denso que resulta difícil aprender, portar y mantener.

    ¿Como Evitarlo?
    El bajo acoplamiento aumenta la probabilidad de que una clase pueda ser reutilizada ella sola y de que un sistemapueda aprenderse, portarse, modificarse y extenderse mas facilmente. Los patrones de diseño hacen uso de tecnicas coo acoplamiento abctracto y la estructuracion en capas para promover sistemas escasamente acoplados

    Patrones de software que facilitan su solución
    Abstract Factory, Bridge, Chain of responsability, command, Facade, Mediator, Observer

  13. Añadir funcionalidad mediante la herencia

  14. Particularizar un objeto derivando de otra clase suele ser fácil. Cada nueva clase tiene coste de implementacion. Definir una subclase también requiere un profundo conocimiento de la clase padre. Por ejemplo redefinir una operación puede requerir redefinir otra, o tener que llamar a una operación Heredada. Ademas la herencia puede conducir a una explosión de clases, ya que una simple extensión puede obligar a introducir un montón de clases nuevas.

    ¿Como Evitarlo?
    La composicion de objetos en general y la delegacion en particular proporciona alternativas flexibles a la herencia para combinar comportamiento. Se puede añadir nueva funcionalidad de una aplicación componiendo los objetos existentesde otra forma en vez de definir subclases nuevas de otras clases existentes. No obstante tambien es cierto que un uso intensivo de la composicion de objetos puede hacer que los diseños sean mas dificiles de entender. muchos patrones de diseño `rpducen diseños en los que se pueden introducir nueva funcionalidad simplemente definiendo una subclasey componiendo sus instancias con otras existentes

    Patrones de software que facilitan su solución
    Bridge, Chain of responsability, Composite Decorator, Observer, Strategy

  15. Incapacidad para modificar las clases convenientemente.

  16. Aveces hay que modificar una clase que no puede ser modificada convenientemente. Quizas necesitemos el código fuente y no lo tengamos (Como puede ser el caso de una biblioteca de clase comercial)O tal vez cualquier cambio requeriría modificar muchas de las subclases existentes

    ¿Como Evitarlo?
    Los patrones de diseño ofrecen formas de modificar las clases en tales circunstancias.

    Patrones de software que facilitan su solución
    Adapter, Decorator, visitor


Si esta entrada te ha parecido de interés recuerda comentar y/o compartir con tus amigos.

martes, 16 de agosto de 2016

Glosario (segunda parte) y apuntes

En esta nueva entrada de DatoByte les comparto nuevos conceptos relacionados con el mundo de sistemas (Hardware y software) adicional de unos apuntes del segundo capitulo del libro Ingenieria de Software 9na Edicion

Iniciemos con los conceptos:

Ingeniería del software: este término fue acuñado para definir la necesidad de una disciplina científica que, como ocurre en otras áreas, permita aplicar un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento del software.

Gestión Predictiva de proyectos: es una disciplina formal de gestión, basada en la planificación, ejecución y seguimiento a través de procesos sistemáticos y repetibles.

Producción basada en procesos: se crean modelos de procesos basados en el principio de Pareto, empleado con buenos resultados en la producción industrial. Dicho principio nos indica que la calidad del resultado depende básicamente de la calidad de los procesos.

Desarrollo guiado por pruebas de software, o Test-driven development (TDD): es una práctica de ingeniería de software que involucra otras dos prácticas: Escribir las pruebas primero (Test First Development) y Refactorización (Refactoring). Para escribir las pruebas generalmente se utilizan las pruebas unitarias (unit test en inglés). En primer lugar, se escribe una prueba y se verifica que las pruebas fallan. A continuación, se implementa el código que hace que la prueba pase satisfactoriamente y seguidamente se refactoriza el código escrito. El propósito del desarrollo guiado por pruebas es lograr un código limpio que funcione. La idea es que los requisitos sean traducidos a pruebas, de este modo, cuando las pruebas pasen se garantizará que el software cumple con los requisitos que se han establecido.

Glosario Programacion

XPath
XSLT



Apuntes

Actividades fundamentales en la Ingenieria de Software

Existen muchos diferentes procesos de software, pero todos deben incluir cuatro actividades
que son fundamentales para la ingeniería de software:
1. Especificación del software Tienen que definirse tanto la funcionalidad del software
como las restricciones de su operación.
2. Diseño e implementación del software Debe desarrollarse el software para cumplir
con las especificaciones.
3. Validación del software Hay que validar el software para asegurarse de que cumple
lo que el cliente quiere.
4. Evolución del software El software tiene que evolucionar para satisfacer las necesidades
cambiantes del cliente.


Causas Principales de los Fracasos en los proyectos de Software

Según el informe de Standish, las diez causas principales de los fracasos, por orden de importancia, son:
-Escasa participación de los usuarios
-Requerimientos y especificaciones incompletas
-Cambios frecuentes en los requerimientos y especificaciones
-Falta de soporte ejecutivo
-Incompetencia tecnológica
-Falta de recursos
-Expectativas no realistas
-Objetivos poco claros
-Cronogramas irreales
-Nuevas tecnologías

Principios del Manifiesto Agil

Individuos e interacciones sobre procesos y herramientas
Software que funciona sobre documentación exhaustiva
Colaboración con el cliente sobre negociación de contratos
Responder ante el cambio sobre seguimiento de un plan

martes, 14 de junio de 2016

Solucionario Ejercicios Capitulo 1 Ingenieria de software - Ian Sommervile (9na Edicion)

En esta nueva entrada de DatoByte les quiero Compartir la solucion a los ejercicios del capitulo 1 del libro  Ingenieria de software - Ian Sommervile (9na Edicion)

Actualmente me encuentro leyendo este libro el cual tengo que decir que su contenido me ha parecido muy interesante, espero a medica que finalice cada capitulo estarles compartiendo las respuestas a las preguntas.


1.1. Explique por qué el software profesional no sólo son programas que se desarrollan para un cliente.

Muchos suponen que el software es tan sólo otra palabra para los programas de cómputo. No obstante, cuando se habla de ingeniería de software, esto no sólo se refiere a los programas en sí, sino también a toda la documentación asociada y los datos de configuración requeridos para hacer que estos programas operen de manera correcta. Un sistema de software desarrollado profesionalmente es usualmente más que un solo programa. El sistema por lo regular consta de un número de programas separados y archivos de configuración que se usan para instalar dichos programas. Puede incluir documentación del sistema, que describe la estructura del sistema; documentación del usuario, que explica cómo usar el sistema, y los sitios web para que los usuarios descarguen información
reciente del producto.

1.2. ¿Cuál es la principal diferencia entre desarrollo de productos de software genéricos y desarrollo de software personalizado? ¿Qué significa esto en la práctica para los usuarios de productos de software genérico?

Una diferencia importante entre estos tipos de software es que, en productos genéricos, la organización que desarrolla el software controla la especificación del mismo. Para los productos personalizados, la organización que compra el software generalmente desarrolla y controla la especificación, por lo que los desarrolladores de software deben trabajar siguiendo dicha especificación.

1.3. ¿Cuáles son los cuatro atributos importantes que debe tener todo software profesional? Sugiera otros cuatro atributos que en ocasiones sean significativos.

Mantenimiento
El software debe escribirse de tal forma que pueda evolucionar para satisfacer las necesidades cambiantes de los clientes. Éste es un  atributo crítico porque el cambio del software es un requerimiento inevitable de un entorno empresarial variable.

Confiabilidad y seguridad
La confiabilidad del software incluye un rango de características que abarcan fiabilidad, seguridad y protección. El software confiable no tiene que causar daño físico ni económico, en caso de falla del
sistema. Los usuarios malintencionados no deben tener posibilidad de acceder al sistema o dañarlo.

Eficiencia
El software no tiene que desperdiciar los recursos del sistema, como la memoria y los ciclos del procesador. Por lo tanto, la eficiencia incluye capacidad de respuesta, tiempo de procesamiento, utilización de memoria, etcétera.

Aceptabilidad
El software debe ser aceptable al tipo de usuarios para quienes se diseña. Esto significa que necesita ser comprensible, utilizable y compatible con otros sistemas que ellos usan.

1.4. Además de los retos de la heterogeneidad, cambio empresarial y social, y confianza y seguridad, identifique otros problemas y retos que sea probable que enfrente la ingeniería de software en el siglo XXI. (Sugerencia: piense en el ambiente).

Pregunta abierta:
Pensando en el ambiente ->Tecnologia con obsolecencia programada
Sin pensar en el medio ambiente -> Capacidad de procesamiento


1.5. Con base en su conocimiento de algunos tipos de aplicación estudiados en la sección 1.1.2, explique, con ejemplos, por qué diferentes tipos de aplicación requieren técnicas especializadas de ingeniería de software, para apoyar su diseño y desarrollo.

Para cada tipo de sistema se usan distintas técnicas de ingeniería de software, porque el software tiene características muy diferentes. Por ejemplo, un sistema de control embebido en un automóvil es crítico para la seguridad y se quema en la ROM cuando se instala en el vehículo; por consiguiente, es muy costoso cambiarlo. Tal sistema necesita verificación y validación muy exhaustivas, de tal modo que se minimicen las probabilidades de volver a llamar para revisión a automóviles, después de su venta, para corregir los problemas del software. La interacción del usuario es mínima (o quizás inexistente), por lo que no hay necesidad de usar un proceso de desarrollo que se apoye en el prototipo de interfaz de usuario.

1.6. Explique por qué existen ideas fundamentales de la ingeniería de software que se aplican a todos los tipos de sistemas de software.

Las nociones fundamentales de la ingeniería de software son universalmente aplicables a todos los tipos de desarrollo de sistema.


1.7. Explique cómo el uso universal de la Web cambió los sistemas de software.

Los sistemas basados en la Web podían desarrollarse donde se tuviera acceso a dichos sistemas usando un navegador Web, en lugar de una interfaz de usuario de propósito específico. Esta situación condujo al desarrollo de una gran variedad de nuevos productos de sistemas que entregaban servicios innovadores, a los cuales se ingresaba desde la Web.

Así como estos productos de sistemas, el desarrollo de navegadores Web que corrieran pequeños programas y realizaran cierto procesamiento local condujo a una evolución en los negocios y el software organizacional. En lugar de elaborar software e implementarlo en las PC de los usuarios, el software se implementaba en un servidor Web. Este avance hizo mucho más barato cambiar y actualizar el software, pues no había necesidad de instalar el software en cada PC. También redujo costos, ya que el desarrollo de interfaces de usuario es bastante caro. En consecuencia, dondequiera que fuera posible hacerlo, muchos negocios se mudaron a la interacción basada en la Web con sistemas de software de la compañía.

1.8. Analice el hecho de si los ingenieros profesionales deben ser certificados en la misma forma que los médicos o abogados.

Rotundamente si, pues sobra decir que debe mantener estándares normales de honestidad e integridad. No debe usar sus habilidades y experiencia para comportarse de forma deshonesta o de un modo que desacredite la profesión de ingeniería de software. Sin embargo, existen áreas donde los estándares de comportamiento aceptable no están acotados por la legislación, sino por la noción más difusa de responsabilidad profesional.

1.9. Para cada una de las cláusulas del Código de ética ACM/IEEE que se muestra en la figura 1.3, sugiera un ejemplo adecuado que ilustre dicha cláusula.

Pregunta abierta:
-Publico: No realizar software que vaya en contra de la destruccion del ser humano, "Software para maquinas que destruyan a la sociedad"
-Cliente y empleador: Laborar bajo la modalidad de OutSourcing
-Producto: Desarrollar Softwares que sea certificable.
-Juicio: No usar las habilidades para cometer delitos informaticos
-Gestion: Actuar en pro del desarrollo de software profesional
-Profesion: Ejercer profesionalmente y promover el continuo desarrollo de la profesion
-Colegas: Trabajo en equipo de forma colaborativa
-Uno mismo: Autoaprendizaje en el campo de accion de la ingenieria de software


1.10. Para ayudar a contrarrestar el terrorismo, muchos países planean o desarrollaron sistemas de cómputo que siguen la pista a gran cantidad de sus ciudadanos y sus acciones. Claramente esto tiene implicaciones en cuanto a la privacidad. Discuta la ética de trabajar en el desarrollo de este tipo de sistema.

Pregunta abierta

Un conflicto ético es la participación en el desarrollo de sistemas militares y nucleares. Al respecto, algunas personas se sienten muy afectadas por estos temas y evitan participar en el desarrollo de algún sistema asociado con los sistemas militares. Otras más trabajarán en los sistemas militares, pero no en los de armamento. Incluso otras sentirán que la seguridad nacional es un principio fundamental y no tienen objeciones éticas para trabajar en sistemas de armamento.

En tal situación es importante que tanto empleadores como empleados dejen en claro con antelación sus percepciones o puntos de vista. Cuando una organización participa en trabajo militar o nuclear, debe contar con la capacidad de especificar que los empleados tienen la voluntad de aceptar cualquier trabajo asignado. De igual forma, si un empleado toma la responsabilidad y deja en claro que no quiere trabajar en tales sistemas, los empleadores no tendrán que presionarlo para que éste lo haga más tarde.

lunes, 13 de junio de 2016

Ingenieria de Software - ¿Por que estudiar Ingenieria de sistemas?

En esta nueva entrada de DatoByte les comparto una opinión algo personal desde el punto de vista de la experiencia que he tenido en este corto periodo de 5 años.

Iniciare diciendo que me siento muy orgullo de haber elegido esta carrera profesional,  de nunca cambiar de opinión mientras la estaba estudiando y de haber culminado mis estudios, recuerdo el día en el que realice mi primer algoritmo de "Hola mundo" para ese entonces nuestro profesor nos enseño en uno de los mejores lenguajes de programación que he conocido, hablo de JAVA, ver en pantalla un simple mensaje despierta mas motivación para saber dominar mas a fondo el hecho de programar.

Cada vez que aprobaba una materia que tenia relación con ejercer en este amplio mundo de la ingeniería de sistemas sentía un gran cambio en mi forma de pensar, materias que van desde Calculo, Matemáticas discretas, Geometría vectorial, de las cuales posiblemente sean las mas complicadas de aprobar, pasando por materias de gran interés como Circuitos digitales, Arquitectura de computadores, hasta posiblemente las materias que nos hacían quemar mas neuronas aquellas relacionadas con aprender una nueva sentencia y crear nuevas lineas de código como por ejemplo Lenguajes de programación. Todas esas materias aportan de gran manera un gran conocimiento que todo ingeniero de sistemas debe aprender a dominar, entiéndase dominar al menos conocer su aplicación, valga este ultimo comentario como Escudo ante la popular mentira "Para que voy a aprender eso si no lo voy a usar" sin embargo como ingeniero de sistemas puedo afirmar que todo es de vital interés en esta gran carrera que proyecta nuevos horizontes.

La ingeniería de sistemas se interesa por todos los aspectos del desarrollo de sistemas basados en computadoras, incluidos hardware, software e ingeniería de procesos, en este punto hacemos una división en 3 enfoques:

-Ingeniería de Hardware:


Los ingenieros informáticos de hardware trabajan en el diseño, desarrollo y fabricación de equipamientos informáticos. Se especializan en áreas tales como las comunicaciones, los sistemas de control, la robótica, los microprocesadores o los dispositivos semiconductores. Deben tener en cuenta la eficiencia, la seguridad y los factores ambientales.

-Ingeniería de Procesos:


Es la integración sistémica de metodologías y procedimientos de diversas áreas de las ciencias naturales y la Ingeniería, que se aplican al diseño, administración, mejoramiento e innovación de procesos, especialmente de base fisicoquímica y biotecnológica. ​​​​​​​​​​​​​​​​​​​​​​


-Ingeniería de Software:


La ingeniería de software es una disciplina de la ingeniería que se interesa por todos los aspectos de la producción de software, Este ultimo en mi opinión es posiblemente el campo de acción mas grande que se posee un ingeniero de sistemas y esto solo por un comentario "La ingeniería de software no tiene limites naturales a su potencial", esto implica que prácticamente si algo se puede imaginar, ese algo puede ser convertido en software o al menos tendrá un campo de software.

Acorde a el libro de Ingeniería de software de Ian Sommerville La ingeniería de software es importante por dos razones:
1. Cada vez con mayor frecuencia, los individuos y la sociedad se apoyan en los avanzados sistemas de software. Por ende, se requiere producir económica y rápidamente sistemas confiables.

2. A menudo resulta más barato a largo plazo usar métodos y técnicas de ingeniería de software para los sistemas de software, que sólo diseñar los programas como si fuera un proyecto de programación personal. Para muchos tipos de sistemas, la mayoría de los costos consisten en cambiar el software después de ponerlo en operación.

Sin embargo el asunto a destacar es Ingeniería de sistemas y no una de estas en particular, sin embargo es bueno aclarar esta posible división de la ingeniería de sistemas.

Ahora bien si todo lo anterior no te ha convencido de Estudiar una Ingeniería de sistemas no te preocupes, Posiblemente no sea la emoción que estas buscando o tal vez pienses que no es para ti, pero ten en cuenta que es una de las carreras que mas le ha aportado en los últimos años al desarrollo del ser humano, sencillamente la tecnología y el ser humano se han convertido en un par de entes con una relación simbiotica, ya que mutuamente se encuentran en constante colaboración, a tal punto hemos llegado que a diaria un gran porcentaje de personas tienen acceso a algún sistema, y en este momento estas viendo esta publicación en el sistema de Blogger, usando un software como tu navegador y también tu sistema operativo, y ni que decir de el computador o celular desde el que estas viendo, todos esos fueron pensados por ingenieros de sistemas, así que si quieres contribuir con este mundo tecnológico es mas que suficiente para que inicies esta travesía por el mundo de la Ingeniería de sistemas.

Por ultimo, para finalizar esta entrada, me quiero despedir con lo siguiente:

public class BienvenidoNuevoIngeniero {
  public static void main(String[] args) {
    System.out.println("Hola mundo");
    System.out.println("Estudia Ingenieria de sistemas");
    System.out.println("Datobyte te desea lo mejor");
  }
}


viernes, 10 de junio de 2016

Atributos esenciales del buen software

En esta nueva entrada de DatoByte les quiero enseñar acerca de los Atributos esenciales del buen software

El software debe entregar la funcionalidad y el funcionamiento requeridos por el usuario al él mismo, y debe ser mantenible, confiable y aceptable.


Mantenimiento 
El software debe escribirse de tal forma que pueda evolucionar para satisfacer las necesidades cambiantes de los clientes. Éste es un atributo crítico porque el cambio del software es un requerimiento inevitable de un entorno empresarial variable.

Confiabilidad y seguridad 
La confiabilidad del software incluye un rango de características que abarcan fiabilidad, seguridad y protección. El software confiable no tiene que causar daño físico ni económico, en caso de falla del sistema. Los usuarios malintencionados no deben tener posibilidad de acceder al sistema o dañarlo.

Eficiencia 
El software no tiene que desperdiciar los recursos del sistema, como la memoria y los ciclos del procesador. Por lo tanto, la eficiencia incluye capacidad de respuesta, tiempo de procesamiento, utilización de memoria, etcétera.

Aceptabilidad 
El software debe ser aceptable al tipo de usuarios para quienes se diseña. Esto significa que necesita ser comprensible, utilizable y compatible con otros sistemas que ellos usan.



Básicamente estos 4 aspectos pueden ser considerados como indicadores al momento de calificar un software.