La educación es la clave del éxito.
The Rise and Fall of Android Tablets
One of the most exciting stories in the modern
tech industry is that of tablets. Back in 2010, when the touchscreen smartphone
revolution was in full swing, the introduction of iPad by Apple sparked immense
interest in tablets. After all, we were getting accustomed to touch devices
fully, and a large touchscreen not only seemed futuristic but also promised a
lot of real-world uses. There is a huge difference in the smartphones used
during the early days and the ones being used now.
These screens posed a challenge for many
real-world scenarios. Actions, such as typing and media consumption weren’t
exactly pleasing. But tablets, with its giant screens, seemed like the answer
to those woes. With their large screens, watching movies, typing on virtual
keyboards and playing mobile games would become so much more appealing. Even
web browsing would be a breeze on a large screen. Students looking for a
dissertation writing service would not need to power up a PC to search for the
service.
At one time, tablets were so popular that they
were perceived as the tech that would make laptops obsolete. We know now that
this notion was quite far-fetched, and it failed miserably. The tablet market
today is almost dead, even with Apple’s iPad being quite popular. Probably the
biggest failure in the tablet market has been that of Android tablets. Today,
what used to be a thriving space of Android tablets has been reduced to just a
handful of options. The hope for Android tablets has diminished to the point
that Google itself stopped supporting its latest Android tablet, and announced
its exit from the tablet market.
Poor Tablet Optimisation
Probably the biggest reason for the downfall of
Android is the platform’s fragmentation. To understand that, we need to know
how Apple and its iOS differs from Android. Unlike Android, Apple is a company
that’s much more closed off. It controls its software and hardware itself. By
being in control of every aspect of its devices, Apple can optimise everything
correctly. That is why iPad is such a hit even today, with it enjoying the
significant tablet market share.
The story is quite different on the Android side
of things. Android is an open-source operating system. What this essentially
means is that anyone can take Android, make some customisations, and install it
on their device. The way Google makes money from Android is by offering its
services over Android. Anyway, what Android’s open-source nature means for
Android is that it doesn’t have as much control over it as Apple has with its
OS.
For earlier tablets, Google made the mistake of
running the same version of Android on tablets as it did on phones. But Android
software wasn’t optimised for the large tablet screens. And neither were the
apps available at the time; this inevitably led to usability issues. Google did
try to fix the problem by introducing a version of Android specially made for
tablets. While it was a perfect response from Google, it posed another
challenge.
App developers who had already been making apps
for Android smartphones and the Android OS running on it didn’t warm up to the
idea of making their apps compatible with another version of Android for
tablets. Due to the added cost of developing apps for different versions of the
same OS, many developers opted to forego optimising apps for tablets altogether
and focused on smartphones itself. After all, the majority of users had
smartphones. Hence the potential to earn more came from smartphones.
The Rise of Phablets
The original appeal of tablets was always a way of
getting the best of both worlds, laptops and mobile phones. Tablets were meant
to be a medium between the two. But when Samsung took a gamble and launched its
Note series with an at the time substantial 5-inch screen, it was an instant
hit. The popularity of Note series can be seen as a significant contributing
factor to Android tablets’ downfall. It proved that users didn’t want to carry
around two devices, which mostly did the same thing, just in different sizes.
Smartphones with larger screens meant that users could do everything they did
on a tablet, on the phone itself.
2-in-1s
Another contributing factor to Android tablets’
downfall was the rise of 2-in-1 laptops. 2-in-1 laptops are, as the name
implies, an amalgamation of a computer and a tablet. They are necessarily
tablets with attachable docks or keyboards. They are great productivity tools
and are much more portable than laptops. Media consumption is still high,
thanks to the large screen size. Just like Phablets became a perfect medium
between tablets and smartphones, the 2-in-1 laptops became an ideal medium
between laptops and tablets.
Un programa a escala de Internet usando TAIGA
Source URL: http://cs.brown.edu/~spr/research/webview.html
Visión general
WebView es una visualización de cómo se está utilizando actualmente la web. Está diseñado para monitorear los sitios web que se están navegando actualmente y acumular esta información por categoría en una visualización significativa (e interesante). Al mismo tiempo, es una demostración del potencial del sistema de programación TAIGA .
Para que esta visualización sea interesante y efectiva, necesitamos que la gente la use. Por lo tanto, le recomendamos que descargue, instale y ejecute el software.
La pantalla
Desde el punto de vista de los usuarios, webview es un simple script que presenta una visualización categorizada de lo que las personas están navegando actualmente. A continuación se muestra una muestra de muestra:
La pantalla consta de anillos concéntricos, cada uno de los cuales representa un período de tiempo que va desde un minuto hasta varios días. Cada anillo se divide en regiones que reflejan una sola categoría de páginas web. (Actualmente utilizamos la clasificación de OpenDirectory, pero cualquier categorización funcionaría). Las categorías están ordenadas alfabéticamente, en sentido contrario a las agujas del reloj desde la posición de las 3 en punto (lo que tiene sentido para los matemáticos al menos). Los colores son arbitrarios, pero se eligen para maximizar la diferencia entre categorías posiblemente adyacentes. Dentro de cada área de categoría hay una línea ondulada que codifica información sobre las páginas que se están viendo en esa categoría. La pantalla se actualiza cada minuto más o menos.
La pantalla proporciona al usuario varios tipos de información. El intervalo de arco para cada categoría es proporcional al número de vistas (páginas solicitadas por un navegador) de las páginas de esa categoría durante el intervalo de tiempo. El matiz de la región denota la categoría; La saturación de la coloración refleja el número relativo de vistas. Por lo tanto, si un intervalo tiene relativamente pocas vistas (donde relativo se basa en la cantidad de tiempo que cubre el intervalo frente al historial general), entonces la región será más clara; Si el intervalo tiene muchas vistas, el intervalo será más oscuro. La propia línea ondulada puede codificar el número relativo de direcciones URL distintas durante el intervalo de tiempo en la frecuencia de la línea. Por lo tanto, si todas las páginas vistas para una sola categoría fueran de una sola URL, la línea sería plana; Si cada uno fuera distinto, la línea sería bastante ondulada. El grosor de la línea se utiliza para reflejar el número relativo de usuarios que navegan por las páginas de esa categoría. Si toda la navegación fuera realizada por un solo usuario, la línea sería bastante delgada; si corresponde a muchos usuarios distintos, la línea sería gruesa.
La pantalla también puede codificar información en el brillo (atenuado a negro) de los tramos y en la amplitud de las líneas. El usuario tiene la opción de cambiar las distintas propiedades de visualización a través de los cuadros de diálogo apropiados. Esto incluye cambiar la estadística asociada con cada propiedad gráfica, cambiar los colores asociados con las diferentes categorías, las categorías de mapeo y cambiar los diferentes intervalos.
Recopilación de información
Para poder mostrar información sobre lo que está sucediendo en la web, necesitamos recopilar la información. Por lo tanto, este programa es el software espía. Supervisa su historial de navegación e informa de las páginas que navega a un servidor central donde se clasifican y se registran las categorías. Sin embargo, el programa no registra información personal o de identificación. Los "usuarios" están representados por un ID aleatorio único que solo se utiliza para obtener los recuentos de usuarios. Las ID son arbitrarias y no se pueden rastrear hasta la fuente (que yo sepa). El software espía solo funciona cuando está ejecutando el visor y solo para el usuario que realiza la ejecución. Se proporciona la fuente completa si no cree lo que está sucediendo.
Tenga en cuenta que nuestra herramienta funciona en Windows, Linux y Mac OS / X con safari, Mozilla, IE y Opera en varias combinaciones. Si desea contribuir a los datos del proyecto pero no desea ejecutar el visualizador, le proporcionamos un script que solo ejecuta el monitor de historial.
Clasificación
El sistema nunca guarda URL o ID de usuario. En cambio, a medida que aprende sobre una página, encuentra la categoría adecuada y guarda periódicamente información sobre la cantidad de páginas, usuarios y URL para cada categoría. El sistema no descarga ni accede a una página para encontrar su categoría. En su lugar, intenta encontrar la categoría solo utilizando la URL.
Usando el framework TAIGA, permitimos múltiples implementaciones de clasificadores. Actualmente ofrecemos tres diferentes. Nuestro primer categorizador usó el servicio web de Google, y le pedimos a Google que buscara una página en particular y examinó la clasificación de Open Directory que Google devuelve como parte del resultado. Esto es limitado porque Google no quiere que llamemos al servicio web más de 1000 veces al día y porque no siempre reportan la clasificación, incluso para páginas relativamente comunes. Una alternativa es el MeURLin.proyecto. Tenemos un clasificador que habla con su página web de demostración (aún no tienen un servicio web configurado) y extrae el resultado. Esto es bastante efectivo (con diversos grados de precisión), pero aún es un poco lento para nuestros propósitos. Nuestro tercer clasificador lee la base de datos de directorio abierto al inicio y crea un árbol de clasificación para una URL. Una vez que se construye el árbol (que toma 15 minutos y 2G de memoria), la búsqueda es bastante rápida. Si bien los tres clasificadores están disponibles, y TAIGA es libre de elegir cuál es la mejor en un momento dado, la más probable es que se use uno en este momento.
Si alguien tiene un mejor clasificador o uno que le gustaría probar, me complacería integrarlo rápidamente en el sistema. Taiga permite que la implementación sea una biblioteca, un servicio de tipo cliente-servidor o un servicio web.
Almacenamiento de datos
Estamos utilizando las propiedades del sistema de archivos global de TAIGA para proporcionar el repositorio de información inicial. Los resultados acumulados de la recopilación de información se agregan periódicamente a un archivo de datos actual. Debido a que este archivo puede llegar a ser bastante grande, en realidad mantenemos un conjunto de archivos de datos donde los archivos están vinculados entre sí. Se proporciona un servidor separado para identificar el archivo actual para una hora de inicio determinada, para crear nuevos archivos a medida que los archivos de datos se vuelven demasiado grandes y para vincular los archivos entre sí. Este servicio se iniciará automáticamente (si aún no se está ejecutando) en una máquina en Brown.
Red
En el corazón de este proyecto se encuentra el sistema TAIGA. Cuando ejecute el visualizador, también estará ejecutando el kernel TAIGA en su máquina. Taiga utiliza el paquete JXTA peer-to-peer para proporcionar comunicación entre los distintos núcleos y servicios. En el inicio inicial probablemente verá (al menos por ahora) un cuadro de diálogo de configuración de JXTA. Si las cosas están funcionando, basta con hacer clic en Aceptar. Si está familiarizado con jxta, siéntase libre de modificar las distintas configuraciones. Usando JXTA, webview debería poder ejecutarse dentro de firewalls y en máquinas de arbitray. Si desea obtener un registro del kernel TAIGA mientras se ejecuta en su máquina, establezca la variable de entorno TAIGASHOW (en Windows) o establezca la variable de entorno TAIGALOG en la ruta completa de un archivo de registro apropiado.
Papeles
Aún no se ha escrito nada sobre este proyecto. Valoramos cualquier experiencia que tenga con él y agradecemos cualquier comentario por el momento (y si) escribimos un informe.
Realimentación
Este software es (muy) experimental. Hemos intentado realizar una variedad de instalaciones diferentes, pero solo tenemos una gama limitada de sistemas disponibles. Hay muchas cosas que pueden salir mal tanto en el kernel, en la aplicación, como en la red que une todo. Queremos arreglar las cosas, pero para hacerlo necesitamos saber qué no funciona (y posiblemente qué funciona). Agradecemos todos los comentarios, informes de fallos, sugerencias, comentarios, consultas, etc. Envíe un correo electrónico a spr@cs.brown.edu .
Software
Si se encuentra en ciencias informáticas de Brown, la última versión del software se puede obtener en / home / spr / tryview (Y: \ home \ spr \ tryview en windows).
Si está fuera de la red de Brown CS, puede obtener el software de nuestro servidor ftp en formato (tar.gz) o (zip) .
La instalación es simple: descargue y amplíe el software. Ejecutarlo también es simple: simplemente ejecute el script runview (o runview.bat en windows) para obtener el visualizador (para ejecutar solo el software de monitoreo use los scripts runspy).
Otra vez. Para descargar el software:
DESCARGAR webview.distrib.tar.gzDESCARGAR webview.distrib.zip
Bateando un objeto al objetivo
Source URL: http://robotics.cs.iastate.edu/ResearchBatting2D.shtml
Golpear un objeto en vuelo, como una pelota o un cuadrado, a una ubicación de destino es una maniobra hábil que requiere mucha práctica para que un ser humano aprenda. Para un robot, esta tarea desafía su detección, planificación y control en la medida en que se requiere una coordinación total en tan solo una fracción de segundo. La tarea consiste en lanzar un objeto contra un brazo robótico de dos eslabones con un bate adjunto y planear el movimiento del brazo para golpear el objeto a lo largo de una trayectoria, hacia el objetivo.
La dinámica de impacto modela el cambio en el movimiento del bate y el objeto, que produce un estado posterior al impacto del objeto que se puede evaluar sujeto a la restricción de volar al objetivo. En este trabajo, se considera el impacto bidimensional, en el que las trayectorias del brazo y el objeto del robot se limitan a un plano vertical. Luego se desarrolla una solución al problema del impacto inverso, en el que una trayectoria deseada del objeto después del impacto a través del objetivo conduce a un cambio deseado en su movimiento durante el impacto, y finalmente al movimiento de bateo necesario para producir el cambio. El siguiente video muestra los resultados de varias instancias de bateo.
El sistema de bateo
Para ejecutar con éxito la tarea de bateo, se deben realizar varios componentes adicionales del bateo, como la cinemática del manipulador, la mecánica de vuelo y la estimación del movimiento del objeto. La siguiente figura ilustra cómo estos componentes trabajan juntos en nuestro sistema de bateo:
Se considera la mecánica de proyectil de cada objeto, donde los efectos aerodinámicos de arrastre y Magnus se aproximan de la estimación de estado y se usan para predecir la trayectoria del objeto antes y después del impacto. Además, la cinemática del brazo robótico junto con Impact Dynamics contribuye con restricciones al algoritmo de planificación de movimiento, que continuamente genera una trayectoria conjunta deseada al brazo robótico.
Estimación de movimiento
La visión por computadora es un componente esencial de la tarea de bateo que es necesaria para que el robot perciba la posición y orientación del objeto mediante el procesamiento de imágenes desde una cámara, mientras que la estimación del movimiento es necesaria para rastrear las velocidades del objeto. Un estimador de movimiento híbrido se implementa empleando el ajuste de mínimos cuadrados de la orientación del objeto, y un filtro de Kalman extendido que considera las fuerzas aerodinámicas de arrastre y Magnus. La aerodinámica involucrada permite una predicción precisa de la trayectoria de la posición del objeto antes y después del impacto, lo cual es crucial para que el robot ejecute la tarea con una tasa de éxito respetable. Mientras tanto, el ajuste de mínimos cuadrados de la orientación del objeto proporciona una estimación de la velocidad angular una vez diferenciada. Esto compensa la falta de un modelo de velocidad angular,
Impacto de la fricción en 2D
El impacto entre el bate y el objeto se modela con impulso mientras se considera la ley de fricción de Coulomb. Se utiliza la restitución basada en la energía, de modo que durante el corto período de impacto, la energía cinética se transfiere parcialmente entre el bate y el objeto, y se pierde parcialmente por el calor, la luz, el sonido y otras formas de energía. Además, con la fricción considerada de acuerdo con la ley de Coulomb, el estado de contacto entre los dos objetos cambia dependiendo de sus velocidades y parámetros físicos, lo que da como resultado una combinación de objetos que se deslizan, se pegan y se invierten. La siguiente figura muestra un momento de impacto, así como dos casos diferentes de impacto en términos de sus curvas de impulso. Los objetos inicialmente se están deslizando, donde en el primer caso, se convierten en adherencia, y en el segundo caso, se desplazan hacia el deslizamiento inverso.
Planificación de impacto
La planificación del movimiento del brazo del robot consiste en determinar la posición y la velocidad del murciélago para satisfacer el impacto deseado, trasladarlos a posiciones y velocidades conjuntas a través de la cinemática inversa, y repetir este proceso para mantener el movimiento del robot actualizado y preciso. Además, durante el movimiento del brazo se debe garantizar que el robot no exceda los límites de posición, velocidad y aceleración de sus articulaciones. Estas restricciones combinadas con otras suman un total de dieciséis restricciones en el espacio de estados de brazo que pueden completar la tarea. Muchas de estas restricciones se propagan a lo largo de múltiples ciclos del algoritmo a medida que las trayectorias de la articulación del brazo se juntan para formar una spline de polinomios quárticos.
Para más información, nos remitimos a los siguientes artículos:
- Yan-Bin Jia, Matthew Gardner y Xiaoqian Mu. Bateando un objeto en vuelo al objetivo . Aceptado en International Journal of Robotics Research , 2017.
- Matthew Gardner, Yan-Bin Jia y Huan Lin. Bateando objetos voladores al objetivo en 2D . En Actas de la Conferencia Internacional IEEE / RSJ sobre Robots y Sistemas Inteligentes , pp. 3225-3232, Daejeon, Corea, 9-14 de octubre de 2016.
Un proceso para el diseño de datos XML
Jugadores claves. Jugadores principales
Estos son los actores clave en el desarrollo de un diseño de datos xml :
- Expertos en la materia ( SME s) : son personas que son expertos en un tema (dominio), pero no son necesariamente expertos en las tecnologías empleadas para implementar el dominio.
- Expertos en tecnología ( TE s) : estas son personas que son expertos en tecnologías, pero que no son necesariamente expertos en el tema.
- Facilitador : esta persona es responsable de que se escriba la especificación de los datos. Él es un te de negocios . No se requiere experiencia en el dominio. Esta persona debe ser cómodo llevar una discusión acerca de procesos y datos, debe ser experto en ocultar la complejidad de XML al mismo tiempo exponer la jerárquica, cardinalidad, y los aspectos básicos de tipos de datos de los requisitos de datos que son intuitivas para PYME s.
- Usuarios, personas orientadas a los negocios : son usuarios de aplicaciones que utilizarán los datos, junto con personas de negocios.
A continuación se muestra una secuencia de pasos (es decir, un proceso) para crear un diseño de datos xml .
Paso 1: Crear una especificación de datos
Una especificación de datos es un documento, escrito en prosa, que describe los datos y las relaciones entre los datos. Todas las implementaciones de datos - XML esquemas , schematron , Relax NG , dtd s, y otros - deben derivar de la especificación de datos. Además, todas las implementaciones de datos deben ser rastreables hasta la especificación de datos. Una especificación de datos es la especificación autorizada de los datos .
Los datos que están documentados por una especificación de datos pueden destinarse para su uso como un formato de intercambio de datos o para su uso en la gestión de datos dentro de una aplicación. Una especificación de datos se centra en los datos, no en procesos o arquitectura. Los detalles de cómo los datos se ajustan a la arquitectura general del flujo de datos del sistema se encuentran en otros documentos. Dicho esto, una especificación de datos es más que una simple lista de datos y definiciones (es decir, un diccionario de datos). Una especificación de datos contiene descripciones de cómo los datos se adaptan al sistema en general, tiene muchos ejemplos de cómo se utilizan los datos y muestra formas de muestra de los datos.
Al crear una especificación de datos, es importante obtener entradas de un conjunto diverso de personas. Diferentes personas tienen diferentes perspectivas sobre los datos. Nunca asuma que cualquier persona tiene el cuadro completo. Obtenga entradas de smes, te s, usuarios de aplicaciones que utilizarán los datos, así como de personas de negocios.
El primer paso para crear una especificación de datos es que el facilitador para reunir a las PYME s, te s, usuarios y personas de negocios con el fin de crear una especificación de datos. Aunque los "procesos" están fuera del alcance de una especificación de datos, a veces es importante ponerse de acuerdo sobre los procesos antes de discutir los datos. Por el contrario, a veces, discutir los datos primero ayuda a las personas a reconocer un problema de alineación del proceso.
El facilitador entrevista a los sme s. El te escucha las discusiones para ponerse al día en el dominio. Él puede ser capaz de proporcionar alertas tempranas de posibles problemas de implementación. Los usuarios y la gente de negocios mantienen la reunión basada en las necesidades prácticas de la aplicación. El facilitador escribe la especificación de datos; idealmente, está escrito en tiempo real, con todos en la reunión mirando en un retroproyector (o, si es una reunión virtual, todos ven el documento escrito en la pantalla de su computadora).
Al desarrollar la especificación de datos, es importante tener cuidado con la terminología holgada y ambigua. La especificación de los datos debe proporcionar una prosa clara e inequívoca que describa los datos.
Evite las discusiones de rendimiento. Eso pertenece a otra actividad, no a esta.
Dependiendo de la cantidad de datos que se especifiquen, puede llevar solo unas horas crear una especificación de datos, o puede tomar varios cientos de horas.
Ejemplo: una especificación de datos del libro
Un facilitador entrevista a un experto en libros (es decir, un sme de libro ), a medida que los asistentes , los usuarios y las personas de negocios intervienen. El resultado es una "especificación de datos del libro". Es un documento detallado y completo, que contiene prosa sobre lo que es un libro y los datos que caracterizan a un libro y las relaciones entre los datos. Aquí hay una tabla que resume de manera sucinta los datos y la jerarquía del dominio del libro:
Libro Autor ..... Cadena Título ...... Cuerda Fecha ....... año ISBN ....... Secuencia de dígitos, guiones y 'x' Editor .. Cadena
Paso 2: crear una o más implementaciones a partir de la especificación de datos
El te vuelve a leer cuidadosamente la especificación de los datos para asegurarse de que tiene una comprensión completa. A partir de él, crea una o más implementaciones, junto con ejemplos de documentos de instancia xml . Por ejemplo, puede crear un xml esquema más un schematron esquema. O bien, puede crear un esquema rdf .
Una implementación puede o no ser una asignación 1: 1 de la especificación de datos. Por ejemplo, una especificación de datos puede describir los datos en un formato tradicional entre padres e hijos, mientras que la implementación puede ser un gráfico rdf . O bien, una implementación puede incorporarse a una actividad más amplia que requiere una generalización de los datos. Por ejemplo, los datos de libros que se especifican en una especificación de datos de libros pueden incorporarse a un formato de intercambio multimedia más grande, tal vez requiriendo que "Libro" se generalice a "Producto".
Si no hay una correspondencia 1: 1 entre una implementación y la especificación de datos, entonces debe haber una manera de mapear entre la implementación y la especificación de datos. Esto es importante para la trazabilidad.
El te debe tener en cuenta los tipos de procesamiento que se espera que las aplicaciones realicen en los datos. Ciertos diseños de datos pueden hacer que el procesamiento sea horriblemente ineficiente, mientras que otros diseños pueden hacer que el procesamiento sea muy eficiente.
Ejemplo: Libro XML Schema y XML instancias
La especificación de los datos del libro se entrega a un te para que cree unaimplementación de datos xml ; específicamente, un esquema xml .
El esquema xml declara un elemento <book> que se compone de elementos <author> , <date> , <isbn> y <publisher> . Los ejemplos de documentos de instancia xml se crean y validan contra el esquema.
Paso 3: Revisar la implementación
El te muestra y describe las instancias de implementación y de ejemplo xml al grupo ( sme s, usuarios, gente de negocios y facilitador). El grupo ahora puede ver cómo la especificación de los datos fue interpretada por el te y evalúa las estructuras resultantes. El te solicita una aclaración sobre los datos y las relaciones de datos que se encontraron poco claras durante el desarrollo de la (s) implementación (es).
Paso 4: Aclare y ajuste la especificación de datos
Sobre la base de las discusiones en el Paso 3, se realizan ajustes a la especificación de los datos.
Paso 5: Iterar
El te hace revisiones a la (s) implementación (es) en base a la especificación de datos actualizada, y crea nuevos ejemplos de documentos de instancia XML . Las nuevas implementaciones y las muestras se devuelven al grupo. Se realizan actualizaciones a la especificación de los datos.
Repita tantas veces como sea necesario.
Expresiones de gratitud
Gracias a las siguientes personas por su aporte a este documento:
- Len bullard
- Kurt Cagle
- Marcus carr
- Chin Chee-Kai
- Roger Costello
- Jonathan doughty
- Fraser Goffin
- Jeff Grief
- Erick Hagstrom
- Peter Hunsberger
- Michael Kay
- Robert Koberg
- Franco manola
- Bob Natale
- Dave Pawson
- Simon St. Laurent
- B. Tommie Usdin
- Jim Wilson
Subscribe to:
Posts (Atom)
The Rise and Fall of Android Tablets
One of the most exciting stories in the modern tech industry is that of tablets. Back in 2010, when the touchscreen smartphone revolution ...
-
URL de origen: http://www.columbia.edu/cu/computinghistory/eniac.html Dos programadores tempranos (Gloria Ruth Gordon [Bolotsky] y E...
-
Jugadores claves. Jugadores principales Estos son los actores clave en el desarrollo de un diseño de datos xml : Expertos en la mate...
-
English Version : https://webtips.dan.info/force.html CONSEJO: entienda que el HTML no puede "forzar" ningún tipo de acción, y ...