Source: https://mascandobits.es/author/admin/
Timestamp: 2018-02-23 14:05:34+00:00

Document:
RDCH106 | Mascando Bits
posted by RDCH106 31 enero, 2018 09:00 under Programación Almacenamiento, GNU-Linux, Raspberry-Pi
Una de las bondades de los sistemas GNU/Linux es la posibilidad de montar una unidad USB y formatearla convenientemente. La cual puede ser montada a voluntad o meterla en la fstab (File Systems TABle) para que se monte con el arranque del sistema si lo deseamos. Para estas cosas GNU/Linux es la caña y es super flexible!! 😉
Un opción que podría ejemplificar fácilmente el uso de este procedimiento, puede ser una Raspberry Pi a la que queráis darle más espacio que el que tenéis disponible en la microSD donde tenéis montado el sistema operativo. Actualmente las memorias USB han bajado mucho su precio y han aumentado los tamaños máximos de las mismas, encontrándonos a precios razonables memorias de 128GB o256GB.
Empecemos con lo básico que es conectar la memoria USB a la Rapsberry Pi (obvio pero por si acaso lo digo 😉 ). Con la memoria USB conectada ejecutamos el siguiente comando:
El comando nos responde identificado las unidades disponibles. Las unidades “mmcblk0p1” y “mmcblk0p2” corresponden a la partición de boot del la Rapsberry Pi y a la de ficheros de Raspbian (Sistema Operativo) respectivamente. La que nos insteresa es la “sda1“. Anota el identificador (UUID) que tiene, en mi ejemplo el mio es “51a4dc12-f769-4286-bdb6-58f40f6a7ce2“.
Ahora vamos a preparar el punto de montaje de la unidad. Para ello ejecuta el siguiente comando para crear la ruta “media/usb” donde montaremos la unidad:
Puedes usar otra ruta si lo deseas, pero intenta que sea corta, ya que tendrás que escribirla tantas veces como quieras acceder a la unidad.
Ahora hay que asegurarnos que el usuario “pi” es propietario de la nueva carpeta donde montaremos la unidad. Para ello ejecuta:
Para montar la unidad lo haremos con el siguiente comando:
sudo mount /dev/sda1 /media/usb
df -h -T
Veremos que aparece la unidad en el punto de montaje “media/usb” indicado, así como el tipo de sistema de ficheros. Si has usado otro punto de montaje, aparecerá que el que hayas puesto.
Como usar la memoria USB con el formato FAT32 (aparece como vfat) no es lo más óptimo, formatearemos la unidad a EXT4 mucho más óptimo para nuestro sistema Raspbian. Puedes formatear fácilmente la unidad con el siguiente comando tras desmontar la unidad con:
⚠️ Ten en cuenta que si ejecutas los comandos para formatear la memoria USB, perderás los datos que hubiese dentro. ⚠️ Si estamos conformes con el formateo decimos que sí.
Si quisiéramos que la unidad se montase automáticamente, tendremos que incluir la nueva unidad en fstab. Para ello abriremos primero el fichero de configuración de fstab:
Y añadiremos tras la última línea esta otra:
UUID=51a4dc12-f769-4286-bdb6-58f40f6a7ce2 /media/usb ext4 auto,nofail,noatime,users,rw 0 0
El parámetro más importante es el “UUID” que anotamos al principio del artículo. Si finalmente optaste por formatear la memoria USB a EXT4, te recomiendo que vuelvas a ejecutar el comando porque el valor habrá cambiado.
Para concer específicamente el significado de cada parámetro te dejo la siguiente referencia:
https://wiki.archlinux.org/index.php/Fstab_(Espa%C3%B1ol)
Si finalmente decidiste NO formatear la memoria USB, la línea cambia un poco y se sustituye “ext4” por “vfat“:
Ahora solo nos resta comprobar si efectivamente la unidad se monta sola y para ello ejecutaremos un reinicio:
Si lo hemos hecho bien deberíamos poder ver la memoria USB en “/media/usb“. Ya tenemos más espacio en nuestra Raspberry Pi!! 😉
posted by RDCH106 24 diciembre, 2017 16:00 under Miscellaneous
Las vacaciones Navideñas y el fin de año ya están a la vuelta de la esquina y toca cerrar otro año en el que en lo personal y profesional no me puedo quejar.
Mascando Bits ha mejorado su número de visitantes y la recurrencia de los mismos. ¡Gracias a todos los que leéis y compartís! 😉 Este blog lo puse en marcha como sistema de información personal de dominio público, sin ninguna pretensión más allá de la de devolver algo de conocimiento y pasión de lo que es mi hobby y mi profesión.
Este año tengo cambios profesionales y espero seguir manteniendo mi actividad de publicación y el desarrollo de mis proyectos en GitHub.
Con mis mejores deseos ¡Felices Fiestas! (para los agnósticos y atéos), ¡Feliz Navidad! (para los creyentes) y ¡Feliz Año 2018! (para TODOS 😉 ). ¡Nos vemos a la vuelta!
posted by RDCH106 27 octubre, 2017 09:30 under Programación Raspberry-Pi, Redes
Un de las piezas claves hoy en día de nuestro Internet que permite que funcione, son las Domain Name System o mayormente conocido como DNS. Este sistema de servidores DNS es el encargado de traducir los nombres de dominio que manejamos habitualmente, como mascandobits.es, en la dirección IP del ordenador donde está alojado ese dominio, que en el momento de escribir esta entrada es 31.220.20.199 .
Cada ordenador en Internet tiene una dirección IP que es única para ese ordenador (por lo menos en la red que pertenece). La IP está formada por cuatro números enteros de 0 a 255, separados por puntos. 127.0.0.1 es un ejemplo de dirección IP que además es especial porque hace referencia a nuestra propia máquina. Cada vez que te conectas a Internet, a tu ordenador se le asigna una dirección IP, puede ser siempre la misma o puede variar, lo normal es que cada vez que reinicies el router o al cabo de un tiempo obtengas una IP diferente.
Esta IP que tiene tu equipo, y que te proporciona tu router, es privada y solo funciona en el rango de tu red local (dispositivos conectados a tu router). Existe un conjunto de rangos de IP que son usados como IPs privadas:
192.168.0.0 – 192.168.255.255 (65,536 direcciones IP)
172.16.0.0 – 172.31.255.255 (1,048,576 direcciones IP)
10.0.0.0 – 10.255.255.255 (16,777,216 direcciones IP)
El primer grupo de IPs lo puedes ver en la red local de tu casa o empresa (si es pequeña), el segundo grupo en empresas algo más grandes y el último grupo es común verlo para equipos conectados mediante VPN.
A su vez existe una segunda IP denominada pública que es la que tu ISP o proveedor de servicios te asigna al router y que sirve para poder acceder a Internet. Esta IP pública suele ser dinámica en la mayor parte de los casos y tu ISP se la asigna a tu router, normalmente reiniciando el router puede cambiar esta IP.
La conversión de una IP privada a una pública y viceversa se hace gracias a la Network Address Translation o NAT del router. Esto permite hacer peticiones a IPs publicas de servicios de Internet y devolver el tráfico de respuesta a la IP privada de la máquina que hizo las peticiones.
Un vez aclarado esta parte que es básica avancemos….
Los ordenadores donde están alojadas las páginas web o servicios tienen siempre la misma dirección IP, esto permite acceder dichos recursos siempre igual con la misma IP (a no ser que se cambie…). Sin embargo, cuando buscas una determinada página o servicios, en tu navegador no introduces la IP del ordenador donde está alojada, sino algo más sencillo de recordar, introduces un nombre de dominio, como mascandobits.es. Adicionalmente he dicho que normalmente no se cambia la IP de la web o servicio, pero puede darse el caso por ejemplo de que se quiera mover la web o servicio a otra máquina que muy seguramente tenga otra IP pública. Gracias a las DNS este problema queda cubierto, ya que simplemente basta con asociar el dominio con la nueva IP pública.
Cuando escribes en tu navegador el nombre de una web o servicio, lo que hace tu ordenador es preguntar a tu servidor local DNS (el que te indica tu router por DCHP) por la dirección IP del ordenador donde está alojada esa página o servicio. El servidor DNS es una gran base de datos con infinidad de traducciones de nombres de dominio a dirección IP. Esa base de datos es distribuida y compartida con otros proveedores y sus respectivos servidores DNS. Si el nombre de dominio que estás buscando no está en tu DNS local, éste realizará una petición a otros DNS de la red hasta encontrar la traducción adecuada. Estas bases de datos guardan en caché durante unos días esas traducciones de nombre de dominio a IP, por eso a veces sucede que si una web o servicio cambia de servidor, puede que desde algunos lugares del planeta se acceda a la web o servicio y desde otros no, porque hay ordenadores que cuando preguntan por la página, el servidor DNS los envía a la antigua dirección IP y no a la nueva.
Además de los servidores DNS, nuestro ordenador también guarda un caché de las DNS, y si hemos visitado recientemente una página web, nuestro ordenador ya no preguntará al servidor cuál es la dirección IP de la página, sino que se dirigirá a la que ya tiene almacenada. Esta caché puede borrarse.
Para borrarla desde Windows:
Para borrarla desde GNU-Linux:
sudo /etc/init.d/nscd restart  //si usas nscd dns cache
sudo /etc/init.d/dnsmasq restart  //si usas dnsmasq dns cache
sudo /etc/init.d/named restart  //si usas bind dns cache
sudo /etc/init.d/bind9 restart  //(alternativa) si usas bind dns cache
Configurar servidor DNS caché
Las DNS constituyen la columna vertebral del funcionamiento de Internet y dado su función constituye un riesgo una mala gestión de los DNS globales que son gestionados por la ICANN, una asociación sin ánimo de lucro. Existen 7 llaves que dan acceso físico a los DNS y que se reparten entre 14 personas, 7 titulares y 7 suplentes. Son los garantes de que los DNS no sean atacadoso o modifcados de manera no deseada:
https://www.xataka.com/seguridad/la-seguridad-de-internet-depende-de-siete-llaves-maestras-custodiadas-por-14-personas
https://www.genbeta.com/seguridad/siete-llaves-y-un-destino-la-seguridad-de-internet-y-los-dns
Como puedes deducir el acceso a la resolución de DNS es algo que puede ser muy crítico. La ICANN sólo constituye el registro de una parte de Internet, aunque habitualmente se suelen usar sus DNS como referencia, ya que a su vez las operadoras que dan acceso a Internet (ISP) tienen sus propio DNS que van configurados en nuestro router y los cuales podemos cambiar por otros que sean de nuestro agrado.
Controlar las DNS y cómo se resuelven es algo que puede ser ventajoso, sobre todo si tenemos dentro de nuestra red local el servidor DNS y la resolución de dominios tiene una menor latencia. Para crear nuestro DNS caché lo podemos hacer con una Raspberry Pi conectada a nuestra red local de casa. Una Raspberry Pi consume como un móvil cargando y puede servirnos perfectamente para este cometido de acelerar las peticiones de resolución de DNS.
Accedemos a nuestra Raspberry Pi por SSH e introducimos el siguiente comando:
sudo apt-get install bind9 dnsutils
Con esto instalamos bind y además instalamos la herramienta dig (con el paquete dnsutil) que más adelante ya veréis para qué sirve.
Un vez instalado vamos a /etc/bind/named.conf.options, puedes configurarlo con el siguiente comando:
Lo puedes configurar con la siguiente información:
Es posible que tengas que quitar la // para que tenga efecto. Todo lo que va precedido con // se trata como un comentario. Yo he usado como forwarders las DNS de OpenDNS, pero puedes usar las que quieras o añadir otras.
Ahora recargamos las configuraciones con el siguiente comando:
Ya tenemos funcionando nuestro servidor DNS cacche. Para comprobar la diferencia de tiempos de resolución vamos a hacer la siguiente prueba. Vamos a resolver las peticiones contra las DNS de Google (8.8.8.8) (se asume que son de lo mejorcito 😉 ) y contra nuestro nuevo servidor DNS caché en la Raspberry Pi.
Introducimos el siguiente comando para comprobar el tiempo de respuesta para la resolución del dominio mascandobits.es con las DNS de Google:
dig mascandobits.es  @8.8.8.8
; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.9.5-9+deb8u13-Raspbian &amp;lt;&amp;lt;&amp;gt;&amp;gt; mascandobits.es @8.8.8.8
;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR, id: 28184
;mascandobits.es.               IN      A
mascandobits.es.        2684    IN      A       31.220.20.199
;; WHEN: Thu Oct 26 19:11:51 CEST 2017
Nos devuelve 42 msec, que no está anda mal, pero vamos a ejecutar lo mismo usando nuestro DNS de la Raspberry Pi. Lo haremos dos veces, ya que la primera vez le costará un tiempo similar, o algo mayor, ya que deberá ir a buscar la resolución del dominio a los forwarders que configuramos la primera vez, en mi caso a los DNS de OPenDNS. Para la segunda ejecución os debería salir algo así:
dig mascandobits.es  @127.0.0.1
; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.9.5-9+deb8u13-Raspbian &amp;lt;&amp;lt;&amp;gt;&amp;gt; mascandobits.es @127.0.0.1
;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR, id: 59435
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 7, ADDITIONAL: 14
mascandobits.es.        2575    IN      A       31.220.20.199
es.                     146250  IN      NS      a.nic.es.
es.                     146250  IN      NS      ns-ext.nic.cl.
es.                     146250  IN      NS      ns1.cesca.es.
es.                     146250  IN      NS      f.nic.es.
es.                     146250  IN      NS      ns3.nic.fr.
es.                     146250  IN      NS      sns-pb.isc.org.
es.                     146250  IN      NS      g.nic.es.
a.nic.es.               146250  IN      A       194.69.254.1
a.nic.es.               146250  IN      AAAA    2001:67c:21cc:2000::64:41
f.nic.es.               146250  IN      A       130.206.1.7
f.nic.es.               146250  IN      AAAA    2001:720:418:caf1::7
g.nic.es.               146250  IN      A       204.61.217.1
g.nic.es.               146250  IN      AAAA    2001:500:14:7001:ad::1
ns1.cesca.es.           146250  IN      A       84.88.0.3
ns1.cesca.es.           146250  IN      AAAA    2001:40b0:1:1122:ce5c:a000:0:3
ns3.nic.fr.             146250  IN      A       192.134.0.49
ns3.nic.fr.             146250  IN      AAAA    2001:660:3006:1::1:1
ns-ext.nic.cl.          146250  IN      A       200.1.123.14
sns-pb.isc.org.         146250  IN      A       192.5.4.1
sns-pb.isc.org.         146250  IN      AAAA    2001:500:2e::1
;; WHEN: Thu Oct 26 19:11:40 CEST 2017
;; MSG SIZE  rcvd: 495
Hemos bajado a 1 msec, que es bastante mejor que el tiempo de las DNS de Google. Además esto nos demuestra que se consigue bastante velocidad, en mi caso 42 veces más rápido para un dominio cacheado previamente por el servidor DNS de la Raspberry Pi.
Ahora para que todos los dispositivos de tu red usen estas nuevas DNS, lo más fácil es configurarlo en el router. Yo tengo un router de TP-Link, pero la configuración suele ser similar en todos los routers. Lo que nos interesa suele estar en la sección “DCHP”:
En el DNS Server he añadido la IP de la Raspberry Pi donde está el servidor DNS, es recomendable para ello que asignes IP estática a la Raspberry Pi. Hoy en día lo puedes hacer fácil desde el propio router asociando una IP privada a la MAC de la Raspberry Pi. El Secondary DNS Server lo he dejado con 0.0.0.0 para que lo resuelva contra el modem-router de proveedor de servicio a Internet (ISP). Esto hace que si la Raspberry Pi deja de funcionar, la red puede seguir resolviendo los dominios contra las DNS que me proporciona el router de mi ISP. Hay que cubrirse siempre 😉 !.
Con esto ya estaría listo, pero para dejarlo todo bien atado vamos a volver a la consola SSH de la Raspberry Pi para comprobar si bind arrancará al inicio si la apagas y enciendes. Para ello vamos a introducir el siguiente comando:
service bind9 status
● bind9.service - BIND Domain Name Server
Loaded: loaded (/lib/systemd/system/bind9.service; enabled)
Drop-In: /run/systemd/generator/bind9.service.d
└─50-insserv.conf-$named.conf
Active: active (running) since jue 2017-10-26 10:25:49 CEST; 5h 18min ago
Main PID: 17478 (named)
└─17478 /usr/sbin/named -f -u bind
Si en la línea de “Loaded” vemos al final “enabled”es que está activado como servicio al arranque. Si no fuera así bastaría con ejecutar el siguiente comando:
Si quieres ver de manera general todos los servicios que tienes corriendo puedes ejecutar:
Podremos ver los servicios que existen y si están arrancados o no.
Con esto ya queda tu red perfectamente configurada para usar tu propio servidor DNS caché alojado en tu Rapsberry Pi para toda tu red local y mejorar los tiempos de respuesta de la resolución de dominios.
posted by RDCH106 5 octubre, 2017 09:10 under Miscellaneous Opinión
Cada vez más frecuentemente me toca la típica charla del Software Libre y la importancia de la libertad que además tiene que ser a un coste 0, cosa que es imposible porque todo cuesta en la unidad que sea y quieras convertir. Yo estoy de acuerdo con la defensa de las libertades que protege el Software Libre pero no en su modelo de financiación altruista y mediante el formato de voluntariado. Esto hace insostenible el desarrollo del mismo al anteponer los intereses y libertades de colectivos de usuarios sobre los de los profesionales que desarrollan el Software Libre, que necesitan realizar una actividad de la que puedan vivir.
El problema no es la imposición de un modelo de financiación obligado que destruiría la esencia del Software Libre, sino la concienciación de que aquellos que están en condiciones de aportar lo hagan, ya sea con esfuerzo profesional o esfuerzo económico. Sólo difundir y usar no lo veo como un aporte porque es algo implícito sea el servicio o producto que sea, lo vas a hacer igual igual siempre y cuando sea de tu agrado el servicio o producto.
La cuestión de fondo no es la de ninguna libertad, sino la de intercambio de valor y cómo estos mecanismos permiten a un individuo desarrollarse individual y socialmente de manera digna.
Todos estamos de acuerdo más o menos en lo moralmente puro, de si algo es bueno o malo, si obviamos su contexto y las implicaciones particulares de cada uno. El problema viene de la interacción con otros individuos y ese intercambio de valor como comentaba. Para exponerlo comparto una reflexión hecha en una de mis abundantes disertaciones con todo aquel que quiera hacer un ejercicio de mayeútica.
El hecho de que un individuo establezca el valor del trabajo de un tercero a nivel particular de manera unilateral, crea un sistema injusto de valor individual, ya que el uso de criterios de tasación de valor individuales usando elementos de transmisión de valor socialmente aceptados como es el dinero, crea un marco que conlleva un empoderamiento excesivo del consumidor.
Del mismo modo es injusto todo PVP (Precio de Venta al Público) por la misma argumentación llevada al caso opuesto. Es decir, que un tercero con estatus de regulador establezca el precio para categorías de productos. Un caso sencillo de entender es la entrada del cine. Aunque todas las entradas al cine cuestan igual, no todas las producciones tienen el mismo presupuesto y tampoco se ha depositado la misma cantidad de dinero para su realización, por el que en principio se tasa su valor inicial. Esto hace que por ejemplo producciones más modestas que llegan al cine puedan tener un retorno más rápido que otra que tiene un presupuesto más alto en su producción. Si has seguido este argumento, estarás de acuerdo que todas las películas que hay en el cine no debería valer su entrada lo mismo atendiendo al coste de producción, dejando al margen el valor percibido y pagado por el consumidor.
Aquí hay un dilema, en un sistema el individuo y sus circunstancias establecen el precio y en el otro lo establece un PVP que lo pone un tercer organismo que hace de regulador; normalmente el propio estado, dependiente del estado, o una entidad externa negociado con el estado. Ambos suponen extremos opuestos en su planteamiento y pecan de sus bondades y deficiencias en sus extremos a partes iguales. ¿Pero si el valor se estableciera por su uso, dado su carácter implícito como valor?
El sistema de oferta y demanda funciona bien. Una señal del valor de algo con independencia del mecanismo de transmisión del mismo, es la demanda. La demanda inflaciona el precio de un servicio o producto y su opuesto la oferta, lo deflaciona. Constituye un sistema de valor implícito con mecanismos de control completos. Me explico.
Si algo se inflaciona demasiado, tiene un valor para el consumidor y la sociedad haciendo que el precio suba. El estado con mecanismos de articulación, protección y mediación, puede generar deflación de un tipo de producto o servicio generando empleo y favoreciendo la creación de empresas para aumentar la oferta de ese bien o servicio, por la simple razón de que el aumento del mismo baja el precio. Curiosamente este mecanismo propulsado por el ánimo de lucro se autoregula solo y proporciona un valor. El concepto es similar a como los mineros en la criptodivisas, en su afán de minar y conseguir la recompensa, hace que se procesen las transacciones en esa actividad que hace que una criptomoneda funcione. Pero no lo hace directamente por la convicción de que el sistema es bueno, sino por lucro o enriquecimiento. Y además este lucro provoca que otros también quieran hacerlo y eviten monopolios dentro del sistema gracias a la obtención de ganancias, que vuelve a repercutir en la propia red que tiene más velocidad y estabilidad.
Obviamente el precio de salida de bienes y servicios tiene que cubrir costes tanto del producto como del servicio, al igual que la minería en las criptodivisas sólo se realiza si la actividad cubre los costes eléctricos. En este último ejemplo se puede notar como países más pobres con costes de la electricidad más bajos, son los que hacen la actividad de minería, o en los que se hace la minería (atención al matiz). Esto vuelve a ser causa de la falta de referencia real del valor de las divisas fiat, sujetas directamente a la falta de escasez e impulsadas únicamente por la confianza obligada del gobierno o entidad que emite la divisa.
Tras todo esto subyace la idea de la hipocresía de moverse a niveles internacionales usando marcos legales nacionales o comunitarios. Si el comercio y la economía es mundial tienen que ser mundiales, únicos y sostenibles, porque de lo contrario favorece posiciones de poder y de autoridad que aprovechan la singularidad de cada marco legislativo, que es lo que pasa ahora.
Para cerrar entro en el concepto gratis. Tras todo lo expuesto, evidentemente, con un sistema como el planteado de tasación de valor por sistema de mercado (oferta y demanda) basado en blockchain para gestionar la actividad y también como mecanismo de transmisión de valor (divisa), seguiría existiendo el concepto de gratuidad. Existirá por el mero hecho de que simplemente se quiera ejercer un gasto para generar un bien o servicio sin pedir la contraprestación de un ingreso por los mismos que lo compense o genere un beneficio. Pero lo que sí será evidente es quién asume el gasto, siendo un concepto de gratuidad sutilmente distinto al que tenemos ahora, por la simple razón de que existe un sistema de valor real para todo bien y servicio.
Además creo que se quitarían prácticas del tipo, como es gratis lo quiero y hasta lo uso. Pero si algo gratis lo quieres y además lo usas es porque implícitamente tiene valor y por tanto habría que igualar precio con valor. Sólo si el que da el servicio o bien te lo quiere dar gratis, asumiendo costes, lo hará, sino no. Un ejemplo claro es el filántropo Pavel Durov impulsor de Telegram, que es el que paga toda la factura de gastos del servicio para que sea gratis, y no existe una factura oculta que pagas de otra forma, como pueden ser los datos de uso o personales.
Conclusión: Todo debería tener un precio representativo de su valor y coste con independencia de que se pague la contraprestación o que se asuma por parte del individuo o entidad, no generando el debido retorno y siendo en consecuencia un gasto.
“Sólo un ignorante confunde precio con valor”
96Public Repos18Public Gists29Followers
Archivos Elegir mes enero 2018 (1) diciembre 2017 (1) noviembre 2017 (1) octubre 2017 (2) septiembre 2017 (1) julio 2017 (2) junio 2017 (1) mayo 2017 (1) marzo 2017 (3) febrero 2017 (2) enero 2017 (1) diciembre 2016 (3) noviembre 2016 (3) octubre 2016 (2) septiembre 2016 (3) julio 2016 (2) junio 2016 (3) mayo 2016 (3) abril 2016 (4) marzo 2016 (4) febrero 2016 (5) enero 2016 (2) diciembre 2015 (1) noviembre 2015 (3) octubre 2015 (3) septiembre 2015 (2) julio 2015 (4) junio 2015 (6) mayo 2015 (6)
Categorías Elegir categoría Aplicaciones (10) Invitados (2) Miscellaneous (21) Programación (25) Tips (20)

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución