programas

67 entradas

Prolog enlazando PHP

Prolog: enlazando un sistema experto con PHP

Hoy traigo cómo enlazar proyectos web en PHP con partes hechas en Prolog. No he encontrado casi información en Internet, así que aquí estoy compartiendo algo sobre esto. Este es un simple HOWTO para tratar las respuestas, o muchos de los casos que puedes tener en ataques a Prolog desde PHP. La idea general es que tenemos uno o varios programas en ficheros .pl. Estos ficheros a su vez se pueden autoincluir unos en otros con sentencias del estilo include o import como en otros lenguajes. Además, también estos ficheros .pl se pueden generar automáticamente desde otras fuentes de datos. Esta dinamicidad de la parte programada en Prolog es una de las cosas más interesantes. Es decir, los programas en Prolog pueden cambiarse a si mismos, tema muy interesante en Inteligencia Artificial. Esto es, los programas en Prolog pueden aprender sobre la marcha, además de que, la base de conocimiento puede nutrirse de muchos datos externos también sobre la marcha.

Prolog hola mundo

Prolog: hola mundo, IA y la programación lógica

Un lenguaje muy de moda en Inteligencia Artificial es Prolog. Se trata de un lenguaje de programación lógica, de ahí su nombre, que viene de PROgramación LOGica. En programación lógica dejamos de pensar tanto en el cómo se hace, para pensar más en qué es lo que tenemos que hacer. Es decir, una vez que cambias el chip es muy intuitivo leerlo, y comprender lo que expresan sus sentencias. Se utiliza mucho para crear sistemas expertos o sistemas basados en conocimiento. Se trata de un lenguaje puente, o más bien un lenguaje al que se suele recurrir desde otros lenguajes para resolver ciertos problemas. De esta forma, se programan partes de los programas en otros lenguajes más conocidos, mientras que se lanzan estos programas lógicos para resolver cierto tipo de tareas.

Symfony tutorial 3 Doctrine

Symfony: tutorial 3: los modelos y las entidades, almacenando datos en BDs

Recorriendo todas las funcionalidades de Symfony Flex (Symfony 4), traigo de nuevo otro HOWTO para trabajar con el guardado de los datos. Symfony basa el guardado de los datos, la persistencia de los datos, en Doctrine. Es decir, tenemos un módulo llamado Doctrine, mejor dicho varios, que te independizan de la base de datos añadiendo una capa intermedia entre los controladores, plantillas, servicios.. de tu aplicación Symfony y la base de datos. En esta capa intermedia se definen lo que se llaman entidades, y Doctrine se encarga de hacer todo. Siguiendo este tutorial veremos cómo en poco tiempo podemos arrancar proyectos que antes podíamos tardar días o semanas, ahora en pocas horas. Es decir, en muy pocos comandos de consola, y con muy poco esfuerzo, podemos montar grandes estructuras en bases de datos, o editarlas. Y nos podemos casi olvidar de hacer muchas consultas directamente a la Base de Datos. Un poco de teoría Symfony es un framework que sigue el modelo MVC que significa Modelo-Vista-Controlador. En un post anterior hemos visto cómo trabajar con los controladores y un poco de las vistas, que también tienen mucho juego. Ahora vamos a ver el tema de los modelos, sinónimo de entidades. […]

Programming programando

Del código fuente a la ejecución de los programas

Ya tenemos el código fuente, ¿y ahora? ¿cuál es la magia que hace posible que un código fuente se ejecute? Todo programa necesita un traductor, que compile o interprete el código fuente para que pueda ser ejecutado. Es una primera diferencia que puede marcarse entre los lenguajes de programación, ya que un lenguaje puede ser interpretado, compilado, o incluso ambas cosas. Además, la ejecución puede ser dependiente de la máquina, o ejecutarse en una máquina virtual, que te independiza de la máquina. Por ejemplo los lenguajes funcionales o lógicos suelen usarse primeramente interpretados, como Prolog o Haskell mientras se desarrolla, pero también tenemos disponible un compilador para mejorar su eficiencia. PHP es interpretado, aunque ha habido compiladores para mejorar su eficiencia de ejecución. Cabe destacar como curiosidad la Hip Hop Virtual Machine de Facebook que crearon para agilizar PHP, que precisamente compila los ficheros fuente a un código objeto intermedio más rápido de ejecutar. Javascript, Typescript, Ruby, también son interpretados. C, C++, VB, C# son compilados, es decir, se necesita compilar el código fuente a códigos objeto, estos códigos objeto a su vez se linkan, se retraducen, para ejecutarse finalmente en la máquina.

Symfony Flex comandos

Symfony: tutorial 2: los comandos de consola

