11-octubre-2017
admin

Impresión 3D: Añadir cambio de filamento y Restaurar firmware original.

En este videotutorial nos enseñan a realizar un cambio de filamento usando para ellos las extensiones (plugins) del programa Cura. Se puede hacer que la impresión se detenga a determinada altura y nos permita cambiar el filamento.

Y en este otro nos muestran como instalar el firmware de la Anet 8 para volver a su versión original.

6-octubre-2017
admin

Impresión 3D: Anet 8. Cabina.

Guia para meter tu anet 8 en una cabina hecha por ti mismo con 2 mesas lack de ikea.

Se coloca una mesa encima de otra, por la altura de la Anet 8 hay que añadir unos prolongadores de mesa de unos 10 cm. Hay que cerrar los laterales, en mi caso he usado unas tablas de contrachapado de 5mm de grosor y metacrilato de 3mm para los laterales (Atornillando el metacrilato al contrachapado). Para la puerta he utilizado metacrilato de 5 mm de grosor.

Sobre la mesa de abajo irá atornillada la base de la impresora, que en mi caso era una tabla de aglomerado de 1cm de grosor. Mientras, que sobre la mesa de arriba he colocado el soporte para la bobina del filamento, el soporte para el lcd y las cajas con los diferentes interruptores.

En la mesa de abajo se puede colocar una balda util para tener almacenados los filamentos.

Montando cabina para anet 8 Montando cabina para anet 8 Montando cabina para anet 8 Montando cabina para anet 8 Montando cabina para anet 8 Montando cabina para anet 8 Montando cabina para anet 8 Montando cabina para anet 8 Montando cabina para anet 8

Piezas para imprimir:
+ Prolongadores para la mesa: 1814763
+ Soporte para el LCD: 2005640
+ Guia para el filamento: 2137546
+ Guia para pasar los cables: 1740538 (wires.stl)
+ Soportes para balda inferior: 1639945
+ Manilla para la puerta: 12695
+ Filtro para salida de aire: 2105113
+ Caja para interruptor de fuente. 49542
+ Caja para interruptor de palanca. 1238650 (Utilizados para encender y apagar el ventilador añadido a la fuente y/o el de la placa)
+ Caja para interruptor de botón. 746157 (Utilizados para encender y apagar las luces led y/o el filtro del aire)

Piezas para comprar:
+ Cables
+ Leds para luz. 5 metros 300 unids SMD3528 DC 12 V de color blanco Aliexpress 2,15€
+ Filtro de carbono. pack de 10 de 12,8×18,8cm. Aliexpress 3,6€
+ Filtro HEPA. Pack de 5 de 64X45X12mm. Aliexpress 4,04€
+ Interruptores palanca. Pack de 5 de 3 pines. Aliexpress 1,22€
+ Interruptores de botón. Pack de 5 de 2 pines. Aliexpress 1,12€
+ Ventilador para el filtro del aire.

2-octubre-2017
admin

Impresión 3D: Anet 8. Montaje inicial y mejoras.

La Anet 8 se trata de una impresora bastante económica que da bastante buenos resultados. Permite imprimir tanto en PLA como ABS. Si bien, tal y como viene de fábrica, ya se puede imprimir con ella es necesario realizarle una serie de mejoras para ir obteniendo mejores resultados. Hay una gran comunidad en internet detrás de ella por lo que es muy fácil solucionar posibles problemas que puedan surgir.

A continuación se explica su funcionamiento y mejoras que se le pueden añadir para mejorar los resultados:

Montaje inicial
Por mi parte, realice el montaje de la impresora tal cual me venia de fábrica para ver que todo funcionaba correctamente. Y luego con ella imprimí las piezas necesarias para ir realizandole mejoras. Más adelante mostraré un listado con aquellas mejoras que finalmente he dejado puestas.

Anet 8 - Montaje inicial Anet 8 - Montaje inicial Anet 8 - Montaje inicial Anet 8 - Montaje inicial Anet 8 - Montaje inicial Anet 8 - Montaje inicial Anet 8 - Montaje inicial Anet 8 - Montaje inicial

Para realizar el montaje completo hay numerosos videos por la red donde se muestra como realizarlo correctamente paso por paso. Un ejemplo sería Guia montaje Anet 8, recomiendo verlos enteros una primera vez antes de realizar el montaje.

