domingo, 25 de febrero de 2018

Conquista Castilla y León Parte V: publicamos en Beta


¡¡¡Hemos vuelto!!!, ahora sí que sí.

Pero os aviso, que todo esta igual que estaba en el 2015.

Todas las mejoras que os comenté, irán apareciendo sobre la marcha (portada nueva, selección de nombre,...).

Cualquier problema que detectéis, por favor comentármelo para que lo arregle en cuanto pueda.

Para acceder:

Si no os funciona (cache del navegador) probar este otro:

martes, 20 de febrero de 2018

Conquista Castilla y León Parte IV

Esto va más lento de lo que a mi me gustaría, pero es que no puedo sacar más tiempo...

Lo que sí tengo ya es la imagen de la futura página principal:


La he encontrado es esta URL: http://monodomo.com/medieval-battle-wallpapers-1080p/medieval-battle-wallpapers-1080p-for-free-wallpaper/ 

¿A que mola?

Otra cosilla: ya tenemos el protocolo seguro habilitado, la última vez todo iba por "http". Podéis verificarlo en: https://conquista.tecnificados.com

Si este fin de semana saco un rato (>=2 horas) salimos.



domingo, 18 de febrero de 2018

Tomcat en puerto 80 Linux



Otro de los pasos para instalar el servidor del juego es instalar Tomcat. 

Por defecto este servidor utiliza el puerto 8080, pero yo lo voy a cambiar para que utilice el 80, y así evitar usar el puerto en la URL. (En realidad será el 443, pero eso lo dejo para otro artículo).

En entorno Windows es bastante fácil cambiar el puerto, editas el fichero de configuración "server.xml" y reinicias el servicio.

En Linux (Ubuntu 16 LTS en mi caso), hay que dar algunos pasos más. Esto se debe a que por defecto Linux protege los puertos por debajo del número 1000.

Estos son los pasos para cambiar el puerto (suponemos que la versión es Tomcat 8):

  • Prerrequisito: Tomcat instalado (apt-get install tomcat8)
  • Editamos el fichero "/etc/default/tomcat8" dejamos la propiedad AUTHBIND así:
    •  AUTHBIND=yes
  • Lanzamos los siguientes comandos:
    • sudo touch /etc/authbind/byport/80
    • sudo chmod 500 /etc/authbind/byport/80
    • sudo chown tomcat8 /etc/authbind/byport/80
  • Editamos el fichero "server.xml" y asignamos como puerto principal el 80.
  • Reiniciamos Tomcat
Y se acabó, con esto ya deberíamos tener a nuestro servidor corriendo en el puerto 80.

En la cabecera está Tom, el gato del programador que empezó con este contenedor de servlets.



domingo, 11 de febrero de 2018

Conquista Castilla y León 2018: parte III


Yo pensaba subir hoy el juego, y empezar a probarlo en modo BETA, pero no ha podido ser.

Solicité el alta del archivo de protección de datos la semana pasada, y de momento la solicitud sigue "en curso". Para no incumplir ninguna norma o ley, prefiero esperar a tenerlo.

Os voy a contar mis objetivos a corto plazo:
  1. Subir el juego tal cual estaba en 2015: sólo he actualizado los componentes y librerías para que funcione.
  2. Cambiar la portada: estoy buscado imágenes para utilizarla en la página principal, he encontrado varias que me gustan. He consultado a los autores para ver si me dejan utilizarlas, pero de momento no he recibido contestación. Estas son las que más me han gustado: https://www.deviantart.com/art/Famous-knight-chargiiiing-187771549  https://www.saatchiart.com/art/New-Media-Richard-And-Saladin-Face-Off/375727/188426/view
  3. También quiero que los nombres los usuarios no sean los de la cuenta de "Google". Mi idea es tener una serie de controles con los que componer tu nombre y apellidos. El contenido procederá de personajes de la historia de España. He estado haciendo una pequeña recopilación y de momento tengo estos:
    • Álvaro de Bazán y Guzmán
    • Agustina Raimunda María Zaragoza y Doménech
    • Alejandro Farnesio
    • Alonso de Contreras
    • Anibal Barca
    • Bernardo de Gálvez
    • Blas de Lezo y Olavarrieta
    • Catalina de Erauso
    • Cosme Damián Churruca
    • Don Pelayo
    • Federico Gravina
    • Fernando Álvarez de Toledo y Pimentel
    • Francisco Gómez de Quevedo Villegas y Santibáñez Cevallos
    • Francisco Javier Castaños
    • Gonzalo Fernández de Córdoba y Enríquez de Aguilar
    • Gonzalo Guerrero de Palos
    • Hernando de Soto
    • Inés de Suárez
    • Juan Martín Díez
    • Juana García de Arintero
    • Luis Daoiz y Torres
    • María Mayor Fernández de Cámara y Pita
    • Miguel de Cervantes Saavedra
    • Pedro Velarde y Santillán
    • Rodrigo Díaz de Vivar
Si queréis que añada algún nombre más, sólo tenéis que decirlo.

Si conocéis una imagen que también pueda encajar, comentármelo también.

Y poco más que contar, estoy deseando subirlo.

jueves, 8 de febrero de 2018

¿Cómo leer Twitter de forma cronológica?


Llevo relativamente poco tiempo con Twitter (@jctecno y @tecnificados) y una de las cosas que menos me gustan es que cuando leo los "tweets" de la gente que sigo, no lo hago de forma ordenada en el tiempo: de repente leo uno de hace dos horas y el siguiente es de ayer.

Hoy buscando he encontrado cómo cambiar el criterio de ordenación para sea cronológico. Estos son los pasos a seguir.

Nos vamos a las opciones de nuestra cuenta de Twitter (sí tenemos más de una hay que repetir estos pasos por cada cuenta), y nos vamos a "Configuración y privacidad":



Después pulsamos sobre "Preferencias relativas al contenido":


Y para terminar desmarcamos la opción "Mostrarme los mejores Tweets primero", como aparece en la imagen.


Y con esto ya estaría configurado como queremos.

Yo lo he cambiado la configuración hace unas horas, y aún sigue dando saltos en el tiempo. Espero que mañana empiece a ser ordenado.

Espero que os sea tan útil como a mí.

domingo, 4 de febrero de 2018

Notificación de ficheros L.O.P.D.

Acabo de conseguir dar de alta un fichero para L.O.P.D., y así poder desplegar de nuevo "Conquista Castilla y León".

La verdad es que he tardado menos de lo que pensaba, pero aún así no ha sido trivial.

Os voy a contar los pasos que he seguido en el orden correcto, por si alguno lo necesita.

Navegador con el que lo he conseguido: "Chrome". Mi primera opción ha sido "Firefox", pero no he tenido suerte, también lo he probado con "Internet Explorer", y nada de nada.

Paso 1: instalar mi certificado digital de la FNMT en el almacén de certificados de Windows o en el de Chrome (que es el mismo).





Esta herramienta busca todos los certificados instalados en los distintos navegadores y los utiliza para realizar un proceso de firma. En mi caso, del almacen de Firefox, ha pasado olimpicamente.