Una respuesta a porqué Symfony es tan productivo son los comandos de consola. Si alguien dice que usar Symfony es reinventar la rueda, que siempre es mejor modificar un CMS.. es que no sabe de lo que está hablando, y lo que se está perdiendo. Con simples comandos podemos crear un proyecto nuevo, añadir nuevos componentes, lanzar un servidor de pruebas, chequear las URLs, crear entidades que vamos a guardar en base de datos, probar el envío de emails. También podemos modificar las tablas de datos, añadir nuevos elementos, editar los existentes, actualizar la base de datos, preparar nuevos elementos para almacenar, generar pantallas de listado de datos, ediciones de datos, borrados o creaciones. Generamos formularios automáticamente, con recepción de sus datos y guardado de dichos formularios en bases de datos. Podemos importar una base de datos de otro proyecto, generando todo el código fuente de una aplicación web que consulte los datos de dicha BD en apenas un rato. Podemos crear controladores, estructurando todas las zonas de la web, con sus plantillas, rutas, y URLs en poco tiempo. Y mucho más.. No tenemos que gastar tiempo en tediosas tareas repetitivas de construcción, y podremos centrarnos en lo especial de […]

Código fuente

Características de los lenguajes de programación

No es fácil elegir un lenguaje de programación para cada proyecto. Dependiendo de las características del proyecto, entorno, etc.. deberemos de elegir bien. Será más complejo aún, si además convivirán varios sistemas informáticos interconectados, comunicándose entre sí. De la misma forma, será más complejo si en el proyecto tenemos elementos programados a bajo y alto nivel. También se añade complejidad si los entornos de ejecución son varios: escritorio, web, móvil.. o varios sistemas operativos. Es importante tener claras las características, y conocer, por lo menos en líneas generales, la mayor cantidad de lenguajes. Así elegiremos bien, y luego profundizaremos más y más a lo largo del proyecto, o subproyecto. Una mala decisión inicial del lenguaje, framework o plataforma, acarreará grandes problemas a la larga. Puede desembocar en grandes gastos y esfuerzos que se podrían haber evitado, o en una merma de la calidad final del proyecto.

Websites

PHP: usando CURL para visitar servidores web

Continuando con el post anterior, traigo otro code-kata, o HOWTO, para hacer ping a una web, para empezar. Digo para empezar, porque esto no es más que el comienzo de una serie de acciones muy potentes sobre servidores web. Así podemos interactuar con un sitio web automática y remotamente. Este es uno de los mecanismos básicos de comunicación entre sistemas informáticos. Es decir, esto se puede reutilizar para que una web se comunique con otra web, con otro sistema informático, leyendo información o enviándola. Para esto vamos a usar el gran CURL, que va muy bien para trabajar con el protocolo de las webs. Aunque como reza en su web, es compatible con muchos otros protocolos: DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, Telnet and TFTP. curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, HTTP/2, cookies, user+password authentication (Basic, Plain, Digest, CRAM-MD5, NTLM, Negotiate and Kerberos), file transfer resume, proxy tunneling and more.. Esta forma de hacer un simple ping web se puede escalar todo lo que quieras. Es decir, de esta forma es como trabajan internamente los módulos […]

Herramientas para desarrollar en Symfony

Symfony: tutorial 0: preparando el espacio de trabajo

Como buen apasionado del desarrollo de aplicaciones web, estaba espectante esperando la nueva versión de Symfony 4. Ahora tenemos una nueva versión orientada a microservicios, en la que te vas construyendo tu propio framework poco a poco, con los componentes que necesites. Esto quiere decir que no te instalas el framework completo cuando empiezas a trabajar, sino que poco a poco vas añadiendo los componentes. Gracias a Composer vas acoplando los componentes, ya sean del propio Symfony, o sean componentes externos al framework. Esto hace a su vez que la curva de aprendizaje no sea tan pronunciada para los novatos. Lo poco que he podido curiosear me ha encantado. Estoy como un niño con juguete nuevo. Tanto así, que he decidido hacer una serie de tutoriales para principiantes, y no tan principiantes. Herramientas Comencemos por preparar el entorno de trabajo. Voy a citar las herramientas que uso, y por supuesto también recomiendo para estos trabajos. No puedo extenderme mucho porque si no las conoces, deberás de invertir tiempo para instarlártelas. Si ya tienes las tuyas, y se adapatan bien a este tipo de desarrollos, úsalas: Sistema operativo: recomiendo GNU/Linux (Ubuntu, Ubuntu Mate o derivado de Debian), es lo que uso […]

Internet Firewall

GNU/Linux: bloqueando visitas por país