Mejora 1: Anclajes para las correas
Te permite anclar tanto la correa del eje X como del Y de manera más cómoda. Son más fáciles de maniputar al no ser necesario el uso de las bridas.
Piezas para imprimir:
+ Eje X: 1666094
+ Eje Y: 1997647

Mejora 2: Añadir interruptor a la fuente y un ventilador auxiliar
El interruptor te permite encender y apagar la impresora y el ventilador ayudará a la refrigeración de la fuente.
Piezas para imprimir:
+ Interruptor: 1798604
+ Ventilador fuente: 1683098
Piezas para comprar:
+ Un interruptor de 3 pines 15A 250V. Ebay 1,43€
+ Un fusible para el interruptor (en mi caso no traia y tuve que comprarlo aparte). Pack de 10 fusibles de 10A de 5x25mm Aliexpress 3,32€
+ Un ventilador. Pack de 5 ventiladores de 12V de 2 pines y de 5 cm Aliexpress 3,04€

Mejora 3: Refuerzos para la estructura
Permite mejorar la estabilidad de la impresora para evitar vibraciones y hacerla menos endeble.
Piezas para imprimir:
+ Soportes para reducir el movimiento del eje X: 1872162 (
Anet_A8_Top_Left_Bracket_Leo.stl y Anet_A8_Top_Right_Bracket_Leo.stl)
+ Marco para el motor Y 1831038
+ Marco para la parte delantera de la base 1430727 (frame_brace_2.stl)
+ Sujecciones de la base 1771932 (Fix_M8_R1_no_screw.STL, hacen falta 6 y dos tornillos para cada uno. Permite fijar la impresora a una base. En mi caso una tabla de 50x50cm de aglomerado de 1,5 cm de grosor.)

Mejora 4: Tensores para las correas X e Y
Con el uso las correas tenderan a aflojarse. Estos tensores permiten mantener las correas tensas de manera más fácil, simplemente girando un tornillo.
Piezas para imprimir:
+ Tensor X: 1492411 (x_idler_tension.stl se necesita un tornillo con su tuerca)
+ Tensor Y: 1908554 (se necesitan tornillos y tuercas para unir las piezas de este tensor)

Mejora 5: Estabilizar varillas eje Z
Esta mejora es necesaria para eliminar el llamado “wobble”.
Piezas para imprimir:
+ Anti-wobble parte superior varilla: 1858435
+ Anti-wobble parte inferior varilla: 1539675 (z_wobble.stl)
Piezas para comprar:
+ Rodamientos 608ZZ. Pack de 10 rodamientos 608ZZ Aliexpress 2,60€

Mejora 6: Anclaje cama caliente
Para hacer más cómodo el regulado de la cama con los tornillos de ésta es interesante añadirles estas tuercas. Además se recomienda rectificar los agujeros de la H para eliminar la rosca y que sean las palometas las que suban o bajen la cama (Ver video).
Piezas para imprimir:
+ Arandelas: 1261806
+ Tuercas: 2000216

Mejora 7: Mosfet y ventilador para refrigerar electrónica
Con el mosfet evitamos que la corriente destinada a alimentar la cama pase por la placa.
Piezas para imprimir:
+ Soporte para placa: 2000271 (placa+mosfet+raspberry.stl y tapa_pi_90_80_70_60_50.stl)
Piezas para comprar:
+ Mossfet. Aliexpress 8,07€
+ Ventilador para poner sobre la placa. Ver mejora 2.

Mejora 8: Ventilador de capa
Útil para enfriar el filamento rápidamente todo alrededor.
– Pieza: 1620630

Mejora 9: Aislante térmico para extrusor y cama caliente
Muy útil para conseguir una calentamiento más rapido y tener menos consumo eléctrico. En el caso de la cama permite evitar el “warping”.
Para la cama caliente, se necesita.
+ Una lámina de corcho para colocar en la parte inferior de la cama.
+ Cinta kapton para pegar el corcho a la cama.
+ Además, vamos a añadir en la parte superior de cama un cristal corriente o de borosilicato. Se puede sujetar a la cama con unas pinzas. A la hora de imprimir si usamos laca para sujetar las piezas al cristal quedarán fuertemente pegadas, evitando que se estropee la impresion. Para despegar, basta con esperar a que se enfríe la base. El cristal se puede limpiar con agua despues de realizar varias impresiones. (Yo utilizo laca Nelly normal).
Nota: En este video se muestra como podemos aislar la cama caliente.
Para el extrusor, se necesita:
+ Cinta kapton
+ Lana de roca
Nota: explicación de como se haría.
Piezas para comprar:
+ Lámina de corcho. Pack 4 láminas de 42x32cm Ikea 4,99€
+ Cristal de borosilicato. Aliexpress 7,04€
+ Pinzas de sujección
+ Laca nelly
+ Cinta kapton. Aliexpress 1,69€
+ Lana de roca. Pack de 10 tacos de 50x50x50mm Ebay 4,20€