Paso 3: acceder al "Servicio electrónico NOTA", cumplimentar el formulario (https://sedeagpd.gob.es/sede-electronica-web/vistas/formNOTA/nt01Inicio.jsf) y por último firmarlo.

Como os he dicho, con "Chrome" se hace del tirón.


martes, 30 de enero de 2018

Un par de cursos interesantes en MiríadaX y EDX



Ya os hemos hablado alguna vez de los cursos en MiríadaX, para el que no lo sepa es una plataforma online donde se imparten cursos de formación de manera gratuita.

Mañana empieza "Gestión de proyectos Software con Git y GitHub", el cual es una pequeña introducción para una serie de cursos cuyo núcleo es Node.js

Yo me he apuntado sin dudarlo, aunque trabajo a diario con Git, seguro que aprendo algo nuevo.

También he estado buscando un curso de Android que hice hace unos años. Lo he encontrado EDX, otra plataforma de formación online. Lo quiero volver a hacer para refrescar conceptos y tantear Android Studio, en la edición que yo hice aún se usaba "Eclipse".

El curso es "Android: introducción a la programación", no os dejéis engañar por el título, es bastante completo.

A ver cómo me las apaño para intercalar tanta formación con el juego.

domingo, 28 de enero de 2018

Conquista Castilla y León 2018: parte II


Pues después de un par de horas:

  • Ya tenemos máquina virtual en Azure
  • Hemos instalado Java (con artículo en el blog)
  • Hemos instalado Tomcat (redirigiendo su puerto al 80)
  • Hemos desplegado la web del mantenimiento (le he puesto un mes, pero seguro que es menos).
  • Hemos creado el DNS para: conquista.tecnificados.com

Ya me he recuperado un poco y mi cabeza ya empieza a pensar en novedades y mejoras de desarrollo rápido.

Lo mas duro es registrar el fichero para el tema de la LOPD (un par de horas pegándome con el certificado digital y configurándolo correctamente en el navegador).

Después de eso ya solo quedan tareas de desarrollo, instalación y despliegue.

Ya falta menos: ¡¡¡conquista.tecnificados.com lives!!!








Instalando Java 8 de Oracle en linux (Ubuntu Server 16)


Ahora mismo estoy instalando todo lo necesario en el servidor de Conquista Castilla y León, y para empezar, lo primero que hago es instalar JAVA.

El sistema operativo va a ser un Ubuntu Server 16 LTS.

Yo quiero instalar "Oracle Java 8". Por defecto en los repositorios de Ubuntu no esta disponible esta versión, para instalarla tenemos que ejecutar estos comandos:

  1. sudo apt-get update : actualizamos repositorios
  2. sudo add-apt-repository ppa:webupd8team/java: añadimos un nuevo repositorio donde se encuentra la versión de Java que nos interesa
  3. sudo apt-get update : actualizamos repostitorios (ahora con el software del nuevo añadido)
  4. sudo apt-get install oracle-java8-installer: instalamos java
Podemos verificarlo con el comando: "java -version"

Por cierto, la imagen de arriba es "Duke" que como muchos sabéis es la mascota de Java.


lunes, 22 de enero de 2018

Conquista Castilla y León 2018: parte I


 Esta semana no ha sido nada productiva, he pillado una especie de gripe exprés y no he podido dedicar casi nada de tiempo al juego. Os resumo brevemente lo que he podido hacer:


  • He conseguido restaurar la BBDD:





  • Y después de unas cuantas horas la aplicación ha vuelto a la vida con la última versión de MongoDB, y del Framework (SPRING).




Le tengo que dar una vuelta completa, pero la cosa tiene buena pinta.

Ahora tengo que ver si necesito firmar por el fichero de protección de datos, conseguir servidor (creo que me voy a decantar por AZURE) y hacer los despliegues.

Os iré contando.

domingo, 14 de enero de 2018

Re-conquistemos



Llevo tiempo pensando el retomar el proyecto "Conquista Castilla y León", pero sobre todo por crisis de tiempo, no me he puesto con ello.

Ahora no es que es que tenga muchísimo más tiempo, pero veo que necesito seguir investigando tecnologías nuevas, lanzar pequeños proyectos o ideas  que quiero programar en cinco minutos.

Para conseguir todo esto, necesito tener un servidor y un dominio.

Lo segundo ya lo tengo, ahora iremos a por el servidor.

Metas a conseguir:

  • Relanzar "Consquista Castilla y León"
    • Contratar el servidor
    • L.O.P.D. (qué pereza me da esto)
    • Desplegar todo en desarrollo
    • Desplegar todo en producción 
  • Mejorar el juego
Ya os iré contando.

PD: he conseguido @tecnificados de Twitter, así que sabéis como contactar conmigo.

martes, 4 de julio de 2017

SOLID


Hoy estábamos hablando de conocimientos básicos de programación, y han salido los principios SOLID (que no tienen nada que ver con "METAL GEAR SOLID", pero me hace gracia).

Hace años me lo sabía de memoria, pero con el paso del tiempo se me ha quedado como una ligera reminiscencia.

Voy a aprovechar y escribir un resumen sobre estos cinco principios básicos.

SOLID es un acrónimo (Robert C.Martin) que establece los cinco principios básicos de la programación orientada a objetos y diseño. Tiene bastante relación con los patrones de diseño, y su objetivo principal es la alta cohesió-n y el bajo acoplamiento.

Cada letra tiene el siguiente significado:
  • S - Single responsibility
  • O - Open/Closed
  • L - Liskov substitution
  • I - Interface segregation
  • D - Dependency inversion

Single responsibility

Una clase para un fin simple y sencillo. Nada de meter métodos útiles, pero que no tienen sentido en esta clase.

Open/Closed

Crear clases extensibles sin necesidad de entrar al código fuente a modificarlo. El diseño debe ser abierto para poderse extender pero cerrado para poderse modificar.

Esto lo conseguimos a través de herencia y reimplementando métodos.

Sustitucion Liskov

Hay que crear todas las clases hijas para que también puedan ser tratadas como la propia clase padre. Cuando extendemos clases debemos asegurarnos de no reimplementar métodos que hagan que los métodos de la clase padre no funcionasen si se tratasen como un objeto de esa clase padre.

Interface segregation

Los interfaces deben ser específicos a una finalidad concreta. Es mejor tener muchos interfaces con  pocos métodos que tener uno solo con muchos métodos.

Dependency inversion
Hay que evitar el acoplamiento a toda costa. ¿Cómo? a través de la abstracción, para conseguir que una clase interactúe con otras clases sin que las conozca directamente.

Existen diferentes patrones como la inyección de dependencias que nos permiten invertir el control.

 Y hasta aquí mi pequeño resumen.

Un abrazo.

lunes, 10 de octubre de 2016

Microsoft Solver Foundation

Hace poco tuve que programar unos gráficos, cuya generación se basaba en unos datos de entrada a los que posteriormente se les aplicaba una resolución de un modelo matemático.

El caso es que para la resolución de dicho modelo matemático se utilizó Microsoft Solver Foundation (https://msdn.microsoft.com/en-us/library/ff524509(v=vs.93).aspx), que tal y como describe Microsoft, "es un conjunto de herramientas de desarrollo para simulación matemática, optimización y modelado que se ejecuta en un entorno manejado y el CLR. Así, se puede utilizar cualquier lenguaje CLR, incluyendo Visual C#, Visual Basic, Visual C++, Visual F# e IronPython."

Descarga e instalación

Para descargar e instalar Microsoft Solver, lo mejor es dirigirse al enlace:


Aquí se puede elegir la versión más conveniente (32 ó 64 bit), y realizar la instalación una vez obtenido el ejecutable correspondiente.

Este ejecutable instala:
  1. En el directorio “C:\Program Files\Microsoft Solver Foundation\3.0.2.10889” se encuentran varios binarios y un directorio "Documents" donde se encuentra mucha documentación interesante.
  2. En el directorio “C:\Users\nombre.usuario\Documents\Microsoft Solver Foundation” instala varios ejemplos, tanto en Excel como resueltos en varios lenguajes de programación.
  3. Registra en la GAC la librería "Microsoft.Solver.Foundation.dll", que es la que se puede incluir en nuestros proyectos .Net para la optimización y modelización.
También es muy interesante que esta instalación provee de un Add-In para Excel, que ayuda a la modelización en esta herramienta, y permite la posterior exportación del modelo definido en Excel a XML o a C#.

En este artículo se va a profundizar primero en el modelado utilizando el Add-In para Excel y su posterior exportación y uso en un proyecto C#.

Add-In para Excel

Si se realiza la instalación de Microsoft Solver, incluye un Add-In para Excel. Para que este Add-In funcione correctamente, es necesario cumplir los siguientes prerrequisitos mínimos de software instalado en el sistema:
  1. .NET Framework 4.
  2. Excel 2007 or Excel 2010.
  3. Microsoft Office primary interop assemblies. 
  4. Visual Studio 2010 Tools for Office Runtime o Visual Studio Tools for Office system (version 3.0 Runtime).
Si está correctamente instalado, en la sección de Complementos de Excel se podrá ver como un complemento más:


Además hay una nueva barra de herramientas, "Solver Foundation", con todas las opciones disponibles para este complemento:


Pulsando sobre el botón "Model" , además, se mostrará/ocultará el Panel de Modelado, herramienta fundamental para definir el modelo que resolverá Microsoft Solver:


La mejor forma de ver cómo utilizar este Add-In es pasar a la acción, ayudándonos de la documentación disponible, así que ¡¡allá vamos!!

Problema a resolver

En una pastelería se hacen dos tipos de tartas: Vienesa y Real. Cada tarta Vienesa necesita un cuarto de relleno por cada Kg. de bizcocho y produce un beneficio de 250 Pts, mientras que una tarta Real necesita medio Kg. de relleno por cada Kg. de bizcocho y produce 400 Ptas. de beneficio. En la pastelería se pueden hacer diariamente hasta 150 Kg. de bizcocho y 50 Kg. de relleno, aunque por problemas de maquinaria no pueden hacer más de 125 tartas de cada tipo. ¿Cuántas tartas Vienesas y cuántas Reales deben vender al día para que sea máximo el beneficio?

Lo primero de todo es plasmar en una tabla la información recibida:


Para Microsoft Solver es importante definir una columna "Id" para indizar los datos y que pueda identificar posteriormente cada fila mediante este índice.

Pasos para definir el modelo

1) Lo primero a definir es un Conjunto de Datos, en la pestaña "Sets":

En el caso del problema planteado, el dominio es "Nonnegative Real", es decir, números reales no negativos.

2) Parámetros. En la pestaña "Parameters" se definen los parámetros de entrada del modelo. Para el enunciado dado, se van a definir los parámetros Relleno y Beneficio:
2.1) Se nombra el parámetro y se elige su dominio.