Siguiendo con el post anterior de bloqueo de IPs usando el cortafuegos integrado en el núcleo de Linux, llegamos a la necesidad de por ejemplo bloquear a cierto país. Hay negocios, o páginas web, que han recibido quizás ataques automáticos desde IPs que residen en Rusia, Rumanía o China. Si cerramos dicha entrada al servidor nos evitaríamos muchos problemas. Tengamos en cuenta que si nuestro servidor trabaja con servidores que residen en estos países, podremos encontrarnos con conexiones que no se hacen, no dan respuesta al conectar, denegación de conexión.. Es complicado si nos olvidamos de que hemos bloqueado, por ejemplo, a Rusia. Si luego resulta que contratamos un servicio ruso, cuyos servidores residen en Rusia, estaremos contratando un servicio que no nos va a poder conectar. Obteniendo IPs registradas por país El primera paso es tener un listado de IPs del país en concreto que queremos bloquear. Para esto tenemos varias páginas que nos los sirven sin cargo. Por ejemplo: http://www.ip2location.com/free/visitor-blocker https://www.countryipblocks.net/country_selection.php https://www.nirsoft.net/countryip/ http://www.ipdeny.com/ipblocks/ .. Mejor coge los rangos de IPs del país que quieras bloquear usando el formato en CIDR. Es decir de la forma red/máscara, son así: 2.136.0.0/13 2.152.0.0/14 Tienes entonces que guardarte este listado de CIDRs […]

Internet Firewall

GNU/Linux: bloqueando visitas por IPs

Cuando tenemos un servidor visible desde Internet, desde cualquier lugar del mundo, recibimos visitas constantemente. Esperamos que estas visitas siempre sean las deseadas, pero quizá no lo son. No sólo hay personas y ordenadores con buenas intenciones conectados a Internet. También puede incluso haber sistemas informáticos mal configurados, que involuntariamente, ocasionen problemas a tus sistemas informáticos. Por ejemplo, nos podemos encontrar con casos como estos: Una araña de un buscador, que escanea los contenidos de tu web con muy buenas intenciones, pero se engancha y no deja de escanearte llegando a bloquearte. Registro de usuarios ficticios, a modo de SPAM. Comentarios de SPAM con contenidos que enlazan a otras webs. Una web que se copia tus contenidos tratando de posicionarse en buscadores antes que tú. Y un largo etcétera. Debemos de tener siempre nuestros servidores lo más actualizados posibles. Y sólo permitir la escucha en los puertos totalmente necesarios. Además de que sólo debemos de abrir los puertos para las IPs, o países que sean extrictamente necesarios. Los escaneos automáticos en busca de vulnerabilidades en nuestros servidores va a ser constante, dalo por hecho. Si no lo haces, te arrepentirás más pronto que tarde, cuando la catástrofe haya acontecido. Así […]

PrEDA algoritmos genericos 16x9

PrEDA: esquemas de programación genéricos avanzados

Otro HOWTO, code-kata, a traer vengo hoy.. XDD vengo con este post cargado de esquemas algorítmicos para programar. Estos esquemas algorítmicos son los que nos ayudan a programar las mejores soluciones. Así conseguimos llegar a las soluciones que a veces tenemos que encontrar, pero quizá no vemos en un principio cómo. Quizá el problema lo tenemos en que tarda mucho, o necesitamos demasiado espacio de almacenamiento. La mayoría de las veces, podemos recorrer todas las posibles soluciones a lo bruto hasta encontrar la solución. Es decir, muchos problemas se pueden resolver de muchas formas, pero no todas las formas de resolver el mismo problema son la mejor forma. Sólo hay una mejor forma para cada problema. Es decir, algunas soluciones son eficaces porque simplemente encuentran la solución, pero quizás no son la forma más eficiente. Incluso podemos tener problemas, que por no resolverlos eficientemente, se convierten en imposibles de resolver. Se trata de estos esquemas: Voraz. Divide y vencerás. Programación dinámica. Vuelta atrás. Ramificación y poda. Vamos al grano hermano.. Esquema voraz Este esquema o estrategia se utiliza para optimizar el funcionamiento cuando tenemos una única solución, y además, podemos establecer un algoritmo de selección de los elementos que forman […]

Magento ventas por mes y método de pago

Magento 1: cómo sacar las ventas por método de pago

Hoy traigo otro code-kata, esta vez para Magento y hecho en PHP. Se trata de un simple script que se lanza en línea de comandos. Con este script obtendremos primero todos los métodos de pago que se han usado al hacer los pedidos. Después, haremos un listado, por método de pago, y entre ciertas fechas, del monto de pedidos completados por método de pago. Es decir, supongamos que queremos saber cómo han ido las ventas con el método de pago por tarjeta de crédito. O quizá queremos saber si la financiación es un método de pago que funciona bien. O quizá simplemente queremos tener el total de ventas entre fechas. Pues todo esto es bastante sencillo sabiendo donde está cada cosa. Métodos de pago usados en pedidos A saber, los pedidos en Magento 1 guardan parte de sus datos principales en la tabla sales_flat_order. La información del método de pago utilizado en cada pedido se guarda en la tabla sales_flat_order_payment. Entonces, sacando la columna method de la tabla sales_flat_order_payment tendremos todos los métodos de pago utilizados en los pedidos. Esto en lenguaje SQL queda así: SELECT distinct(sfop.method) FROM sales_flat_order_payment sfop ORDER BY sfop.method ASC; Ventas de los pedidos enviados El […]