Mejora 10 A: Final de carrera Z
Necesario para facilitar el calibrado del eje Z en el caso de poner un sensor de autonivelado (mejora 10 B).
Piezas para imprimir:
+ Final de carrera: 1776429 (se necesitan tornillos y tuercas)

Mejora 10 B: Sensor capacitivo para autonivelado
Este sensor permite que la impresora realice el calibrado del eje Z de forma automática.
Piezas para imprimir:
+ Soporte: 1907394 (Para el LJC18A3-H-Z/BX seria el modelo Sensor_Bracket_18mm_Leo.stl)
Piezas para comprar:
+ Sensor capacitivo LJC18A3-H-Z/BX. Aliexpress 5,35€

Para poder realizar su configuración recomiendo ver este video y visitar esta web.

Mejora 11: Guia y filtro para el filamento
Permite evitar que el filamento se enrede y que llegue sin motas de polvo al extrusor.
Piezas para imprimir:
+ Guia para el filamento: 1764285
+ Soporte para la bobina de filamento: 1624641 (Añadi las piezas SpoolHolder51_FDPlast_BOLT.stl y SpoolHolder51.5_FDPlast_NUT.stl al soporte que ya trae la impresora)
+ Filtro para el filamento: 1099978
Piezas para comprar:
+ Tubo de teflon para para el filamento desde el filtro al extrusor. Aliexpress 1€

Otras mejoras
– Utilizar conectores faston para toda la electrónica
– Problema con el conector de la cama caliente. Video

30-agosto-2017
admin

Instalar ROM (Lineage OS) en Samsung Galaxy 3 mini con TWRP

Lineage OS consiste en un sistema operativo de código abierto para teléfonos y tabletas Android. A continuación se explicaran los pasos a seguir para instalarlo en un Samsung Galaxy 3 mini con el TWRP.

1 – Copiar a la tarjeta externa del movil los 3 archivos siguientes.
– ROM del lineage OS, por ejemplo: lineage-14.1-20170108-UNOFFICIAL-golden.zip
– Las aplicaciones gapps: open_gapps-arm-7.1-micro-20170210.zip
– App solución de problemas de teclado: AOSP Keyboard Swype.zip

2 – Se debe tener instalado ya en el móvil el TWRP.

3 – Apagamos el movil y lo encendemos en modo recovery (para se pulsan simultáneamente las teclas volumen arriba, home, on/off realizará 3 reinicios hasta que por fin arranque el TWRP)


4 – Comprobar en la sección install que estan los tres archivos

5 – Vamos a WIPE >> ADVANCED WIPE >> seleccionamos las primeras 5 opciones >> deslizamos la barra de abajo para que limpie el equipo. Importante no seleccionar la sexta opción para la tarjeta externa.

6 – Volvemos de nuevo a la sección de install, seleccionamos la rom y luego deslizamos la barra de abajo.

7 – Cuando termine (tarda varios minutos) damos con el botón de atrás y hacemos lo mismo con las gapps.

8 – Repetimos lo mismo con AOPS Keyboard para solucionar los problemas del teclado.

9 – Ya podemos reiniciar el equipo en Reboot System. El móvil tardará un rato en iniciarse pero si todo ha ido bien debería arrancar el nuevo sistema.

Documentación de Lineage Os

23-agosto-2017
admin

Instalar Team Win Recovery Project (TWRP) en Samsung Galaxy S3 mini

El Win Recovery Project se trata de un software para Android que permite sustituir el recovery de fábrica por el suyo modificado y muchísimo más completo. Permite la instalación ROMs personalizadas entre otras funcionalidades.

Para instalarlo en un Samsung Galaxy 3 mini podemos seguir los siguientes pasos:

1 – Instalar drivers de samsung en nuestro pc. Podemos descargarlo de SAMSUNG_USB_Driver_for_Mobile_Phones.

2 – Descomprimir el programa Odin v3.07

