Translate

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.

Y ahora tenemos SDK pero no device :(

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:

  • 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

Flutter, la nueva forma de hacer applicaciones mobiles



Flutter es el nuevo kit para desarrollo (SDK) de aplicaciones móviles multiplataforma, creado por Google. Se puede utilizar para desarrollar aplicaciones para Android y iOS con un solo code-base. Además admite también web y escritorio (preview). Desde ya el método primario recomendado para crear aplicaciones para Google Fuchsia (el futuro sucesor de Android).

Esta entre el top 20 repositorios más activos en GIT. Y finalizo periodo BETA en diciembre (V1.0 official release) y ya tiene 250.000 desarrolladores activos. Además tiene mucho soporte y movimiento de parte de Google. Anunciado por Google como plataforma preferida de desarrollo para el futuro sucesor de Android (Fuschia)

Futter es un SDK completo con rendering engine propio. Al renderizar sus propios widgets, copias exactas de los originales usando API gráfica de bajo nivel OpenGL (permite uso de, por ejemplo, widgets Android de API 26+ en cualquier versión de Android, ya que no depende de los widgets OEM)

Características : 
  • Open-source y gratuito.
  • Desarrollo rápido, gran librería de widgets material design “out of the box” listos para usar.
  • No requiere conocimiento de plataformas especificas en lo absoluto.
  • No necesita XML (o ningún otro mark-up) para vistas
  • Compilación a código ARM, por lo tanto cuenta con performance nativa
  • Stateful Hot Reload
  • Compatibilidad con IDEs existentes VS Code, Android Studio, IntelliJ, etc..
  • Portable
  • Lenguaje DART, no muy popular pero fácil de aprender.
  • Curva de aprendizaje para desarrollo declarativo, sin mark-up para vistas.
  • Ecosistema de librerías de terceros ya es muy bueno.

Flutter no utiliza los widgets de sistema, renderiza sus propios widgets usando las api gráficas de bajo nivel.  Flutter ya viene con un kit completo de Widgets, que son la copia exacta (“pixel perfect”) de los widgets Material Design (Android) y Cupertino (IOS), pero si deseamos tener un look diferente en IOS, aun debemos “decidir” en runtime mostrar un widget u otro basado en la plataforma.

Dejo un video:



Dejo link: https://flutter.dev
https://flutter.dev/docs/get-started/install

jueves, 27 de junio de 2019

Libro Java Code Geeks

Download IT Guides!

 
Elasticsearch is a search engine based on Lucene. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents. Elasticsearch is developed in Java and is released as open source under the terms of the Apache License. Elasticsearch is the most popular enterprise search engine followed by Apache Solr, also based on Lucene. Elasticsearch can be used to search all kinds of documents. It provides scalable search, has near real-time search, and supports multitenancy. Elasticsearch is distributed, which means that indices can be divided into shards and each shard can have zero or more replicas. Each node hosts one or more shards, and acts as a coordinator to delegate operations to the correct shard(s). Rebalancing and routing are done automatically.
 
 
Docker is the world's leading software containerization platform. Docker containers wrap a piece of software in a complete filesystem that contains everything needed to run: code, runtime, system tools, system libraries ? anything that can be installed on a server. This guarantees that the software will always run the same, regardless of its environment. Docker provides an additional layer of abstraction and automation of operating-system-level virtualization on Linux. Docker uses the resource isolation features of the Linux kernel such as cgroups and kernel namespaces, and a union-capable file system such as OverlayFS and others to allow independent "containers" to run within a single Linux instance, avoiding the overhead of starting and maintaining virtual machines.
 
 
Delve into the world of Git version source control with this compact guide that discusses the features of this popular control system! Git is, without any doubt, the most popular version control system. Ironically, there are other version control systems easier to learn and to use, but, despite that, Git is the favorite option for developers, which is quite clarifying about the powerfulness of Git. In this guide, we will cover all the topics needed to know in order to use Git properly, from explaining what is it and how it differs from other tools, to its usage, covering also advanced topics and practices that can suppose an added value to the process of version controlling.
 
 
The Spring Framework is an open-source application framework and inversion of control container for the Java platform. The framework's core features can be used by any Java application, but there are extensions for building web applications on top of the Java EE platform. Although the framework does not impose any specific programming model, it has become popular in the Java community as an alternative to, replacement for, or even addition to the Enterprise JavaBeans (EJB) model. In this 200 page ebook, we provide a compilation of Spring Framework tutorials that will help you kick-start your own programming projects. 
 

martes, 25 de junio de 2019

Primer proyecto con Haskell y cabal.


Antes que nada vamos a instalar cabal, como uso linux (derivado de debian) lo puedo instalar con apt :

sudo add-apt-repository -y ppa:hvr/ghc
sudo apt-get update
sudo apt-get install -y cabal-install ghc

Probamos cabal :

$ cabal --version

Hacemos un Proyecto:

$ cabal init

Este comando nos preguntará datos de forma interactiva, como nombre de proyecto, versión, autor, etc ...

Si deseamos hacer un proyecto haskell ejecutable:

$ cabal init -n --is-executable
$ cabal run

Dejo link: https://www.haskell.org/cabal/



INFRAESTRUCTURA DEFINIDA POR SOFTWARE PARA DUMMIES


Con la aceleración de la transformación digital en todos los sectores, prácticamente toda iniciativa empresarial moderna se ha convertido en un proyecto de TI, y la TI es ahora más crucial que nunca para el éxito de la empresa. Las empresas deben sacar al mercado productos y servicios innovadores con mayor rapidez que la competencia, lo que a su vez significa que la TI debe proporcionar, de forma rápida y continuada, aplicaciones y servicios que fomenten la productividad y la eficiencia.

Dejo link: https://www.vmware.com/es/learn/48842_DCMA-0468_REG.html?src=sp_5cd9beaede079&cid=7012H000001dBV2QAM&fbclid=IwAR18r3jzCVFvX64Q8YpFPk6P8tPiXT_HwJAXIrsesrAmAD6cl7ujSqdLKZs

domingo, 23 de junio de 2019

Tipos en Cassandra


Veamos los distintos tipos que tenemos disponibles para nuestros valores. Como hemos visto en nuestra exploración hasta ahora, cada columna de nuestra tabla es de un tipo específico.

CQL admite un conjunto flexible de tipos de datos, incluidos tipos de caracteres y numéricos simples, colecciones y tipos definidos por el usuario. Describiremos estos tipos de datos y proporcionaremos algunos ejemplos de cómo podrían usarse para aprender a tomar la decisión correcta para los diferentes modelos de datos.

int: 32-bit entero con signo como java.
bigint: 64-bit entero grande con signo equivalente a long de Java
smallint: 16-bit entero con signo equivalente a short de Java
tinyint: 8-bit entero con signo
varint: A variable precision signed integer (equivalent to java.math.BigInteger )
float: 32-bit IEEE-754 equivalente a float de java
double: 64-bit IEEE-754 equivalente a double de Java
decimal: equivalente a java.math.BigDecimal

Si bien los tipos enumerados son comunes en muchos lenguajes, no hay un equivalente directo en CQL. Una práctica común es almacenar valores enumerados como cadenas. Por ejemplo, usando el método Enum.name() para convertir un valor enumerado en una Cadena para escribir en Cassandra como texto, y el método Enum.valueOf() para volver a convertir el texto al valor enumerado.

CQL proporciona dos tipos de datos para representar texto, uno de los cuales ya hemos utilizado bastante :

text , varchar : cadena de caracteres UTF-8
ascii : una cadena de ascii

UTF-8 es el estándar de texto más reciente y más utilizado y es compatible con la internacionalización, por lo que recomendamos utilizar texto sobre ascii al crear tablas para nuevos datos. El tipo de ascii es más útil si está tratando con datos heredados que están en formato ASCII.

Cassandra nos provee tipos para representar el tiempo :

timestamp : Si bien señalamos anteriormente que cada columna tiene una marca de tiempo que indica cuándo se modificó por última vez, también puede usar una marca de tiempo como el valor de una columna en sí. El tiempo se puede codificar como un entero con signo de 64 bits, pero normalmente es mucho más útil ingresar una marca de tiempo utilizando uno de los varios formatos de fecha ISO 8601 compatibles.

date, time : hasta Cassandra 2.1 solo tenían el tipo timestamp para representar los tiempos, que incluía tanto una fecha como una hora del día. La versión 2.2 introdujo los tipos de fecha y hora que permitieron que estos se representaran de forma independiente; es decir, una fecha sin una hora y una hora del día sin referencia a una fecha específica. Al igual que con ltimestamp, estos tipos admiten formatos ISO 8601.
Aunque hay nuevos tipos de java.time disponibles en Java 8, el tipo de fecha se asigna a un tipo personalizado en Cassandra para preservar la compatibilidad con JDK más antiguos. El tipo de tiempo se asigna a una Java long que representa el número de nanosegundos desde la medianoche.

Veamos el tipo de datos para las claves:

uuid : El identificador único universal (UUID) de RA es un valor de 128 bits en el que los bits se ajustan a uno de varios tipos, de los cuales los más utilizados comúnmente se conocen como Tipo 1 y Tipo 4. El tipo de uuid CQL es un UUID de Tipo 4, que se basa enteramente en números aleatorios. Los UUID se representan normalmente como secuencias separadas por guiones de dígitos hexadecimales. El tipo uuid se usa a menudo como una clave sustituta, ya sea por sí misma o en combinación con otros valores. Debido a que los UUID son de una longitud finita, no están absolutamente garantizados para ser únicos. Sin embargo, la mayoría de los sistemas operativos y lenguajes de programación proporcionan utilidades para generar ID que proporcionan una singularidad adecuada, y cqlsh también lo hace. Puede obtener un valor UUID de Tipo 4 a través de la función uuid () y usar este valor en INSERT o UPDATE.

timeuuid : Este es un UUID de Tipo 1, que se basa en la dirección MAC de la computadora, la hora del sistema y un número de secuencia utilizado para evitar duplicados. Este tipo se usa frecuentemente como una marca de tiempo libre de conflictos. cqlsh proporciona varias funciones convenientes para interactuar con el tipo de timeuuid: now (), dateOf () y unixTimestampOf (). La disponibilidad de estas funciones de conveniencia es una de las razones por las que timeuuid tiende a usarse con más frecuencia que uuid.

Para terminar veamos otros tipos que no se donde agruparlos :

boolean : Este es un simple valor verdadero / falso. El cqlsh no distingue entre mayúsculas y minúsculas en la aceptación de estos valores, pero da como resultado True o False.

blob : Un objeto grande binario (blob) es un término informático coloquial para una matriz arbitraria de bytes. El tipo de blob CQL es útil para almacenar medios u otros tipos de archivos binarios. Cassandra no valida ni examina los bytes en un blob. CQL representa los datos como dígitos hexadecimales, por ejemplo, 0x00000ab83cf0. Si desea codificar datos textuales arbitrarios en el blob, puede usar la función textAsBlob() para especificar valores para la entrada.

inet : Este tipo representa las direcciones de Internet IPv4 o IPv6. cqlsh acepta cualquier formato legal para definir direcciones IPv4, incluidas representaciones con puntos o sin puntos que contengan valores decimales, octales o hexadecimales. Sin embargo, los valores se representan utilizando el formato decimal punteado en la salida cqlsh, por ejemplo, 192.0.2.235.
Las direcciones IPv6 se representan como ocho grupos de cuatro dígitos hexadecimales, separados por dos puntos, por ejemplo, 2001: 0db8: 85a3: 0000: 0000: 8a2e: 0370: 7334. La especificación de IPv6 permite el colapso de valores hexadecimales cero consecutivos, por lo que el valor anterior se representa de la siguiente manera cuando se lee con SELECT: 2001: db8: 85a3: a :: 8a2e: 370: 7334.

counter : El tipo de datos de contador proporciona un entero con signo de 64 bits, cuyo valor no se puede establecer directamente, sino que solo se puede incrementar o disminuir. Los contadores se utilizan con frecuencia para el seguimiento de estadísticas, como el número de páginas vistas, tweets, mensajes de registro, etc. El tipo de contador tiene algunas restricciones especiales. No se puede utilizar como parte de una clave principal. Si se usa un contador, todas las columnas que no sean columnas de clave primaria deben ser contadores.

En proximos post hablaremos de tipos de datos compuestos como las colecciones y en la capacidad de crear nuestros propios tipos de datos.


jueves, 20 de junio de 2019

C# 8 mejoras en Pattern Matching


Con C# 7 tuvimos Pattern Matching y con C# 8 tenemos mejoras!!!

Todo el mundo esta hablando de C# 8 y porque va salir C# 8, pues claro! Entre otras mejoras, han mejorado el Pattern Matching:

Ajuste posicional
En C# 7 hacíamos :

case Rectangle r when r.Length == 10 && r.Width == 10: return "Found 10x10 rectangle"

Y ahora :

case Rectangle (10, 10): return "Found 10x10 rectangle";

Propiedades
Con ajuste posicional el pattern matching es conciso, pero solo funciona si tiene un método Deconstruct adecuado. Cuando no lo tienes puedes usar un patrón de propiedad en su lugar.

case Rectangle {Width : 10 }: return "Found a rectangle with a width of 10"

Mejoras del deconstructor
Otra idea que se está considerando en el tema Abrir LDM en el ticket de coincidencia de patrones es permitir múltiples métodos Deconstruct con el mismo número de parámetros. Además de tener diferentes tipos, los parámetros deben tener un nombre diferente.

ITuple
La interfaz de ITuple, introducida en .NET 4.7.1 y .NET Core 2.0, plantea varias preguntas en C# 8. La idea básica es que si un objeto implementa esta interfaz, entonces puede participar en la comparación de patrones. Se están considerando tres escenarios con respecto a cuándo entrará en vigencia.

if (x is ITuple(3, 4)) // (1) permitted?
if (x is object(3, 4)) // (2) permitted?
if (x is SomeTypeThatImplementsITuple(3, 4)) // (3) permitted?

Una pregunta relacionada es si una clase implementa ITuple y hay un método de extensión Deconstruct, ¿cuál tiene prioridad? Idealmente, devolverían los mismos valores, pero se necesita un desempate si ese no es el caso.

martes, 18 de junio de 2019

Probando Linux Deepin

Este es mi primer post con Deepin y en lineas generales estoy muy contento, tuve algunos problemas.

Sobretodo con algunas instalaciones. Me sorprendio que el market no traiga algunas aplicaciones que son historicas de linux.

Y por lo demás todo muy bien samba se configuro casi solo. 

La interfaz es muy cuidada y las aplicaciones que trae son muy utilies.

En fin, muy bueno...

Dejo link : https://www.deepin.org/es/

domingo, 16 de junio de 2019

Tiempo de vida en las columnas en Apache Cassandra


Una característica muy poderosa que tiene apache Cassandra es la capacidad de expirar datos que no necesita por mucho tiempo. Esta característica es muy flexible y trabaja a nivel individual de cada valor de una columna. El tiempo de vida (TTL) es el tiempo que Cassandra persiste un campo y se indica a nivel de columna.

El TTL por defecto es null y esto significa que el dato escrito no espira. Con la funcion TTL() podemos ver el tiempo de vida de un campo determinado :

cqlsh:my_keyspace> SELECT first_name, last_name, TTL(last_name) FROM user WHERE first_name = 'Mary';

first_name | last_name | ttl(last_name)
-------------+-------------+----------------
Mary          | Boateng   | null

(1 rows)

Ahora vamos a modificar esto:

cqlsh:my_keyspace> UPDATE user USING TTL 3600 SET last_name ='McDonald' WHERE first_name = 'Mary' ;

cqlsh:my_keyspace> SELECT first_name, last_name, TTL(last_name) FROM user WHERE first_name = 'Mary';

first_name | last_name | ttl(last_name)
-------------+-------------+---------------
Mary         | McDonald |  3588

(1 rows)

En este caso modificamos el TTL con update pero también podemos utilizar insert con el comando USING TTL.

El TTL es por columnas, no tenemos un mecanismo para settear el TTL a nivel de fila directamente.  Y esto es setteado cuando proveemos un valor a una columna. Si queremos settear el TTL a nivel de fila, debemos proveer un valor para la primary key en el update o insert.