2.2) Ahora se realiza el Binding, enlazado de datos de entrada. Pulsando sobre el botón "..." se accede al "Binding Editor", que recuerda mucho al editor de fórmulas del propio Excel, o a la selección de datos cuando se define un gráfico en Excel. Se elige toda la tabla del modelo como Rango, como Conjunto el que se ha definido en el paso 2.1), como "Column Header" la columna índice "Id" y como "Value Field" la columna del parámetro definido, en este caso "Relleno":

Se hace lo mismo con todos los parámetros necesarios:

3) Variables de decisión. Es el elemento desconocido en el problema de optimización, en este caso la "Cantidad". Todo esto se define en la pestaña "Decisions", de la misma forma que se han introducido los parámetros en el apartado 2):

Hay problemas en los que las variables de decisión pueden definir un valor inicial que ayude a reducir el tiempo que el algoritmo tarda en resolver el modelo, si fuera así se establecería en "Initial Value". 


4) Restricciones. En la pestaña "Constraints" se definirán las restricciones del Modelo. Para el enunciado dado se tiene:

4.1) La suma de los bizcochos no puede superar las 150 unidades.
4.2) La suma del relleno no puede superar las 50 unidades.
4.3) No se pueden hacer más de 125 tartas de cada tipo.
4.4) Las cantidades deben ser números enteros positivos.