3 – Una vez descomprimido lo ejecutamos como administrador. Odin3 v3.07.exe

4 – Dejamos únicamente seleccionada la opcion F. Reset Time.

5 – Seleccionamos con el botón PDA el archivo GT-I8190_TWRP_3.0.2-1.tar.md5

6 – Una vez preparada la parte del PC procedemos a apagar el telefono. Y lo encendemos en modo downloading ( para ello se deben pulsar simultáneamente las tablas volumen abajo, home, on/off).

7 – Cuando arranque pulsamos la tecla de volumen arriba para ir a la pantalla de downloading y conectamos el movil al pc.

8 – Esperar hasta que lo reconozca en Odin. Cuando eso pase en el log de odin saldrá Added! y ya podremos darle a Sart.

9 – Una vez finalizado el proceso del paso 8 desconectamos y apagamos el movil. (Para apagarlo basta con mantener presionado el boton de on/off varios segundos)

10 – Ahora para arrancar el TWRP sólo tenemos que iniciar el movil en modo recovery (mantener pulsadas las teclas volumen arriba, home, inicio)

Documentación Oficial TWRP

17-agosto-2017
admin

Agrupaciones en consultas con javax.persistence.criteria.CriteriaBuilder

Vamos a poner un par de ejemplos de uso del CriteriaBuilder en JPA para poder hacer consultas usando JpaSpecificationExecutor e incluso usar agrupaciones con groupBy.

Se van a ir poniendo las diferentes clases desde el Entity hasta el Service:

Entity de la tabla cuenta con un par de campos.

@Entity(name="cuentaEntity")
@Table(name="CUENTA")
public class CuentaEntity implements Serializable {
     @Id
     private Integer id;
     @Column(name="balance")
     private Integer balance;
     @Column(name="empresa")
     private String empresa;
     @Column(name="fecha")
     @Temporal(TemporalType.TIMESTAMP)
     private Date fecha;

     //getter setter
}

Su correspondiente JPAMetalModelEntityProcessor, la vamos a utilizar para las consultas.

@Generated(value = "org.hibernate.jpamodelgen.JPAMetalModelEntityProcessor")
@StaticMetamodel(CuentaEntity.class)
public abstract class CuentaEntity_ {
	public static volatile SingularAttribute< CuentaEntity, Integer> id;
	public static volatile SingularAttribute< CuentaEntity, Integer> balance;
	public static volatile SingularAttribute< CuentaEntity, String> empresa;
	public static volatile SingularAttribute< CuentaEntity, Date> fecha;
}

Un clase repositorio. Hay que hacer que herede tanto de la JpaRepository como del JpaSpecificationExecutor.

@Repository
public interface CuentaRepository extends JpaRepository< CuentaEntity, Integer>, 
                                         JpaSpecificationExecutor< CuentaEntity> {
	
}

Creamos nuestra clase criteria donde meteremos las especificaciones de las querys. Se añaden unos ejemplos de condicionales

public class CuentaCriteria implements Serializable{
     private Integer id;
     private Integer balance;
     private String empresa;
     private Date fecha;

     ......

     public static Specification< CuentaEntity> search(final CuentaCriteria cri){
	return new Specification< CuentaEntity>(){

	        @Override
		public Predicate toPredicate(Root< CuentaEntity> root, 
                                 CriteriaQuery< ?> criQuery, CriteriaBuilder criBuilder) {
				
			List< Predicate> predicates = new ArrayList< Predicate>();

			//el nombre de la empresa sea igual al que se pasa en CuentaCriteria. Si no está vacia.
			if( !StringUtils.isEmpty( cri.getEmpresa())){
				predicates.add( criBuilder.like(root.get(CuentaEntity_.empresa), cri.getEmpresa()) );
			}

			//la fecha debe ser igual a la que se pasa en CuentaCriteria. Si no está vacia.
			if( !StringUtils.isEmpty( cri.getFecha())){
				predicates.add( criBuilder.equal(root.get(StatementEntity_.fecha),cri.getFecha()) );
			}

			//podemos añadir tambien una condicion de tipo OR ( id = 0 OR id = 1). 
			List< Predicate> predOr = new ArrayList< Predicate>();
			predOr.add( criBuilder.equal(root.get(CuentaEntity_.id), 0) );
			predOr.add( criBuilder.equal(root.get(CuentaEntity_.id), 1) );
			predicates.add( criBuilder.or(predOr.toArray(new Predicate[predOr.size()]) ) );
	
			//Si tubieramos un objeto Embeddable u otro tipo de objeto podriamos acceder 
			//a las propiedades de ese objeto
			//predicates.add( criBuilder.like(root.get("OBJETO").get("CAMPO_OBJETO"), "qqqqqq") );
				
			..............

		        //Concatenamos todos los predicados como ands
			return criBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
		}
	};
     }
}

