Showing posts with label web. Show all posts
Showing posts with label web. Show all posts

Sunday, August 8, 2021

Apuntes varios de GraphQL




 What is GraphQL? Is a query language and it’s focused on data manipulation of APIs, like an abstraction layer that lets us have many sources of data (Relational Database, APIs, documents databases, key-values databases) attached to one entrypoint, that let us filter fields from the client and take only the attributes/columns/data that we need and get in the response only what we defined as needed data.

 

Why use GraphQL in this process? because it is designed to make APIs fast, flexible, and developer-friendly. It can even be deployed within an integrated development environment (IDE) known as GraphiQL. As an alternative to REST, GraphQL lets developers construct requests that pull data from multiple data sources in a single API call. GraphQL gives API maintainers the flexibility to add or deprecate fields without impacting existing queries, that’s a plus to avoid errors from versioned API and have a lower impact on production changes.


Things to take into account when we iterate over a product API:


  • Schema first design: The first thing you must do is agree on a schema with the team who will be building the backend. This will save a lot of refactoring later on, and if all goes according to plan you will be able to swap out the MockedProvider for the real one and your application should work seamlessly.

  • Design and implement with the user in mind.

  • Remember API retirement and change Management.


Common GraphQL terms.

Graphql is a strongly typed language[1] this means that Graphql defines various data  types to define the schema in this way is a fixed contract between client and server, so we communicate in the same way with each request, and allows us to talk about GraphQL schemas in a language-agnostic way (we don’t care if we are using javaScript, java or golang).


The most basic components of a GraphQL schema are object types, which just represent a kind of object you can fetch from your service, and what fields it has.


Some of Type System’s schema are:

  • Object Type

  • Fields

  • Query

  • Mutations

  • Array

  • List

  • And a set of default scalar types out of the box: Int (a signed 32 bits), float (A signed double precision), String (UTF-8 character sequence), Boolean (true or false), ID (The ID scalar type represents a unique identifier).


After we did a resume about the type system of Graphql, we could use several tools to mock data into this services, one of them is:

- Apollo graphql (server/client)

- mock.io/graphql ( it’s no a free, you’ll have to pay to used it)

- hasura.io[2]  (server, works with apollo client or any client for graphql) is an open source service that gives you production-grade APIs on your data without having to build, operate & scale a GraphQL server. This has a developer tier free. You could try it.



Advantages and Drawbacks of GraphQL.

Advantages.

  1. Reducing the amount of data returned between your frontend and the backend. Solves the issue of over-fetching or under-fetching data. Over-fetching is fetching all the data from an endpoint, but using only a portion of that data for, say, a mobile application. Under-fetching is fetching all the data from an endpoint, but not having enough data. This usually requires a call to a second endpoint.

  2. Developers can build APIs with whatever methods they prefer, and the GraphQL specification will ensure they function in predictable ways to clients without impacting existing queries.

  3. Aggregate that data together into a single meaningful response. GraphQL can be set up to call multiple backend services as it assembles its query response.

  4. GraphQL is a way to simplify the interactions with your backend data, by using an interface whose schemas describe the system behavior so you can get efficient data from your APIs, bringing you flexibility in retrieving information. has general usefulness for simplifying the use of complex APIs.

  5. Can be scalable using Apollo Federation[3], in this way you have one entrypoint (GraphQL Schema Server) and many implementations of resolvers behind this schema. Apollo Federation encourages a design principle called separation of concerns. This enables different teams to work on different products and features within a single data graph, without interfering with each other. This promised the benefits of a unified schema with distributed ownership and implementation.

Drawbacks.

  1. The basic framework cannot be avoided. You have to do things according to the GraphQL way.

  2. GraphQL presents a learning curve for developers familiar with REST APIs.

  3. GraphQL shifts much of the work of a data query to the server side, which adds complexity for server developers.

  4. API maintainers have the additional task of writing maintainable GraphQL schema.

