Translate
sábado, 15 de mayo de 2021
jueves, 13 de mayo de 2021
Common Language Runtime
.NET proporciona runtime, denominado Common Language Runtime, que ejecuta el código y proporciona servicios que facilitan el proceso de desarrollo.
Los compiladores y las herramientas exponen la funcionalidad de Common Language Runtime y le permiten escribir código que se beneficie de este entorno de ejecución administrado. El código compilado por un compilador .net se llama código administrado. El código administrado se beneficia de características como la integración entre lenguajes, el manejo de excepciones entre lenguajes, la seguridad mejorada, el control de versiones y la implementación, un modelo simplificado para la interacción de componentes y servicios de depuración y creación de perfiles.
Los compiladores y las herramientas pueden producir resultados que el Common Language Runtime puede consumir porque el sistema de tipos, el formato de los metadatos y el entorno de tiempo de ejecución (el sistema de ejecución virtual) están definidos por un estándar público, la ECMA Common Language Infrastructure. especificación.
Para permitir que el tiempo de ejecución proporcione servicios al código administrado, los compiladores de lenguaje deben emitir metadatos que describan los tipos, miembros y referencias en su código. Los metadatos se almacenan con el código; Todos los archivos ejecutables portátiles (PE) cargables de Common Language Runtime contienen metadatos. El tiempo de ejecución utiliza metadatos para localizar y cargar clases, diseñar instancias en la memoria, resolver invocaciones de métodos, generar código nativo, reforzar la seguridad y establecer límites de contexto en tiempo de ejecución.
El Runtime maneja automáticamente el diseño de los objetos y administra las referencias a los objetos, liberándolos cuando ya no se utilizan. Los objetos cuya vida útil se gestiona de esta forma se denominan datos gestionados. El recolector de basura elimina las pérdidas de memoria, así como algunos otros errores de programación comunes. Debido a que los compiladores de lenguaje proporcionan sus propios tipos, como los tipos primitivos, es posible que no siempre sepa (o necesite saber) si sus datos están siendo administrados.
Common Language Runtime facilita el diseño de componentes y aplicaciones cuyos objetos interactúan entre lenguajes. Los objetos escritos en diferentes lenguajes pueden comunicarse entre sí y sus comportamientos pueden integrarse estrechamente. Por ejemplo, puede definir una clase y luego usar un lenguaje diferente para derivar una clase de su clase original o llamar a un método en la clase original. También puede pasar una instancia de una clase a un método de una clase escrito en un lenguaje diferente. Esta integración entre lenguajes es posible porque los compiladores de lenguajes y las herramientas que tienen como objetivo el tiempo de ejecución utilizan un sistema de tipo común definido por el tiempo de ejecución, y siguen las reglas del tiempo de ejecución para definir nuevos tipos, así como para crear, usar, persistir y vincularse a tipos.
Como parte de sus metadatos, todos los componentes administrados contienen información sobre los componentes y recursos con los que se crearon. El tiempo de ejecución utiliza esta información para garantizar que su componente o aplicación tenga las versiones especificadas de todo lo que necesita, lo que hace que sea menos probable que su código se rompa debido a alguna dependencia no satisfecha. La información de registro y los datos ya no se almacenan en el registro, donde puede ser difícil establecerlos y mantenerlos. En cambio, la información sobre los tipos que define (y sus dependencias) se almacena con el código como metadatos, lo que hace que las tareas de replicación y eliminación de componentes sean mucho menos complicadas.
Los compiladores de lenguaje y las herramientas exponen la funcionalidad del tiempo de ejecución de formas que están destinadas a ser útiles e intuitivas para los desarrolladores. Esto significa que algunas características del tiempo de ejecución pueden ser más notables en un entorno que en otro. La forma en que experimente el tiempo de ejecución depende de qué compiladores de lenguaje o herramientas utilice. Por ejemplo, si es un desarrollador de Visual Basic, es posible que observe que con Common Language Runtime, el lenguaje Visual Basic tiene más características orientadas a objetos que antes. El Runtime proporciona los siguientes beneficios:
• Mejoras de rendimiento.
• La capacidad de utilizar fácilmente componentes desarrollados en otros lenguajes.
• Tipos extensibles proporcionados por una biblioteca de clases.
• Características del lenguaje como herencia, interfaces y sobrecarga para la programación orientada a objetos.
• Soporte para subprocesos libres explícitos que permiten la creación de aplicaciones escalables y multiproceso.
• Soporte para manejo estructurado de excepciones.
• Soporte para atributos personalizados.
• Recolección de basura.
• Uso de delegados en lugar de punteros de función para una mayor seguridad y protección de tipos. Para obtener más información sobre los delegados, consulte Sistema de tipos comunes.
lunes, 10 de mayo de 2021
Delegate en C# parte 2
Un Multicast delegate es un delegado pero mantiene referencias a más de un método. Este tipo de delegado debe contener únicamente métodos que devuelvan un void, de otro modo se lanzará una excepción en tiempo de ejecución. Al invocar al delegado, se ejecutarán todos los métodos asociados en el mismo orden en el cual fueron agregados al delegado.
Para agregar métodos al delegado se emplea el operador ‘+=’ y para eliminar métodos del delegado se emplea el operador ‘-=’. Un mismo método se puede añadir a un objeto delegado más de una vez. Veamos un ejemplo:
using System;
public delegate void MiDelegadoMultiCast(int i);
public class Test
{
public static void Main()
{
MiClase miClase = new MiClase();
// instanciamos un delegado. Observa que el método MiMetodo1 de la clase
// MiClase cumple con la firma definida en el delegado
MiDelegadoMultiCast delegado = miClase.MiMetodo1;
delegado(83); // Se hace la llamada al delegado
// agregamos ahora el Metodo2
delegado += miClase.MiMetodo2;
// Se hace la llamada al delegado y se ejecutarán en orden secuencial ambos métodos
delegado(55);
// eliminamos ahora el Metodo1
delegado -= miClase.MiMetodo1;
// Se hace la llamada al delegado y se ejecutará únicamente el Método2
delegado(14);
}
}
public class MiClase
{
public void MiMetodo1(int i)
{
Console.WriteLine("El valor pasado al METODO1 como parámetro es: {0}", i);
}
public void MiMetodo2(int i)
{
Console.WriteLine("El valor pasado al METODO2 como parámetro es: {0}", i);
}
}
Dejo link: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/delegates/using-delegates
domingo, 9 de mayo de 2021
Pyston un python más rápido
Pyston es una implementación del JIT para Python 3.8.8 que promete ser más rápida que Python. Además han puesto el proyecto en código abierto.
Pyston v2.2 es un 30% más rápido que el Python de serie en los benchmarks de servidores web, de acuerdo con un anuncio realizado por Kevin Modzelewski, creador de Pyston. Modzelewski afirma que Pyston elimina "muchas de las características de depuración poco utilizadas que admite Python" en cuanto a la velocidad, para reducir la carga que la depuración de Python crea para los ordenadores.
A la vez es muy fácil cambiar de Pyston a python. Esto la da muchas posibilidades a esta nueva implementación.
Dejo link: https://github.com/pyston/pyston
viernes, 7 de mayo de 2021
Curso intensivo de aprendizaje automático
Google nos regala un curso sobre aprendizaje automático totalmente gratuito y en español. Como es habitual en google, el curso esta muy bien hecho y cuenta con una parte práctica utilizando tensorflow.
Dejo el link: https://developers.google.com/machine-learning/crash-course
miércoles, 5 de mayo de 2021
Primera Aplicación en .net 5 en VB
Y luego creamos una carpeta y hacemos una aplicación de consola:
mkdir miPrimerApp
cd miPrimerApp
dotnet new console -lang VB
code .
Como verán le puse miPrimerApp a la carpeta y luego ejecute visual code con el comando "code ."
En visual code podemos ver la clase Program.vb que se va a ejecutar :
Libros Gratuitos de Python
Este repositorio de github se encuentra un proyecto que trata de reunir la mayor cantidad de libros gratuitos online de Python.
Por ahora la lista de temas es la siguiente :
- Introductory
- Intermediate
- Advanced
- AI and Machine Learning
- Computer Science
- Software Engineering and best practices
- GUI
- Tools
- Web development
- Data science
- Science
- Jupiter Notebook
- Engineering
- Cryptography
- Games
Dejo link : https://github.com/pamoroso/free-python-books
lunes, 3 de mayo de 2021
Primera Aplicación en .net 5 en F#
Vamos rapidito, antes que nada tenemos que tener .net instalado y visual code (con el plugin de F#)
Y luego creamos una carpeta y hacemos una aplicación de consola:
mkdir miPrimerApp
cd miPrimerApp
dotnet new console -lang "F#"
code .
Como verán le puse miPrimerApp a la carpeta y luego ejecute visual code con el comando "code ."
En visual code podemos ver la clase Program.fs que se va a ejecutar :
Como correr los test proyecto clojure?
Si vieron este post : https://emanuelpeg.blogspot.com/2021/04/como-crear-un-proyecto-clojure.html
Deben haber pensado: y los test, donde están los test?
Bueno, vamos a hacer una pequeña función cuadrado por ejemplo :
sábado, 1 de mayo de 2021
Primera Aplicación en .net 5 en C#
Vamos rapidito, antes que nada tenemos que tener .net instalado y visual code (con el plugin de C#)
Y luego creamos una carpeta y hacemos una aplicación de consola:
mkdir miPrimerApp
cd miPrimerApp
dotnet new console
code .
Como verán le puse miPrimerApp a la carpeta y luego ejecute visual code con el comando "code ."
En visual code podemos ver la clase Program.cs que se va a ejecutar :
viernes, 30 de abril de 2021
Delegate en C#
Un delegate es un tipo que representa referencias a métodos con una lista de parámetros determinada y un tipo de valor devuelto. Es la versión de .NET de los punteros a función de C++ pero con seguridad de tipos (type-safe), es decir, se comprueban los tipos de retorno y de los parámetros del mismo. La clase de delegado no sólo contiene una referencia a un método, también puede mantener referencias a varios métodos mientras cumplan con la firma definida. Veamos un ejemplo:
using System;
public delegate void MiDelegado(int i);
public class Test
{
public static void Main()
{
MiClase miClase = new MiClase();
// instanciamos un delegado. Observa que el método MiMetodo de la clase
// MiClase cumple con la firma definida en el delegado
MiDelegado delegado = new MiDelegado(miClase.MiMetodo);
delegado(83); // Se hace la llamada al delegado
}
}
public class MiClase
{
public void MiMetodo(int i)
{
Console.WriteLine("El valor pasado como parámetro es: {0}", i);
}
}
Como podemos instanciar delegados? Tenemos diferentes maneras:
- Constructor: MiDelegado delegado = new MiDelegado(miClase.MiMetodo);
- Directamente con asignación: MiDelegado delegado = miClase.MiMetodo;
- Anonymous methods: MiDelegado delegado = delegate(int i) { Console.WriteLine("El valor pasado como parámetro es: {0}", i); };
- Y lambda expressions: MiDelegado delegado = x => { Console.WriteLine("El valor pasado como parámetro es: {0}", x); };
Dejo link: https://www.tutorialsteacher.com/csharp/csharp-delegates
jueves, 29 de abril de 2021
Como crear un proyecto clojure?
Esto es muy fácil hacemos así :
$ lein new app nombreDeLaApp
Generating a project called nombreDeLaApp based on the 'app' template.
domingo, 25 de abril de 2021
Jetbrain presenta code with me, y se ve muy bien!
Me llego un mail de jetbrain con la presentación de "code with me" que es una nueva funcionalidad de su Ide y la verdad es que esta muy bueno.
Dejo el video :
miércoles, 21 de abril de 2021
¿Como detectar la fragmentación de indices en base de datos oracle?
Es muy probable que no sepas que los indices se fragmentan pero si se fragmentan (sino para que escribo este post) y lo que podemos hacer es reconstruirlos, lo cual es un proceso lento (si el indice es grande) pero puede mejorar la performance de los indices.
Por lo tanto una tarea recomendada es chequear los indices cada tanto y reconstruirlos (cuando no esten utilizando la base)
Lo que hice es un script que inserta en la tabla INDEX_REBUILD los datos de los indices que deben ser reconstruidos. Y luego podemos reconstruirlos de forma automatica o manual.
Lo hice para base de datos oracle pero es interesante hacerlo para otros motores :
DROP TABLE INDEX_REBUILD CASCADE CONSTRAINTS;
CREATE TABLE INDEX_REBUILD AS (select *
from index_stats);
DECLARE
CURSOR INDEX_NAMES is
SELECT INDEX_NAME FROM all_indexes
where TABLE_OWNER = 'nombreDelEsquema'
-- AND TABLE_NAME = 'nombreDeLaTabla'; -- Si deseo correrlo para una tabla puedo descomentar esta linea.
BEGIN
FOR N IN INDEX_NAMES LOOP
EXECUTE IMMEDIATE 'analyze index ' || N.INDEX_NAME || ' validate structure';
dbms_output.put_line( N.INDEX_NAME );
END LOOP;
INSERT INTO INDEX_REBUILD select *
from index_stats
where round((del_lf_rows/lf_rows)*100,2) >= 20
OR height > 3
OR lf_rows > lf_blks;
COMMIT;
END;
Dado que tenemos los indices a reconstruir en una tabla, podemos hacer esto de forma automática :
CURSOR INDEX_NAMES is
SELECT NAME FROM INDEX_REBUILD;
BEGIN
FOR N IN INDEX_NAMES LOOP
EXECUTE IMMEDIATE 'ALTER index ' || N.NAME || ' REBUILD';
END LOOP;
END;
Pero tenemos que tener cuidado porque este proceso puede llevar mucho tiempo. Si se hace para una o dos tablas puede servir, pero para una base de datos grande o mediana, nunca terminaría. En ese caso es mejor hacerlo manual con un equipo de mate y bizcochitos.
Talvez tendría que hacer un post explicando un poco más la fragmentación y porque esos valores mágicos que pongo en la consulta, pero eso va llevar mucho tiempo...
OpenJS Foundation
La misión de OpenJS Foundation es impulsar la adopción y el desarrollo continuo de soluciones JavaScript y tecnologías relacionadas.
Los objetivos principales de la Fundación OpenJS son:
Promover la adopción generalizada y el desarrollo continuo de soluciones web, JavaScript y tecnologías relacionadas.
Facilitar la colaboración dentro de la comunidad de desarrollo de JavaScript.
Crear un centro de gravedad para proyectos de código abierto en todo el ecosistema de JavaScript de un extremo a otro, guiándolos hacia una gobernanza abierta y diversas bases de colaboradores.
Para alojar la infraestructura para admitir proyectos de código abierto de JavaScript alojados.
Permitir, a través del avance de Proyectos y alianzas estratégicas, una web abierta y accesible.
La idea es proporcionar un hogar neutral para proyectos críticos, con principios comunes de gobernanza técnica y responsabilidad. Al hacerlo, estan proporcionando la sostenibilidad a largo plazo tanto de los proyectos individuales como del ecosistema en su conjunto.
Dejo link : https://openjsf.org/