Interfaz con nuestro servicio con unos métodos de prueba.

public interface CuentaService{
	public Page< CuentaEntity> find(CuentaCriteria criteria, Pageable pageable);
	public List< Object[]> findGroupBy(CuentaCriteria criteria);
	public Long count(CuentaCriteria criteria);
        .........
}

Y su implementación:

@Component("cuentaService")
@Transactional
public class CuentaServiceImpl implements CuentaService {

	@PersistenceContext
        EntityManager em; 
		
	@Autowired
	private CuentaRepository cuentaRepository;
	
	//En este método permite realizar una consulta que devuelve el listado de todas las cuentas que
	//lo cumplen. Las condiciones de la consulta se le pasan con CuentaCriteria.search(criteria).
	//No devolverá todos los elementos al pasarle un objeto Pageable para paginación.
	public Page< CuentaEntity> find(CuentaCriteria criteria, Pageable pageable){
		return cuentaRepository.findAll( CuentaCriteria.search(criteria), pageable);
	}

	//En este método deveulve la cuenta de la consulta anterior. Las condiciones de la consulta
	//se le pasan con CuentaCriteria.search(criteria).
	public Long count(StatementCriteria criteria){
		return this.statementRepository.count( StatementCriteria.search(criteria) );
	}
	
	//El groupBy no funciona bien si se mete en StatementCriteria.search(criteria), eso es porque
	//aunque hagas un multiselect() con sólo los elementos que quieres sacar en la consulta te lo va 
	//a sobreescribir por el select().
	//Una posible solución sería hacerlo como se hace en este método.
	public List< Object[]> findGroupBy(CuentaCriteria criteria){
		CriteriaBuilder cb = em.getCriteriaBuilder();
		CriteriaQuery cq = cb.createQuery();
		Root root = cq.from(StatementEntity.class);
				
		//declaramos el multiselect con las columnas a devolver
		cq.multiselect(
                       //fecha mayor
                       cb.greatest( root.get(CuentaEntity_.fecha).as(java.util.Date.class) ),
                       //fecha menor
                       cb.least( root.get(CuentaEntity_.fecha).as(java.util.Date.class) ),
                       //balance mayor
                       cb.max( root.get(CuentaEntity_.balance) ),
                       //balance menor
                       cb.min( root.get(CuentaEntity_.balance) ),
                       //media del balance
                       cb.avg( root.get(CuentaEntity_.balance) ),
                       //suma del balance total
                       cb.sum( root.get(CuentaEntity_.balance).as(java.lang.Integer.class) ),
                       //suma del balance siempre que sea mayor de cero, es decir, positivo
                       cb.sum( cb.selectCase()  
				.when(cb.greaterThan(root.get(CuentaEntity_.balance), 0), 
                                           root.get(CuentaEntity_.balance)    ).otherwise(0)),
     
                       //contador con todas las filas agrupadas
                       cb.count( root.get(CuentaEntity_.id) )
		);
                //aplicamos todas la condiciones de consulta al where
		cq.where(  CuentaCriteria.search(criteria).toPredicate(root, cq, cb)  );

                //le decimos que agrupe por el nombre de las empresas
		cq.groupBy( root.get( CuentaEntity_.empresa) );
		  
		Query query = em.createQuery(cq);

                //Por último lo podemos retornar como una lista de objetos
		return (List< Object[]>)query.getResultList();
	}	
}
2-agosto-2017
admin

Logrotate

Logrotate permite rotar a los archivos de LOG de nuestras aplicaciones. El logrotate se trata de un servicio que se ejecuta de forma autónoma, si queremos comprobar su funcionamiento basta con ejecutar la siguiente instrucción:

    logrotate -vf /etc/logrotate.conf

Es en ese fichero donde se establece la configuración base para cualquier log que deseemos rotar. Vamos a poner un ejemplo de configuración para un aplicación de Node.js donde se utiliza Forever. Para ello:

Añadimos en /etc/logrotate.conf la configuración