Para definir las restricciones, y el posterior punto 5), Goals, es interesante tener conocimientos sobre  la sintaxis OML (Optimization Modeling Language). Al respecto, es conveniente consultar:

- Al instalar Microsoft Solver Foundation, en el directorio “C:\Program Files\Microsoft Solver Foundation\3.0.2.10889\Documents” hay un PDF "MSF-OMLSyntax.pdf" que detalla todas las funciones y sintaxis definidas para este lenguaje.
- La documentación on-line de Microsoft: https://msdn.microsoft.com/en-us/library/ff524507(v=vs.93).aspx

De esta forma, por ejemplo, para definir la restricción 4.1), se haría de la siguiente forma:

Y así con el resto de las restricciones. Hay que tener en cuenta que mediante las flechas estas restricciones se pueden ordenar y así el modelo se resolverá según el orden definido para las restricciones:

5) Goals. La función objetivo es maximizar el beneficio, y se define de la misma forma que las restricciones:

Modelo definido y resolución

El modelo ya está definido.

La pestaña "Directives" permite, si se considera necesario, definir directivas en función del algoritmo de resolución empleado:

La pestaña "Model" permite ver este modelo en lenguaje OML (Optimization Modeling Language), permitiendo la edición manual, aunque si no se tiene mucho conocimiento de este lenguaje es mejor dejarlo en Automático:

El botón "Check" de la barra de herramientas "Solver Foundation" permite verificar si el modelo recién definido es válido, esto se ve en la pestaña "Log":

Una vez verificado, el botón "Solve" realiza la resolución del modelo.


Microsoft Solver añade una pestaña al Excel donde se ven los resultados de la resolución del Modelo. También se ve en la pestaña de Log los pasos seguidos para su resolución. Además, en la hoja Excel donde se define el Modelo, ahora se ven las variables de decisión rellenas con la solución encontrada:


Si se establece un valor inicial para la/s variable/s de decisión (en el ejemplo sería  Cantidad Inicial), es probable que se encuentren otras soluciones válidas para el modelo:


Y de esta forma, el Add-In para Excel de Microsoft Solver muestra su potencia a la hora de resolver modelos matemáticos.

Si fuera necesario, el modelo obtenido se puede importar o exportar a un fichero de extensión .oml, mediante los botones "Import" y "Export" de la barra de herramientas de Solver Foundation.

Obtención del Modelo en C#

El Add-In para Excel de Microsoft Solver, permite, utilizando el botón, exportar el modelo obtenido a un fichero .cs y a un fichero .xml:


Si se edita el fichero .cs, se puede ver que se tiene la definición y resolución del modelo en C#, utilizando las librerías de Microsoft Solver Foundation:


De esta forma, se puede llevar fácilmente al proyecto .Net en el que se quiera utilizar. A mí me ha pasado que normalmente he tenido que hacer algunas adaptaciones, pero como primer paso ahorra mucho trabajo, sobre todo en la definición de Constraints (variables de restricción) y el Goal (función objetivo).

Adjunto un ejemplo en proyecto de Consola .Net en el que se puede ver tanto el Modelo definido en este artículo como su resolución. También adjunto el Excel que se ha visto con el modelo definido.


Saludos y ¡hasta la próxima!