Entradas

Xamarin - Lecciones aprendidas 3

Imagen
Esta es la tercera parte de las lecciones aprendidas con Xamarin. Aquí están la primera y la segunda . Quiero insistir, especialmente en este post, que no quiero hablar de "buenas prácticas" sino de cosas que me han ayudado a solucionar situaciones específicas. Esta vez son los códigos QR como opción para "iniciar sesión" en las apps. Autorización usando QR. Algunas apps tienen un portal para mostrar reportes, modificar parámetros, registrar usuarios, etc. que ya está protegido por contraseña. Ese portal se puede aprovechar para mostrar un código QR que contiene el token de autorización para consumir servicios web. Es como "implementar la segunda parte de OAuth2" ( aquí está bien explicado todo el protocolo OAuth2 ). Esto fue lo que hice: Genero el código siguiendo la documentación de asp.net core sobre Hash Codes y me aseguro que sólo el usuario autorizado pueda verlo, usando Authorization Handlers . Tiene nombre de la app, el id del recurs...

Xamarin - Lecciones aprendidas 2

Esta es la segunda parte de las lecciones aprendidas con Xamarin. Aquí está la primera parte . API Keys, URLs y otras variables importantes: Las API Keys , App URLs , Client IDs , etc. se deben manejar con mucho cuidado, especialmente para no publicarlas en repositorios de git , svn o tfs . Ese error es todo un dolor de cabeza. Todavía estoy buscando la forma de utilizar variables de entorno en proyectos Xamarin desde Visual Studio for Mac. La idea es definir variables por consola (ej. export MY_AZURE_URL=https://myazureurl.azurewebsites.net ) y luego usarlas en la aplicación (ej. var myAzureUrl = Environment.GetEnvironmentVariable("MY_AZURE_URL"); ), como en cualquier framework web decente. En Xamarin es distinto porque Environment.GetEnvironmentVariable() lee variables locales, en este caso del teléfono, en lugar de cargarlas durante la compilación. Y Visual Studio for Mac todavía no tiene funciones "tan avanzadas". Por ahora hago lo siguiente: Creo ...

Xamarin - Lecciones aprendidas 1

Imagen
Llevaba un tiempo haciendo aplicaciones nativas para Android y hace más o menos un año empecé a utilizar Xamarin (Forms) para casi todos mis desarrollos móviles. Aquí voy a documentar algunas lecciones aprendidas de cosas que quizá sean muy básicas y a veces obvias, pero que me pusieron en apuros. No es mi intención hablar de soluciones ideales ni de buenas prácticas, sino dar pistas de la forma en que abordé cada situación. Ponerle atención al tamaño de las imágenes: Para una app con muchos íconos y botones redondos, utilicé el plugin Xam.Plugins.Forms.ImageCircle . En algún ejemplo vi que usaban imágenes de 500x500px dentro de un marco de 700x700px, que da un borde de 200px por cada lado, así: Parking by Arthur Shlain from the Noun Project Esa relación de aspecto es ideal para las imágenes, porque al ponerles fondo transparente y ubicarlas en el ImageCircle , se ven muy bien: check in by Chinnaking from the Noun Project checkout by Chinnaking from the Noun Project ...

Tareas automatizadas con Visual Studio Code

Visual Studio Code es el editor que uso para programar. Una de las características que más me gusta es que se pueden integrar herramientas externas utilizando tareas . Las tareas permiten ejecutar comandos para deployment , revisión de estilo, pruebas unitarias, entre otros, directamente desde el editor. Hago muchos programas en Python , y tres tareas que siempre configuro son: run para ejecutar scripts, pep8 para revisar estilo y test para correr pruebas unitarias. Este es mi archivo tasks.json : {     "version": "0.1.0",     "osx": {         "command": "sh",         "args": ["-c"]     },     "windows": {         "command": "cmd",         "args": ["/C"]     },     "isShellCommand": true,     "suppressTaskName": true,     "show...

Convierta Visual Studio en el mejor IDE para Python con PTVS

Imagen
Python Tools for Visual Studio (PTVS) es una herramienta que hace parte del Azure Machine Learning Group que nos permite extender el IDE para hacer scripts y otros proyectos en Python. Incluye intellisense, debugging, virtualenv, testing y templates para Bottle, Django, Flask e integración con Azure. En este post exploraremos algunas de sus características. La plantilla para proyectos web con Django tiene Bootstrap integrado. Plantillas de proyectos incluidas en PTVS. Todo desarrollador debe manejar adecuadamente su entorno de ejecución y ser muy cuidadoso en la instalación de paquetes, porque si tiene varios paquetes en entornos distintos pueden presentarse errores de cross threading . Yo utilizo la distribución Anaconda que ya tiene un grupo de paquetes para análisis de datos y computación científica, dos campos en los que se utiliza mucho Python. Sin embargo, es común tener dos o más intérpretes instalados. PTVS permite crear entornos virtuales ( virtualenv ) independientes ...

Programas de relacionamiento Microsoft

Imagen
En el segundo semestre de 2006, Sergio Victorio, uno de los integrantes del equipo de relacionamiento académico y divulgación de nuevas tecnologías de Microsoft Colombia llegó a la Universidad Icesi junto a Roberto Erazo, un estudiante de la Universidad del Cauca para presentarnos los programas de relacionamiento académico y el concurso Imagine Cup. En la reunión todo era motivante: el viaje a India a la final mundial de IC2006, el programa de Microsoft Student Partners (MSP), las reuniones de integración en las oficinas de Microsoft, las técnicas para aprender rápidamente nuevas tecnologías, los vouchers de certificación, el acceso a software original de forma gratuita, las oportunidades laborales, entre otras. Yo era un estudiante de 6º semestre de Ingeniería Telemática y me gustaba mucho el desarrollo de software, así que no dudé en apostar por esa oportunidad. En el segundo semestre de 2014, 8 años después y ante un público modesto típico de las últimas semanas de clase en la unive...

Error "Fatal Python error: PyThreadState_Get: no current thread" on GNU Radio

If you're getting the error "Fatal Python error: PyThreadState_Get: no current thread" while running GNU Radio on Mac OS X, is because you've OOT modules installed in a wrong way. If you installed GNU Radio using MacPorts and the OOT modules from source, both are using different Python threads (the port's version and the apple's version). To solve that issue, just set the PYTHON_LIBRARY variable while installing the modules: cmake -DPYTHON_LIBRARY=/opt/local/lib/libpython2.7.dylib .. And remember to set the variables in ~/.profile to load the modules on GRC: export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH export GRC_BLOCKS_PATH=/usr/local/share/gnuradio/grc/blocks