/home/admin/.forever/*.log {
     daily       # how often to rotate
     rotate 10     # max num of log files to keep
     missingok     # don’t panic if the log file doesn’t exist
     notifempty    # ignore empty files
     compress      # compress rotated log file with gzip
     sharedscripts # no idea what it does, but it’s in all examples
     copytruncate  # needed for forever to work properly
     dateext       # adds date to filename
     dateformat %Y-%m-%d.
}

Tras añadirlo iniciamos el logrotate

     sudo logrotate -s /var/log/logstatus /etc/logrotate.conf

Podeis comprobar que los logs se están tratando asi:

     tail -f /var/log/logstatus



Documentación logrotate

14-julio-2017
admin

Objeto JSON en javascript: JSON.stringify vs JSON.parse

El objeto JSON contiene los métodos necesarios para analizar el JavaScript Object Notation (JSON) y, a su vez, convertir valores a JSON. A continuación se esponen los métodos de los que consta:

JSON.parse(text[, reviver])
Convierte una cadena de texto en un objeto de javascript.

Parámetros
text: La cadena que convertirá a JSON. Vea el objeto JSON para una descripción de la sintaxis JSON.
reviver (Opcional): Función que sobreescribe cómo se transforma el valor producido por el parsing.

Retorna el objeto que se corresponde con el texto JSON entregado.

JSON.parse('{"p": 5}', function (key, value) {
    if(key === "") return value;     
    return value * 2;             
});                           
// { p: 10 }



JSON.stringify(valor[, remplazo [, espacio]])
Convierte un valor dado en javascript a una cadena JSON.

Parámetros
valor: El valor que será convertido a una cadena JSON.
función de remplazo (Opcional): Es una función que altera el comportamiento del proceso de conversión a cadena de texto, o un array de objetos String o Number que representan una lista de elementos validos que se incluyen en la cadena JSON.
espacio (Opcional): Es un objeto de tipo String o Number que es usado para insertar un espacio en blanco dentro de la cadena de salida JSON para su mejor comprensión. Si es un número, se entiende que representa el numero de espacios a agregar; este numero tiene un limite de 10 espacios; numeros menores que 1 inplican que no se utiliza espacio alguno. Si es un cadena (sólo los 10 primeros caracteres son tomados en cuenta), esta es usada como espacios en blanco. Si este parámetro no se define o este es nulo no se agrega ningun espacio.

Retorna un string JSON representando el valor dado.

function replacer(key, value) {
  // Filtrando propiedades 
  if (typeof value === "string") {
    return undefined;
  }
  return value;
}

var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7}; 
var jsonString = JSON.stringify(foo, replacer);
// '{"week":45, "month":7}'

Fuente Json

1-julio-2017
admin

HTTP Status Codes

1×× Informational
100 Continue
101 Switching Protocols
102 Processing

2×× Success
200 OK
201 Created
202 Accepted
203 Non-authoritative Information
204 No Content
205 Reset Content
206 Partial Content
207 Multi-Status
208 Already Reported
226 IM Used

3×× Redirection
300 Multiple Choices
301 Moved Permanently
302 Found
303 See Other
304 Not Modified
305 Use Proxy
307 Temporary Redirect
308 Permanent Redirect

4×× Client Error
400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Precondition Failed
413 Payload Too Large
414 Request-URI Too Long
415 Unsupported Media Type
416 Requested Range Not Satisfiable
417 Expectation Failed
418 I’m a teapot
421 Misdirected Request
422 Unprocessable Entity
423 Locked
424 Failed Dependency
426 Upgrade Required
428 Precondition Required
429 Too Many Requests
431 Request Header Fields Too Large
444 Connection Closed Without Response
451 Unavailable For Legal Reasons
499 Client Closed Request

5×× Server Error
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported
506 Variant Also Negotiates
507 Insufficient Storage
508 Loop Detected
510 Not Extended
511 Network Authentication Required
599 Network Connect Timeout Error

21-junio-2017
admin

JSON Viewer

El JSON Viewer se trata de una herramienta que te permite visualizar los ficheros *.json.

Capturas de pantalla del visor:

JSON Viewer

Main View


JSON Viewer

Text View


JSON Viewer

Fiddler Plugin


JSON Viewer

Custom Visualizer showing data as a grid


Enlace de la aplicación.

Páginas:«1234567...24»

Categorias

Linkedin