Tools on GraphQL.

  • strapi, allow you to auto generate documentation from GraphQL schemas. https://strapi.io/documentation

  • hotchocolate, .Net Platform to implement  a GraphQL server (C#).

https://github.com/ChilliCream/hotchocolate

  • Offix, an offline client that allows GraphQL mutations and queries to execute even when an application is unreachable.

https://offix.dev/

  • Graphback, a command line-client for generating GraphQL-enabled Node.js servers.

https://graphback.dev/

  • OpenAPI-to-GraphQL, a command-line interface and library for translating APIs described by OpenAPI Specifications or Swagger into GraphQL.

https://github.com/IBM/openapi-to-graphql


Links referenced.

[1] https://graphql.org/learn/schema/

[2] https://hasura.io/

[3] https://www.apollographql.com/docs/federation/

See Also:

  • https://www.redhat.com/architect/apis-soap-rest-graphql-grpc
  • https://www.apollographql.com/docs/federation/
  • https://opensourcelibs.com/libs/graphql-schema
  • https://www.howtographql.com/
  • https://graphql.org/
  • https://graphql.org/swapi-graphql/




Thursday, May 14, 2015

Migrando antes que me cierren el servidor en spark :(

Estan un poco abandonados...
al tratar de loguearme en el server me detuvo con este mensajito:
:O

New release '14.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
*** /dev/xvda1 will be checked for errors at next reboot ***
*** System restart required ***
Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 3.2.0-54-virtual x86_64)
 * Documentation:  https://help.ubuntu.com/
  System information as of Thu May 14 14:32:29 UTC 2015
  System load:    0.93                 Processes:           249
  Usage of /home: 19.6% of 1023.50GB   Users logged in:     1
  Memory usage:   52%                  IP address for eth0: 10.252.95.77
  Swap usage:     0%
  Graph this data and manage this system at:
    https://landscape.canonical.com/
  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud
  Use Juju to deploy your cloud instances and workloads:
    https://juju.ubuntu.com/#cloud-precise
116 packages can be updated.
95 updates are security updates.
New release '14.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
*** /dev/xvda1 will be checked for errors at next reboot ***
*** System restart required ***
groups: cannot find name for group ID 1484

y Bueno el codigo lo tenia en github ( j3nnn1.github.io) así que fue ese el que implemente en la aplicación shiny:



> install.packages('shinyapps')
Installing package into ‘/home/j3nnn1/R/x86_64-unknown-linux-gnu-library/3.1’
(as ‘lib’ is unspecified)
--- Please select a CRAN mirror for use in this session ---
Mensajes de aviso perdidos
package ‘shinyapps’ is not available (for R version 3.1.3)

ouh nou... es un paquete propio de rstudio y por eso no esta en los repositorios de CRAN.

Desde la consola de R... hacer esto:


Esta buenisimo el tutorial: lo mejor es instalarlo desde el repositorio de github:

install.packages('devtools')

devtools::install_github('rstudio/shinyapps')
shinyapps::setAccountInfo(name='j3nnn1', token='80AF9kk1C50EB9014D3F92A74235B371', secret='')
library(shinyapps)
shinyapps::deployApp('~/git/homework/tp_vi/eph_ar')
shinyapps::deployApp('~/git/homework/tp_vi/eph_ar')
Preparing to deploy application...Update application currently deployed at
https://j3nnn1.shinyapps.io/eph_ar? [Y/n] Y
DONE
Uploading application bundle...DONE
Deploying application: 42672...
Waiting for task: 33658257
  building: Parsing manifest
  building: Fetching packages
  building: Installing packages
  building: Installing files
  building: Pushing image: 182367
  deploying: Starting instances
  terminating: Stopping old instances
Application successfully deployed to https://j3nnn1.shinyapps.io/eph_ar

Y eso es todo! :D genial pense que sería más difícil :D

bueno queda otra tarea pendiente:

migrar todo el css y html, como esta hecho con bootstrap 2 y cuando recién instalas shinny usan bootstrap 3 se ve muy rara la aplicación.

:-/

Sunday, November 24, 2013

Referencias sobre papers que hablan de datamining.


La imagen me encanta resumen bien, muchas de las cosas que se ven muy amenudo en Datamining.

Organizando, decidí recopilar muchas de las cosas que tenía impresa inecesariamente, y reciclarlas : D
así que en este post colocaré artículos, papers, información impresa que me gustaría tener un registro de ella:

Papers:

"Discovery of interesting Usage Patterns from Web data"
 http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.33.1543&rep=rep1&type=pdfData"
Interesante :O,  usan logs para analizar el comportamiento del usuario, es viejísimo el paper pero es
como el paper que es mencionado constantemente, también uno de los que escribió el paper es el
escritor del libro:
http://www.cse.msu.edu/~ptan/
Si quieres saber de Datamining y Web, es un buen punto para leer.

"The class imbalance problem in pattern classfication and learning"
http://marmota.dlsi.uji.es/WebBIB/papers/2007/1_GarciaTamida2007.pdf
Notas:
alternativas que se pueden realizar cuando está desbalanceado el conjunto de datos,  bien sea over o under sampling, medidas de ganancia empleada, soluciones a nivel del algoritmo, mejora con ensembles, no siempre compensar la clase desbalanceada ayuda a clasificar, es mejor tener la medida de ganancia de modelo generado por ensembles, curva ROC, precisión y recall.

Este artículo está bueno leer.
http://www.datasciencecentral.com/profiles/blogs/66-job-interview-questions-for-data-scientists

"Aprendizaje Automático: Algoritmos genéticos" 2004
Quintairos
Notas: Metaheuritica, tiene buen esquema de los pasos de un algoritmo genético y no es tan viejo.

"Data Preparation for Mining World Wide Web Browsing Patterns"
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.11.3835&rep=rep1&type=pdf
Notas:
Información sobre como procesar datos provenientes de la Web, medidas como lift, confianza, belief (creencia), conjunto de creencias, las creencias pueden ser generadas manualmente en base al dominio del conocimiento, siendo esto  No práctico.  El dominio del conocimiento puede ser usado para automáticamente crear evidencia sobre las creencias.
Cobertura/ Coverage:  es la medida de la fracción total del número de transacciones que contienen al menos un item del itemset.  count (A y B) / NT
Este paper propone un modelo basado en el soporte lógico.
Establece el criterio para medir el interes o lo interesante de un atributo. pudiendo ser:
objetivo: soporte, lift, confianza. subjetivo: novelty o unexpectedness.

Web Mining tiene los siguientes tipos de dominio de información:
  1. contenido
  2. estructura
  3. usabilidad
La meta es identificar a un conjunto de creencias y usar este conjunto como filtro para identificar reglas interesantes.

Fundamental en web mining es el descubrimiento del conocimiento, y alguna expectacion definida del conocimiento  (creencias)

belief utiliza un framework de lógica difusa (Baldwin's support logic) manejando multiples fuentes de evidencia. y busca reglas que no contradigan una creencia existente.

Define evidencia como cada pieza de información (regla, termino o medida).
cada creencia posee una escala de evidencia, o evidencia necesaria. y cada creencia tiene una cantidad de ignorancia acerca de la creencia. La evidencia se clasifica en: evidencia necesaria, evidencia posible.

Las evidencias son interesantes cuando:
las creencias entran en conflicto con la evidencia.
las creencias con evidencia de la fuente.

Clasificadores Basados en Reglas:
Ripper: analiza la ganancia de la información, el conjunto de datos más pequeños, como clasificación positiva y el resto como clasificación negativa.
Prims:  No toma en cuenta el tamaño de la clase, sino que a medida que va iterando va añadiendo atributos de la clase como condición por lo que tiende a sobreajustar los datos y para ello puede hacerse prunning en cada iteración  o prunning global.

Sobre Metaheuristica:

"Improving User Profiles for E-Commerce by Genetic Algorithms"

Paper Yi-Shin and Cyrus Shanabi
Notas: meciona diferentes tipos de sistema de recomendación, técnicas de análisis de datos.
técnicas de filtrado: content-based filtering, collaborative filtering.  Cada uno tiene sus puntos beneficios y sus puntos débiles. Cabe destacar que el sistema es susceptible en generar soluciones no adecuadas si el comportamiento del usuario no es consistente, en cuanto al flujo de su navegación. Y mencionan que no existe algún mecanismo de aprendizaje automático que pueda lidiar con  comportamientos inconsistentes.
El cromosoma será decodificado en un perfil del usuario.
La función fitness toma en cuenta dos factores, promedio de satisfacción de usuarios con la lista generada, y la lista de deseos estimada para el usuario, midiendo la similaridad entre estos dos factores, mientras más parecido mejor es la lista de deseos del usuario.

"A  Review of evolutionary Algorithms for E-Commmerce"
Paper Alex. A Freitas
Menciona varios papers que  tratan de algoritmos evolutivos y su aplicación para ecommerce, tiene una aplicación muy clara de programación genética con una estructura de datos de árboles. definiciones variasGA = algoritmo evolutivo, PG = programación genética. cada iteración es una generación, la función fitness filtra los individuos que estarán en la siguiente generación. La tasa de mutación, crossover definirá los cambios que se realizan sobre la población.


"Genetic Algorithms for credit card fraud detection"
SATVIK VATS, SURYA KANT DUBEY, NAVEEN KUMAR PANDEY


"Review on evolutionary algorithms in Datamining"
A. Freitas

"A review on evolutionary algorithms in Bayesian network learning and inference tasks"
A review on evolutionary algorithms in Bayesian network learning and inference tasks

"Integración de técnicas de Minería de datos y metaheurísticas en sitios de comercio electrónico"
Barragan Edgar, Giraldo Fabián Andres. 

Saturday, June 8, 2013

python, virtualenv y no hay problema!




Instalar virtualenv.

pip install virtualenv

por el gestor de paquetes.
python2-virtualenv-clone
python2-virtualenv

Creando un entorno virtual.

mkdir ~/virtualenvs/blog/
virtualenv ~/virtualenvs/blog/ --no-site-packages -p /usr/bin/python2virtualenv --no-site-packages nombreEntorno : Esta opcion hace que el entorno virtual se instale sin tomar en cuenta los paquetes del sistema operativo.

virtualenv --python=python3.1 nombreEntorno: Para que use un python específico.

Listar los ambientes virtualenvs.

   Porque menciono esto ya que la costumbre de usar rvm o perlbrew es poder listar las diferentes versiones del lenguaje que ya tengo instalada, por lo que no existe una única forma de hacer esto, ya que esto NO te instala diferentes versiones de python en tu SO, sino crea entornos virtuales para cada aplicación haciendo más limpia su implementación, por ejemplo tengo en mi SO dos versiones de python, puedo instalar estas dos versiones en mi ambiente local. Lo más recomendable es hacer un directorio donde almacenar todos los entornos virtuales.
Activando el entorno virtual.

cd ~/virtualenvs/mysite.com
source bin/activate


Desactivando el entorno virtual (Dejar de usar el python local). 

deactive 

Como funciona un entorno virtual.
Cuando uno crea un entorno, dentro del mismo se crean tres carpetas:

bin: cuando uno tiene el entorno activado, y ejecuta un comando como python, pip o easy_install, se ejecuta alguno de los binarios que se encuentran en esa carpeta, en vez de ejecutar los del sistema.
include: es simplemente un link al a los archivos de la instalación de Python.

Un link a algunos archivos de Python. En este caso a los .py
Una carpeta, site-packages, que es donde se instalan los paquetes cuando uno usa pip o easy_install

lib: esta es otra carpeta importante. Al igual que include tiene una carpeta llamada python pero a diferencia de include, esta no es una link a la carpeta de Python. La carpeta tiene dos cosas importantes:

Instalar Modulos en el entorno virtual.

pip install psycopg2

pip install numpy

pip install rpy2


Usando un wrapper para agilizar la utilización del entorno virtual.

usar: http://virtualenvwrapper.readthedocs.org/en/latest/


Servidor que contiene binarios no oficiales para python y windows

http://www.lfd.uci.edu/~gohlke/pythonlibs/


Referencias de:
 

Un tutorial genial para instalar virtualenv y como funciona:
https://wiki.archlinux.org/index.php/Python_VirtualEnv

referencia al titulo: http://www.youtube.com/watch?v=21fRA1VrLPo :)

adorable  alf

Saturday, March 2, 2013

Yii como framework. How to. ó Como elegir un Framework PHP



Recientemente me preguntaba que framework de PHP resultaba mejor para hacer un proyecto rápido y mantenible a lo largo del tiempo, sin generar arrugas de amargura :)


Acá existe una página que los compara: http://www.phpframeworks.com/
también en las búsquedas de google, permite ver comentarios de otras personas sobre distintos framework. El resultado ganó Yii como framework a utilizar. Ya que es un proyecto pequeño que no requiere de algo muy especializado o una plataforma como magento o symphony.


La instalación fue sencilla:
descomprimir y colocar el directorio, en una ruta accesible, ahí pueden ver los demos.

Para crear una aplicación, desde la consola, teniendo permiso de ejecución:

 ./yiic webapp /ruta/de/la/app/accesible/desde/el/servidor

ó

php yiic webapp /ruta/de/la/app/accesible/desde/el/servidor

Otras configuraciones aquí:
http://www.larryullman.com/2009/11/03/configuring-yii/