La versión 11.1 de Apache NetBeans fue liberado, la primera versión que se lanzará después de convertirse en un proyecto de top level de Apache.
La nueva versión cuenta con soporte para la sintaxis Java 11 y 12, así como una estrecha integración con los proyectos Jakarte EE / Java EE 8 a través de los servidores de aplicaciones Payara y Glassfish. Los proyectos se pueden crear directamente a través de Maven y Gradle, utilizando el nuevo arquetipo webapp-javaee8. Esto permite a los desarrolladores trabajar y depurar aplicaciones completamente a través de los sistemas de compilación nativos, en lugar de un archivo de proyecto separado que emula al sistema de compilación.
Los desarrolladores de aplicaciones móviles o de escritorio pueden aprovechar la contribución de Gluon de las muestras de OpenJFX en NetBeans. Combinado con la comunidad GraalVM, OpenJFX permite a los desarrolladores codificar en Java y crear ejecutables nativos que se ejecutan directamente en dispositivos móviles. Usando NetBeans, los desarrolladores pueden crear y depurar estas aplicaciones antes de la implementación dentro de las tiendas de aplicaciones móviles. NetBeans también contribuyó a la creación de GraalVM este permite la visualización de gráficos de dependencia de programas, basados en la plataforma NetBeans.
NetBeans tambien ofrece soporte para el desarrollo JavaScript en el lado del cliente o servidor, así como soporte nativo para aplicaciones PHP 7.4.
Y ya podemos bajarlo dejo link :
https://netbeans.apache.org/
http://netbeans.apache.org/download/nb111/index.html
Translate
martes, 23 de julio de 2019
domingo, 21 de julio de 2019
Primeros pasos con Flutter parte 2, la venganza de Flutter
Ahora voy a utilizar Android studio. Ya aprendi la lección lo mejor es utilizar Android Studio si queremos renegar menos. Antes que nada debemos instalar el sdk, como lo instalamos en el post anterior.
Primero instalar android studio, se puede bajar de aquí o yo en mi caso lo instale del market de linux:
Al iniciar android studio vamos a intalar el plugin de flutter :
Ahi elegimos el plugin de flutter :
Y nos va a pedir instalar el plugin de Dart y le decimos que si.
Y luego reniciamos la IDE.
Ahora ponemos new Flutter Project. Y le metemos...
Como se puede ver en las imagenes es un wizard muy simple. Lo único para destacar es que tenemos que indicar donde se instalo la sdk de fluter.
Con este proyecto, el wizard crea un proyecto de ejemplo. Así que ya tenemos nuestro ejemplo ahora prodremos probarlo, peeeeeero antes debemos crear un dispocitivo a donde probarlo. Ahora tenemos que ir a AVD manager y crear el device. El wizard es simple tambien, tenemos que elegir el tipo de dispositivo, luego el sistema operativo, si no tenemos instalado ninguno te permite bajar alguno,
Y con el dispositivo, ahora si podremos probar nuestra aplicación. Listo, para cerrar el post vamos a ejecutar la aplicación y ver como funciona. Y funciona!!!
Primero instalar android studio, se puede bajar de aquí o yo en mi caso lo instale del market de linux:
Al iniciar android studio vamos a intalar el plugin de flutter :
Ahi elegimos el plugin de flutter :
Y nos va a pedir instalar el plugin de Dart y le decimos que si.
Y luego reniciamos la IDE.
Ahora ponemos new Flutter Project. Y le metemos...
Como se puede ver en las imagenes es un wizard muy simple. Lo único para destacar es que tenemos que indicar donde se instalo la sdk de fluter.
Con este proyecto, el wizard crea un proyecto de ejemplo. Así que ya tenemos nuestro ejemplo ahora prodremos probarlo, peeeeeero antes debemos crear un dispocitivo a donde probarlo. Ahora tenemos que ir a AVD manager y crear el device. El wizard es simple tambien, tenemos que elegir el tipo de dispositivo, luego el sistema operativo, si no tenemos instalado ninguno te permite bajar alguno,
Y con el dispositivo, ahora si podremos probar nuestra aplicación. Listo, para cerrar el post vamos a ejecutar la aplicación y ver como funciona. Y funciona!!!
jueves, 18 de julio de 2019
Indices secundarios en Cassandra
Si intentamos filtrar una tabla por una columna que no es parte de la clave primaria, no tendremos éxito, veamos un ejemplo :
cqlsh:my_keyspace> SELECT * FROM user WHERE last_name = 'Goette';
InvalidRequest: code=2200 [Invalid query] message="No supported
secondary index found for the non primary key columns restrictions"
El mensaje de error es claro, nosotros necesitamos crear un indice secundario, para la columna last_name. Los indices secundarios no son parte de la clave primaria y nos permiten filtrar por estos campos.
cqlsh:my_keyspace> CREATE INDEX ON user ( last_name );
Nosotros podemos darle un nombre al indice con la sintaxis :
CREATE INDEX <name> ON... ;
Si no especificamos el nombre, automáticamente utiliza el nombre :
<table name>_<column name>_idx
Ahora vamos a hacer el mismo select :
cqlsh:my_keyspace> SELECT * FROM user WHERE last_name = 'Nguyen';
first_name | last_name
------------+-----------
Bill | Nguyen
(1 rows)
Se pueden crear indices para tipos simples y colecciones, los mapas se pueden indexar por clave, por valor o por ambos.
Por último podemos remover un indice con drop index, por ejemplo :
cqlsh:my_keyspace> DROP INDEX user_last_name_idx;
Los indices secundarios no son recomendados para los siguientes casos:
- Columnas muy grandes
- Columnas con valores poco diferentes como por ejemplo titulo, los valores serán (señor, señorita, …)
- Columnas que son actualizadas con mucha frecuencia.
martes, 16 de julio de 2019
Definir nuestros propios datos en Cassandra
Muchas veces debemos guardar datos compuestos, como direcciones, identificación, telefono, etc. Una forma es guardarlo todo en una columna de texto, pero luego vamos a tener que parcear, los resultados. Sería mejor si pudiéramos definir una estructura en la que almacenar por ejemplo las direcciones para mantener la integridad de los diferentes componentes.
Afortunadamente, Cassandra nos da una manera de definir nuestros propios tipos. Luego podemos crear columnas de estos tipos definidos por el usuario. Vamos a crear nuestro propio tipo de dirección, insertando algunos saltos de línea en nuestro comando para facilitar la lectura:
qlsh:my_keyspace> CREATE TYPE address (
... street text,
... city text,
... state text,
... zip_code int);
Podríamos haber escrito CREATE TYPE my_keyspace.address. Si ejecuta el comando DESCRIBE KEYSPACE my_keyspace, verá que el tipo de dirección es parte de la definición del espacio de claves.
Ahora que hemos definido nuestro tipo de dirección, intentaremos usarlo en nuestra tabla de usuarios, pero inmediatamente nos encontramos con un problema:
cqlsh:my_keyspace> ALTER TABLE user ADD addresses map<text, address>;
InvalidRequest: code=2200 [Invalid query] message="Non-frozen
collections are not allowed inside collections: map<text,
address>"
¿Que esta pasando aqui? Resulta que un tipo de datos definido por el usuario se considera una colección, ya que su implementación es similar a un conjunto, lista o mapa.
Las versiones de Cassandra anteriores a 2.2 no son totalmente compatibles con el anidamiento de colecciones. Específicamente, la capacidad de acceder a los atributos individuales de una colección anidada aún no se admite, ya que la colección anidada se serializa como un solo objeto por la implementación.
La congelación es un concepto que la comunidad Cassandra ha introducido como un mecanismo de compatibilidad hacia adelante. Por ahora, puede anidar una colección dentro de otra colección marcándola como congelada.
En el futuro, cuando las colecciones anidadas sean totalmente compatibles, habrá un mecanismo para "descongelar" las colecciones anidadas, permitiendo el acceso a los atributos individuales.
También puede usar una colección como clave principal si está congelada.
Ahora que hemos tomado un breve desvío para hablar sobre la congelación y las tablas anidadas, volvamos a modificar nuestra tabla, esta vez marcando la dirección como congelada:
cqlsh:my_keyspace> ALTER TABLE user ADD addresses map<text, frozen<address>>;
Ahora agreguemos una dirección de casa para Mary:
cqlsh:my_keyspace> UPDATE user SET addresses = addresses + {'home': { street: '7712 E. Broadway', city: 'Tucson', state: 'AZ', zip_code: 85715} } WHERE first_name = 'Mary';
Afortunadamente, Cassandra nos da una manera de definir nuestros propios tipos. Luego podemos crear columnas de estos tipos definidos por el usuario. Vamos a crear nuestro propio tipo de dirección, insertando algunos saltos de línea en nuestro comando para facilitar la lectura:
qlsh:my_keyspace> CREATE TYPE address (
... street text,
... city text,
... state text,
... zip_code int);
Podríamos haber escrito CREATE TYPE my_keyspace.address. Si ejecuta el comando DESCRIBE KEYSPACE my_keyspace, verá que el tipo de dirección es parte de la definición del espacio de claves.
Ahora que hemos definido nuestro tipo de dirección, intentaremos usarlo en nuestra tabla de usuarios, pero inmediatamente nos encontramos con un problema:
cqlsh:my_keyspace> ALTER TABLE user ADD addresses map<text, address>;
InvalidRequest: code=2200 [Invalid query] message="Non-frozen
collections are not allowed inside collections: map<text,
address>"
¿Que esta pasando aqui? Resulta que un tipo de datos definido por el usuario se considera una colección, ya que su implementación es similar a un conjunto, lista o mapa.
Las versiones de Cassandra anteriores a 2.2 no son totalmente compatibles con el anidamiento de colecciones. Específicamente, la capacidad de acceder a los atributos individuales de una colección anidada aún no se admite, ya que la colección anidada se serializa como un solo objeto por la implementación.
La congelación es un concepto que la comunidad Cassandra ha introducido como un mecanismo de compatibilidad hacia adelante. Por ahora, puede anidar una colección dentro de otra colección marcándola como congelada.
En el futuro, cuando las colecciones anidadas sean totalmente compatibles, habrá un mecanismo para "descongelar" las colecciones anidadas, permitiendo el acceso a los atributos individuales.
También puede usar una colección como clave principal si está congelada.
Ahora que hemos tomado un breve desvío para hablar sobre la congelación y las tablas anidadas, volvamos a modificar nuestra tabla, esta vez marcando la dirección como congelada:
cqlsh:my_keyspace> ALTER TABLE user ADD addresses map<text, frozen<address>>;
Ahora agreguemos una dirección de casa para Mary:
cqlsh:my_keyspace> UPDATE user SET addresses = addresses + {'home': { street: '7712 E. Broadway', city: 'Tucson', state: 'AZ', zip_code: 85715} } WHERE first_name = 'Mary';
Collections en Apache Cassandra
Como casandra no permite joins es muy dificil mantener relaciones como lo hariamos en una base SQL normal, por ejemplo si queremos mantener datos de un usuario y sus emails, una forma de hacerlo sería crear columnas adicionales, como email2, email3, etc.
Si bien este es un enfoque que funcionará, no escala muy bien y puede causar muchos cambios. Es mucho más simple tratar con las direcciones de correo electrónico como grupo o "colección". Cassandra hereda los tipos de Java por lo tanto tenemos Listas, conjuntos y mapas. Echemos un vistazo a cada uno de ellos:
set : El tipo de datos de conjunto almacena una colección de elementos. Los elementos no están ordenados, pero cqlsh devuelve los elementos en orden ordenado. Por ejemplo, los valores de texto se devuelven en orden alfabético. Los conjuntos pueden contener los tipos simples que revisamos en el post anterior, así como los tipos definidos por el usuario e incluso otras colecciones. Una de las ventajas de usar set es la capacidad de insertar elementos adicionales sin tener que leer el contenido primero.
Veamos un ejemplo de agregar un set de emails a la tabla usuario :
cqlsh:my_keyspace> ALTER TABLE user ADD emails set<text>;
Luego agregaremos una dirección de correo electrónico para Mary y verificaremos que se haya agregado con éxito:
cqlsh:my_keyspace> UPDATE user SET emails = {'mary@example.com' } WHERE first_name = 'Mary';
cqlsh:my_keyspace> SELECT emails FROM user WHERE first_name ='Mary';
emails
----------------------
{'mary@example.com'}
(1 rows)
Tenga en cuenta que al agregar esa primera dirección de correo electrónico, reemplazamos el contenido anterior del conjunto, que en este caso era nulo. Podemos agregar otra dirección de correo electrónico más tarde sin reemplazar todo el conjunto mediante concatenación:
cqlsh:my_keyspace> UPDATE user SET emails = emails + { 'mary.mcdonald.AZ@gmail.com' } WHERE first_name = 'Mary';
cqlsh:my_keyspace> SELECT emails FROM user WHERE first_name = 'Mary';
emails
---------------------------------------------------
{'mary.mcdonald.AZ@gmail.com', 'mary@example.com'}
(1 rows)
list : El tipo de datos de lista contiene una lista ordenada de elementos. Por defecto, los valores se almacenan en orden de inserción (es decir por un indice). Modifiquemos nuestra tabla de usuarios para agregar una lista de números de teléfono:
cqlsh:my_keyspace> ALTER TABLE user ADD phone_numbers list<text>;
Luego agregaremos un número de teléfono para Mary y verificaremos que se haya agregado correctamente:
cqlsh:my_keyspace> UPDATE user SET phone_numbers = ['1-800-999-9999' ] WHERE first_name = 'Mary';
cqlsh:my_keyspace> SELECT phone_numbers FROM user WHEREfirst_name = 'Mary';
phone_numbers
--------------------
['1-800-999-9999']
(1 rows)
Agreguemos un segundo número añadiéndolo:
cqlsh:my_keyspace> UPDATE user SET phone_numbers = phone_numbers + [ '480-111-1111' ] WHERE first_name = 'Mary';
cqlsh:my_keyspace> SELECT phone_numbers FROM user WHERE first_name = 'Mary';
phone_numbers
------------------------------------
['1-800-999-9999', '480-111-1111']
(1 rows)
El segundo número que agregamos ahora aparece al final de la lista.
Podemos reemplazar un elemento individual en la lista cuando lo referenciamos por su índice:
cqlsh:my_keyspace> UPDATE user SET phone_numbers[1] = '480-111-1111' WHERE first_name = 'Mary';
Al igual que con los conjuntos, también podemos usar el operador de resta para eliminar elementos que coincidan con un valor específico:
cqlsh:my_keyspace> UPDATE user SET phone_numbers =phone_numbers - [ '480-111-1111' ] WHERE first_name = 'Mary';
Finalmente, podemos eliminar un elemento específico directamente usando su índice:
cqlsh:my_keyspace> DELETE phone_numbers[0] from user WHERE first_name = 'Mary';
map : El tipo de datos mapa contiene una colección de pares clave/valor. Las claves y los valores pueden ser de cualquier tipo excepto contador. Probemos esto utilizando un mapa para almacenar información sobre los inicios de sesión de los usuarios. Crearemos una columna para rastrear el tiempo de inicio de sesión en segundos, con un timeuuid como clave:
cqlsh:my_keyspace> ALTER TABLE user ADD login_sessions map<timeuuid, int>;
Luego agregaremos un par de sesiones de inicio de sesión para Mary y veremos los resultados:
cqlsh:my_keyspace> UPDATE user SET login_sessions = { now(): 13, now(): 18} WHERE first_name = 'Mary';
cqlsh:my_keyspace> SELECT login_sessions FROM user WHERE first_name = 'Mary';
login_sessions
-----------------------------------------------
{6061b850-14f8-11e5-899a-a9fac1d00bce: 13,
6061b851-14f8-11e5-899a-a9fac1d00bce: 18}
(1 rows)
También podemos hacer referencia a un elemento individual en el mapa usando su clave.
Los tipos de colección son muy útiles en los casos en que necesitamos almacenar un número variable de elementos dentro de una sola columna.
domingo, 14 de julio de 2019
restQL V3 fue liberado!!
Un momento cerebrito, que es RestQL?
RestQL es un lenguaje de consultas de microservicio que facilita la obtención de información de múltiples servicios de la manera más eficiente. Parecido a GraphQL. Para mayor detalle leete este post:
https://emanuelpeg.blogspot.com/2018/01/consultar-apis-rest-con-restql.html
Se ha lanzado la última versión de restQL que ofrece nuevas características notables que incluyen agregación de contenido, soporte para métodos HTTP adicionales, funcionalidad de recuperación automática y una versión para las aplicaciones node.js. Mejoras de rendimiento integrales que han hecho que la última versión sea dos veces más rápida que su predecesora. La versión 3 es compatible con la versión 2, por lo que los usuarios pueden actualizar de forma segura. El código para el proyecto de código abierto está disponible bajo una licencia MIT.
RestQL está destinado a simplificar el código de usuario que necesita consultar múltiples microservicios. Si bien una arquitectura de microservicios puede hacer que los sistemas de back-end sean más fáciles de soportar y mantener, una consecuencia común y no intencional es la complejidad adicional que se está introduciendo en la capa de aplicaciones de front-end. RestQL reduce la complejidad de la organización de llamadas a múltiples microservicios y aprovecha la funcionalidad de almacenamiento en caché del navegador nativo debido a su uso de llamadas HTTP estándar.
Una de las características definitorias de restQL ha sido las llamadas paralelas automáticas a recursos separados. Sin embargo, las respuestas individuales también se separarán, lo que requerirá que el cliente consolide los objetos relacionados, como un cliente con varios pedidos. En la última versión, el nuevo operador "in" permite al desarrollador especificar la estructura de agregación por adelantado en la consulta, lo que da como resultado un resultado único y combinado.
La última versión ofrece una mayor capacidad de recuperación del servidor restQL, que se encuentra entre los clientes y las API de microservicio. Cuando el sistema detecta que se está sobrecargando, introduce una forma de contrapresión. Un ajuste de configuración define el umbral para una sobrecarga de tiempo de procesamiento aceptable. Si se alcanza ese umbral, el sistema comenzará a devolver las respuestas HTTP 507 (almacenamiento insuficiente) para algunas solicitudes, mientras permite que una parte de las solicitudes continúe ejecutándose con éxito.
Las versiones anteriores de restQL solo admitían datos de consulta mediante el uso de la palabra clave from, que se traducía a una solicitud HTTP GET. V3 agrega el conjunto estándar de verbos HTTP para las operaciones CRUD, incluyendo POST, PUT y DELETE, a través de las palabras clave to, into y delete, respectivamente.
RestQL es un lenguaje de consultas de microservicio que facilita la obtención de información de múltiples servicios de la manera más eficiente. Parecido a GraphQL. Para mayor detalle leete este post:
https://emanuelpeg.blogspot.com/2018/01/consultar-apis-rest-con-restql.html
Se ha lanzado la última versión de restQL que ofrece nuevas características notables que incluyen agregación de contenido, soporte para métodos HTTP adicionales, funcionalidad de recuperación automática y una versión para las aplicaciones node.js. Mejoras de rendimiento integrales que han hecho que la última versión sea dos veces más rápida que su predecesora. La versión 3 es compatible con la versión 2, por lo que los usuarios pueden actualizar de forma segura. El código para el proyecto de código abierto está disponible bajo una licencia MIT.
RestQL está destinado a simplificar el código de usuario que necesita consultar múltiples microservicios. Si bien una arquitectura de microservicios puede hacer que los sistemas de back-end sean más fáciles de soportar y mantener, una consecuencia común y no intencional es la complejidad adicional que se está introduciendo en la capa de aplicaciones de front-end. RestQL reduce la complejidad de la organización de llamadas a múltiples microservicios y aprovecha la funcionalidad de almacenamiento en caché del navegador nativo debido a su uso de llamadas HTTP estándar.
Una de las características definitorias de restQL ha sido las llamadas paralelas automáticas a recursos separados. Sin embargo, las respuestas individuales también se separarán, lo que requerirá que el cliente consolide los objetos relacionados, como un cliente con varios pedidos. En la última versión, el nuevo operador "in" permite al desarrollador especificar la estructura de agregación por adelantado en la consulta, lo que da como resultado un resultado único y combinado.
La última versión ofrece una mayor capacidad de recuperación del servidor restQL, que se encuentra entre los clientes y las API de microservicio. Cuando el sistema detecta que se está sobrecargando, introduce una forma de contrapresión. Un ajuste de configuración define el umbral para una sobrecarga de tiempo de procesamiento aceptable. Si se alcanza ese umbral, el sistema comenzará a devolver las respuestas HTTP 507 (almacenamiento insuficiente) para algunas solicitudes, mientras permite que una parte de las solicitudes continúe ejecutándose con éxito.
Las versiones anteriores de restQL solo admitían datos de consulta mediante el uso de la palabra clave from, que se traducía a una solicitud HTTP GET. V3 agrega el conjunto estándar de verbos HTTP para las operaciones CRUD, incluyendo POST, PUT y DELETE, a través de las palabras clave to, into y delete, respectivamente.
Dejo link:
sábado, 13 de julio de 2019
Por qué deberías aprender Kotlin ?
Kotlin reventará tu productividad como desarrollador de Android.
Puedo entender que, si nunca has usado Kotlin antes, todavía puedes ser un poco reacio a creerlo. Pero pregúntale a cualquiera que haya comenzado a usarlo.
Es sorprendente la cantidad de código que ahorrarás y la simplicidad que aportará a tu vida. Te cuento algunas de las características:
- Los tipos de Nullable, que te ayudarán a reducir la cantidad de errores en tu aplicación.
- Las data classes, que reducen drásticamente el boilerplate requerido para las clases de entidades.
- Extension functions, que te ayudarán a evitar la creación de subclases y crear nuevas formas de escribir tus aplicaciones a través de DSL
- El uso de lambdas como tipos válidos también reduce el número de interfaces que necesitas escribir
- La expresión when hace que las condiciones sean más simples y fáciles de leer
- Sus increíbles colecciones y todos sus poderosos operadores funcionales.
- La promoción de la inmutabilidad.
Y podría seguir todo el día. Puede reducir tu código base hasta en un 40%.
Pero reducir la cantidad de LoC significa algo más importante: menos líneas significa menos código para mantener, menos código para testear y menos errores posibles.
Dejo link: https://kotlinlang.org/
jueves, 11 de julio de 2019
Libro Java Code Geeks
miércoles, 10 de julio de 2019
Primeros pasos con Flutter
Antes de empezar tenemos que bajarnos el SDK de aquí: https://flutter.dev/docs/get-started/install
Como tengo linux ;) debo bajar el siguiente archivo: flutter_linux_v1.5.4-hotfix.2-stable.tar.xz
Y luego de bajarlo debemos hacer :
mkdir ~/development
cd ~/development
tar xf ~/Downloads/flutter_linux_v1.5.4-hotfix.2-stable.tar.xz
Y luego agregamos flutter a la variable PATH y lo hago en el archivo .bash_profile :
export PATH="$PATH:`pwd`/flutter/bin"
La herramienta de flutter descarga los binarios de desarrollo específicos de la plataforma según sea necesario. Para los escenarios en los que es preferible descargar estos artefactos , los binarios de iOS y Android se pueden descargar por adelantado ejecutando:
flutter precache
Ejecute el siguiente comando para ver si hay dependencias que necesita instalar para completar la configuración:
flutter doctor
En este punto me dice que no tengo device, por lo tanto tengo que bajar la sdk de android. Para lo cual tengo que ir a este link : https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
A esta altura me doy cuenta que es más fácil con android studio, pero bueno... medio tarde :P
Luego de descomprimir el Sdk, hacemos :
cd tools/bin
./sdkmanager --update
./sdkmanager "platform-tools" "platforms;android-28"
./sdkmanager "system-images;android-25;google_apis;x86_64"
flutter config --android-sdk /path/to/android/sdk
Después hacemos
flutter doctor --android-licenses
Para solucionar un tema de licencia y luego
$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.5.4-hotfix.2, on Linux, locale es_AR.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[!] Android Studio (not installed)
[!] IntelliJ IDEA Community Edition (version 2016.3)
✗ Flutter plugin not installed; this adds Flutter specific functionality.
✗ Dart plugin not installed; this adds Dart specific functionality.
✗ This install is older than the minimum recommended version of 2017.1.0.
[✓] VS Code (version 1.35.1)
[!] Connected device
! No devices available
! Doctor found issues in 3 categories.
avdmanager create avd --package "android-28" --name "foo" -k "system-images;android-28;google_apis;x86_64"
Como voy a utilizar visual code instale el plugin de flutter :
Tenemos 2 caminos 1 usar visual code :
- Ir a View > Command Palette..
- Escriba "flutter", y seleccione Flutter: New Project.
- Ingrese un nombre de proyecto, como myapp, y presione Enter.
- Cree o seleccione el directorio principal para la nueva carpeta del proyecto.
- Espere a que se complete la creación del proyecto y aparezca el archivo main.dart.
o por consola :
flutter create myapp
cd myapp
flutter devices
flutter run
En la carpeta lib podremos encontrar el archivo main.dart que sera la función que se ejecute en mi aplicación.
Si hicimos la aplicación por consola podemos abrir la carpeta, luego.
Ahora a correr el ejemplo con consola será
flutter run
o por visual code, vamos a debug -> Start debug.
Puff por esta vez es demasiado....
martes, 9 de julio de 2019
El Blog cumple 10 años !!!
Si 10 años! El primer post fue el 09/07/2009 desde ese día han pasado 2079 post (más o menos) en diferentes tecnologías. Y siempre promoviendo los pilares del blog: conocimiento y software libre.
Los más puristas dirán que muchas veces ha publicado post de software privativo, pero es un blog personal y no puedo trabajar solo con software open source (por ahora)
El software ha avanzado un montón, linux sigue creciendo y muchas cabezas han cambiado, por suerte cada vez tenemos más espacio.
Sin más les agradezco, visitar el sitio!!
Nos leemos.
domingo, 7 de julio de 2019
Ya podemos bajar, Debian 10 Buster !!!
Después de más de dos años de preparación, la espera llega a su fin. Debian 10 Buster ya esta listo para su descarga en versión final.
Como nos tiene acostumbrados la nueva versión de Debian viene con muchas mejoras y grandes actualizaciones que pasamos a enumerar
Escritorios de Debian 10:
- Cinnamon 3.8
- GNOME 3.30
- KDE Plasma 5.14
- LXDE 0.99.2
- LXQt 0.14
- MATE 1.20
- Xfce 4.12
En esta versión GNOME es el escritorio predeterminado y trabaja sobre un servidor de gráficos Wayland en vez de Xorg. El uso de Wayland es más simple y ofrece más seguridad. De todas formas, Xorg aún se instala de forma predeterminada, por tanto si lo quieres seguir utilizando lo puedes modificar en el inicio de sesión.
Linux Kernel 4.19.0-4: Debian utiliza versiones de kernel LTS, por tanto nos ofrece un excelente soporte de hardware y un ciclo de vida de cinco años.
OpenJDK 11.0: Por fin se muda de OpenJDK 8.0 a OpenJDK 11.0.
AppArmor como predeterminado: Es una excelente noticia, pero cuidado con habilitar las políticas correctas.
Nuevo Tema para Debian 10: El nuevo tema de escritorio futurePrototype nos brinda un nuevo concepto de diseño, nuevas ideas y con logos limpios y suaves.
Ademas de lo ya nombrado se actualizan una gran cantidad de paquetes, por ejemplo:
Apache 2.4.38
BIND DNS Server 9.11
Chromium 73.0
Emacs 26.1
Firefox 60.7 (en el paquete firefox-esr)
GIMP 2.10.8
GNU Compiler Collection 7.4 y 8.3
GnuPG 2.2
Golang 1.11
Inkscape 0.92.4
LibreOffice 6.1
Linux 4.19.x
MariaDB 10.3
OpenJDK 11
Perl 5.28
PHP 7.3
PostgreSQL 11
Python 3 3.7.2
Ruby 2.5.1
Rustc 1.34
Samba 4.9
systemd 241
Thunderbird 60.7.2
Vim 8.1
Bash 5
etc…
Tal vez las actualizaciones más importantes de Debian 10 para desarrolladores son Python 3.7.2 (ya no viene con Python 2) , PHP 7.3 y la OpenJDK 11
Con respecto a las base de datos, MariaDB 10.3 y PostgreSQL 11
Dejo link: https://www.debian.org/index.es.html
https://www.debian.org/News/2019/20190706
jueves, 4 de julio de 2019
Por qué aprender Python??
Las ventajas que presenta el uso de Python son las siguientes:
Lenguaje sencillo de aprender: Vamos a ver que Python presenta una sencillez tal que cualquier persona que realiza una pequeña inversión de tiempo puede comenzar a crear programas sencillos en este lenguaje. Esto se debe, entre muchas cosas, a la gestión automática de memoria o las operaciones sencillas de lectura y escritura, en las que se diferencia de otros lenguajes. Tal es el caso de C, en el cual tanto la asignación de memoria como otras características son mucho más engorrosas de programar. Todos los que nos hayamos enfrentado con el aprendizaje de un lenguaje nuevo de programación sabemos que, según como nos enfoquemos en esta tarea, puede resultar muy emocionante o terriblemente tediosa. Más aún si queremos aprender por nuestra cuenta. Sin embargo, Python fue desarrollado pensando en que su aprendizaje resultara sencillo, incluso como primer lenguaje de programación. ¿Por qué? Porque su sintaxis es muy sencilla. Como se utilizan expresiones comunes, se escribe menos código y se obtienen resultados más rápido. O sea, Python requiere menos líneas de código para realizar tareas básicas que si programáramos las mismas tareas en Java o C++. Otro plus que nos ofrece Python tiene que ver con su librería estándar, la cual permite ejecutar otras funciones y tareas más complejas con mayor facilidad que otros lenguajes.Por todo lo mencionado, vemos que Python es un lenguaje ideal si queremos encarar la tarea de aprendizaje por nuestra cuenta.
Sirve como base teórica de programación: Python es un lenguaje orientado a objetos, pero cuya versatilidad nos permite utilizarlo aplicando diferentes paradigmas de programación. Lo interesante de Python es que su sencillez nos permite tanto aprender a programar si recién nos iniciamos, como también aprender las bases de un paradigma de mayor complejidad, como es la programación orientada a objetos. De esta forma, si luego queremos migrar a otro lenguaje, como Java, C++, Ruby u otros, el paso nos resultará más sencillo que si quisiéramos aprender directamente el paradigma en estos lenguajes cuya sintaxis es más compleja. Es decir, Python puede ser el primer paso como programador ofreciéndonos una base sólida que nos ayudará en pasos siguientes.
La demanda del lenguaje es alta: Si queremos dedicarnos a la programación, es fundamental aprender Python, ya que grandes compañías multinacionales, como Google, Nokia e IBM, lo utilizan. Es decir, resulta sencillo entrar al mercado laboral sabiendo programar en Python.
Se emplea en desarrollo web: Python se emplea en el desarrollo de aplicaciones y sitios web. En la actualidad, existen diversos frameworks para que el proceso de desarrollo sea más sencillo. Además de herramientas para el desarrollo web, Python puede usarse en el desarrollo de juegos y se utiliza ampliamente en el mundo científico, incluso la NASA aplica este lenguaje de programación
Integración con sistemas embebidos: Algunas plataformas, como Raspberry Pi, se basan en Python. También cabe mencionar al proyecto MicroPython. Esto representa una alternativa a plataformas tales como Arduino, con un gran potencial para proyectos de diferente índole, que facilita sustancialmente la programación y el testeo de sistemas con hardware integrado.
Facilidad de escritura de código para diferentes hilos: Los lenguajes diseñados antes de que se masificaran las plataformas multiprocesador o multinúcleo son muy complejos de programar para poder aprovechar el potencial de paralelizar tareas; en Python en cambio, el código asincrónico se gestiona de manera sencilla.
Muchas bibliotecas disponibles: Hay una gran variedad de bibliotecas disponibles en el mundo Python, desde manejo matemático hasta procesamiento de imagen y muchas funcionalidades más.
Tiene una gran comunidad que lo respalda: Una de las ventajas de aprender un lenguaje consolidado y de mucha popularidad como Python es la gran comunidad de usuarios que se consolidó a su alrededor. Recordemos que Python es una herramienta Open Source, lo que significa que a mayor comunidad, mayor desarrollo tendrá el lenguaje.Una gran comunidad de usuarios nos garantiza mucha información disponible, número de bibliotecas creciente, proyectos y código disponible si buscamos por internet, además de foros activos en donde podemos consultar y evacuar dudas. Esto hace que tanto el aprendizaje de proyectos como su ejecución sean muy dinámicos.
miércoles, 3 de julio de 2019
Laravel
Como ya sabemos, existen muchos frameworks PHP disponibles en el mercado, y Laravel es relativamente nuevo comparado con los principales.
Veamos un poco acerca de su historia. En el año 2011, uno de los frameworks PHP más populares era CodeIgniter. Sin embargo, muchas funcionalidades fundamentales para la creación de aplicaciones web, como la autenticación, no estaban incorporadas en él, motivo por el cual Taylor Otwell, un programador web, decidió crear un framework que las incluyera.
En un principio, Laravel no fue creado con el patrón de arquitectura MVC, y su foco estaba puesto principalmente en resolver problemas de autenticación. No obstante, la primera versión incorporaba funcionalidades que fueron bien recibidas, y de forma rápida, por la comunidad de desarrolladores. La segunda versión tardó menos de seis meses en salir al mercado. Laravel terminó de adoptar el patrón MVC para su arquitectura e incorporó el siguiente slogan: "Liberándote del código espagueti, Laravel te ayuda a crear aplicaciones maravillosas usando una sintaxis simple y expresiva. El desarrollo debe ser una experiencia creativa que disfrutes, no algo que sea doloroso. Disfruta del aire fresco"
Es de destacar que, a partir de junio de 2015, Laravel comenzó a distribuir versiones LTS (Long Term Support). ¿Por qué es importante esto? Las versiones LTS están diseñadas para ser soportadas durante un período más largo de lo normal, proveen corrección de errores durante dos años, y la aplicación de medidas de seguridad durante tres años. Considerando que hoy en día la tecnología avanza muy rápidamente, es importante contar con herramientas que garanticen un período de continuidad, sobre todo, teniendo en cuenta la creación de proyectos que se pueden desarrollar a mediano o largo plazo
Algunas de las características que podemos destacar de Laravel son las siguientes:
Dejo link: https://laravel.io
Veamos un poco acerca de su historia. En el año 2011, uno de los frameworks PHP más populares era CodeIgniter. Sin embargo, muchas funcionalidades fundamentales para la creación de aplicaciones web, como la autenticación, no estaban incorporadas en él, motivo por el cual Taylor Otwell, un programador web, decidió crear un framework que las incluyera.
En un principio, Laravel no fue creado con el patrón de arquitectura MVC, y su foco estaba puesto principalmente en resolver problemas de autenticación. No obstante, la primera versión incorporaba funcionalidades que fueron bien recibidas, y de forma rápida, por la comunidad de desarrolladores. La segunda versión tardó menos de seis meses en salir al mercado. Laravel terminó de adoptar el patrón MVC para su arquitectura e incorporó el siguiente slogan: "Liberándote del código espagueti, Laravel te ayuda a crear aplicaciones maravillosas usando una sintaxis simple y expresiva. El desarrollo debe ser una experiencia creativa que disfrutes, no algo que sea doloroso. Disfruta del aire fresco"
Es de destacar que, a partir de junio de 2015, Laravel comenzó a distribuir versiones LTS (Long Term Support). ¿Por qué es importante esto? Las versiones LTS están diseñadas para ser soportadas durante un período más largo de lo normal, proveen corrección de errores durante dos años, y la aplicación de medidas de seguridad durante tres años. Considerando que hoy en día la tecnología avanza muy rápidamente, es importante contar con herramientas que garanticen un período de continuidad, sobre todo, teniendo en cuenta la creación de proyectos que se pueden desarrollar a mediano o largo plazo
Algunas de las características que podemos destacar de Laravel son las siguientes:
- Posee una buena curva de aprendizaje.
- Tiene una documentación muy completa, simple y gratuita.
- Cuenta con una gran comunidad de desarrolladores, https://laravel.io.
- Es el proyecto más popular en github desarrollado con PHP.
- Utiliza muchos componentes de Symfony, el cual es el segundo proyecto PHP más popular en github.
- Brinda un conjunto de servicios y herramientas de infraestructura que facilitan su puesta en funcionamiento en diferentes entornos, tales como Forge y Homestead.
- Ofrece versiones LT S (Long Term Support).
- Su última versión LTS, la 5.5, fue lanzada en agosto de 2018 y tendrá actualizaciones de seguridad hasta 2020, lo cual la hace ideal para llevar a cabo proyectos de amplia longevidad.
- Sigue el patrón de arquitectura Modelo-Vista-Controlador (MVC).
- Provee un poderoso ORM, Eloquent, que está basado en el patrón active record.
- Utiliza un sistema de plantillas con un sistema de caché que permite mejorar la performance de los sitios desarrollados con Laravel
Dejo link: https://laravel.io
martes, 2 de julio de 2019
Ahora podemos crear documentación con código ejecutable en .net core
Al mejor estilo Jupyter, Microsoft creo Try .NET, un generador de documentación interactivo para .NET Core.
Try .NET es una herramienta de .NET Core que permite la creación de documentación interactiva para C#. Al igual que las herramientas equivalentes dirigidas a diferentes lenguajes de programación, produce documentación que puede contener tanto texto explicativo como código ejecutable en tiempo real.
Toda la documentación se compone de archivos que contienen un conjunto de instrucciones y fragmentos de código. Además, Try .NET utiliza una notación extendida de reducción de código para los bloques de código que permite hacer referencia a una región específica dentro de un archivo de código fuente. De esta manera, en lugar de escribir una muestra de código dentro de un bloque de código, el programador puede simplemente hacer referencia a una región C # definida en otro archivo de código.
Dejo link: https://devblogs.microsoft.com/dotnet/creating-interactive-net-documentation/
lunes, 1 de julio de 2019
Flutter en español
Quiero compartir la siguiente página de flutter en español, que es igual a la página oficial de Flutter
Dejo el link : https://flutter-es.io
Dejo el link : https://flutter-es.io
Suscribirse a:
Entradas (Atom)