Existe una herramienta llamada SDKMAN! que nos sirve para instalar lenguajes como Ceylon, Groovy, Scala, además de otros entornos o sdks de desarrollo como Grails, SBT, etc.
Desde Linux podemos teclear en nuestra consola de comandos:
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
Obtener ayuda: sdk help
Que versión tenemos: sdk version
Listar lo que podemos instalar: sdk list
Comencemos instalando Ceylon, Groovy, y Scala:
sdk install ceylon
sdk install groovy
sdk install scala
Comprobemos que se instalaron adecuadamente:
ceylon --version
groovy -version
scala -version
Con esto tenemos instalados los lenguajes y la herramienta SDKMAN!.
Links
http://sdkman.io/
domingo, 26 de junio de 2016
domingo, 15 de mayo de 2016
Conociendo Java 8
Dicen que con los cambios vienen cosas mejores. Esperemos que sea así. Java 8 nos trae nuevas características. Una de ellas son: las Lambdas. ¿Qué son las lambdas? ¿Para qué nos sirven?. Las lambdas son un tipo de función. Es una función "anónima", es decir, que no está vinculada un nombre.
En lenguajes como Python tenemos algo como esto:
switch=[
lambda n: 'Hola',
lambda n: 'Que tengas un buen dia' if n == 1 else 'Tal vez no tengas un buen dia',
lambda n: 'Hoy es un buen dia para empezar' if n == 2 else 'Tal vez otro dia puedas empezar',
]
opcion=raw_input('Introduce un numero ente 1 y 2:')
print switch[0](opcion)
print switch[1](opcion)
En Java 8 tenemos "las expresiones Lambda". Que se puede definir como un "nuevo estilo" o manera de programar usando Lambdas.
En el sitio oficial de Oracle tenemos esta explicación:
"They provide a clear and concise way to represent one method interface using an expression. Lambda expressions also improve the
Podemos escribir algo como esto:
Clase instancia = () -> hacerAlgo();
La función puede o no contener parámetros. Además no es necesario definir qué tipo de dato es (String, int, double, boolean, char).
Clase instancia = (String a) -> hacerAlgo(a);
Ejercicio. Crearemos una interface "Servicio" que contenga un método llamado opera, elcual recibe dos parámetros a y b. Una clase principal con un método llamado "operacion"que recibirá tres parámetros,las variables a,b y una instancia de tipo Servicio. La operación a realizar es la suma.
import static java.lang.System.out;
public class Control{
public static void main(String[] args) {
Servicio s=(a,b) -> a-b;
out.println("35 - 26 = " + new Control().operacion(35, 26, s));
}
private int operacion(int a,int b, Servicio servicio){
return servicio.opera(a,b);
}
}
interface Servicio{
int opera(int a,int b);
}
El resultado será 35 - 26 = 9.
Links
http://viralpatel.net/blogs/lambda-expressions-java-tutorial/
http://stackoverflow.com/questions/16501/what-is-a-lambda-function
En lenguajes como Python tenemos algo como esto:
switch=[
lambda n: 'Hola',
lambda n: 'Que tengas un buen dia' if n == 1 else 'Tal vez no tengas un buen dia',
lambda n: 'Hoy es un buen dia para empezar' if n == 2 else 'Tal vez otro dia puedas empezar',
]
opcion=raw_input('Introduce un numero ente 1 y 2:')
print switch[0](opcion)
print switch[1](opcion)
En Java 8 tenemos "las expresiones Lambda". Que se puede definir como un "nuevo estilo" o manera de programar usando Lambdas.
En el sitio oficial de Oracle tenemos esta explicación:
"They provide a clear and concise way to represent one method interface using an expression. Lambda expressions also improve the
Collection libraries making it easier to
iterate through, filter, and extract data from a Collection.
In addition, new concurrency features improve performance in
multicore environments."Podemos escribir algo como esto:
Clase instancia = () -> hacerAlgo();
La función puede o no contener parámetros. Además no es necesario definir qué tipo de dato es (String, int, double, boolean, char).
Clase instancia = (String a) -> hacerAlgo(a);
Ejercicio. Crearemos una interface "Servicio" que contenga un método llamado opera, elcual recibe dos parámetros a y b. Una clase principal con un método llamado "operacion"que recibirá tres parámetros,las variables a,b y una instancia de tipo Servicio. La operación a realizar es la suma.
import static java.lang.System.out;
public class Control{
public static void main(String[] args) {
Servicio s=(a,b) -> a-b;
out.println("35 - 26 = " + new Control().operacion(35, 26, s));
}
private int operacion(int a,int b, Servicio servicio){
return servicio.opera(a,b);
}
}
interface Servicio{
int opera(int a,int b);
}
El resultado será 35 - 26 = 9.
Links
http://viralpatel.net/blogs/lambda-expressions-java-tutorial/
http://stackoverflow.com/questions/16501/what-is-a-lambda-function
jueves, 24 de marzo de 2016
Programando en C# : Interfaces y clases abstractas
Para los programadores que vienen de Java puede parecerles raras algunas cosas del lenguaje C#. Recordemos que C# es un lenguaje "heredero" de Java ysigue la misma filosofía, pero con ciertas variantes y una evolución propia. C# nació como lenguaje competidor y ciertos aspectos permanecen igual.
Ejemplo. Calcular el área y el perímetro de tres figuras geométricas: Circulo, Rectángulo, y Triángulo.
Crearemos una clase abstracta (la cual no podrá ser instanciada) que nos servirá como Padre de las demás clases que la extienden.
Además una interface, una clase también abstracta que nos permitirá definir métodos comunes entre las tres clases creadas.
//tenemos la clase abstracta (y Padre)
abstract class Figura{ ... }
//la interface
interface Funciones { ... }
//las clases hijas y que además implementan la interface Funciones
class Triangulo : Figura , Funciones{ ... }
class Circulo: Figura, Funciones{ ... }
class Rectangulo: Figura, Funciones{ ... }
Código completo:
using System;
public class Codemonkey{
public static void Main(string[] args){
Triangulo t;
Rectangulo r;
Circulo c;
try{
t=new Triangulo();
c=new Circulo();
r=new Rectangulo();
t.setLados(new int[]{3,3,3});
t.Bases=26;
t.Altura=23;
c.Radio=2.4;
c.Diametro=4.9;
r.Bases=6;
r.Altura=4;
Console.WriteLine("Triangulo\nPerimetro: {0} , Area: {1}",t.getPerimetro(),t.getArea());
Console.WriteLine("Circulo\nPerimetro: {0} , Area: {1}",c.getPerimetro(),c.getArea());
Console.WriteLine("Rectangulo\nPerimetro: {0} , Area: {1}",r.getPerimetro(),r.getArea());
}catch(Exception ex){
Console.Error.WriteLine("Error {0}",ex.Message);
Environment.Exit(0);
}finally{
t=null;r=null;c=null;
}
}
}
abstract class Figura{
private int[] lados;
private int altura;
private int bases;
public void setLados(int[] lados){
this.lados=lados;
}
public int[] getLados(){
return lados;
}
public int Bases{get;set;}
public int Altura{get;set;}
}
interface Funciones{
int getArea();
int getPerimetro();
}
class Triangulo : Figura , Funciones{
public int getPerimetro(){
return (int)this.getLados()[0] * 3;
}
public int getArea(){
return (this.Bases*this.Altura) / 2;
}
}
class Rectangulo : Figura, Funciones{
public int getPerimetro(){
return 2*(this.Bases*this.Altura) + (2* this.Bases);
}
public int getArea(){
return this.Bases*this.Altura;
}
}
class Circulo : Figura, Funciones{
private double radio;
private double diametro;
public double Radio{get;set;}
public double Diametro{get;set;}
public int getPerimetro(){
return (int)(3.14159*this.Diametro);
}
public int getArea(){
return (int)(3.14159*(this.Radio*2));
}
}
Compilar: gmcs Codemonkey.cs
Ejecutar: mono Codemonkey.exe
Ejemplo. Calcular el área y el perímetro de tres figuras geométricas: Circulo, Rectángulo, y Triángulo.
Crearemos una clase abstracta (la cual no podrá ser instanciada) que nos servirá como Padre de las demás clases que la extienden.
- Clase abstracta: Figura
- Clases hijas: Triangulo, Rectangulo, y Circulo
Además una interface, una clase también abstracta que nos permitirá definir métodos comunes entre las tres clases creadas.
//tenemos la clase abstracta (y Padre)
abstract class Figura{ ... }
//la interface
interface Funciones { ... }
//las clases hijas y que además implementan la interface Funciones
class Triangulo : Figura , Funciones{ ... }
class Circulo: Figura, Funciones{ ... }
class Rectangulo: Figura, Funciones{ ... }
Código completo:
using System;
public class Codemonkey{
public static void Main(string[] args){
Triangulo t;
Rectangulo r;
Circulo c;
try{
t=new Triangulo();
c=new Circulo();
r=new Rectangulo();
t.setLados(new int[]{3,3,3});
t.Bases=26;
t.Altura=23;
c.Radio=2.4;
c.Diametro=4.9;
r.Bases=6;
r.Altura=4;
Console.WriteLine("Triangulo\nPerimetro: {0} , Area: {1}",t.getPerimetro(),t.getArea());
Console.WriteLine("Circulo\nPerimetro: {0} , Area: {1}",c.getPerimetro(),c.getArea());
Console.WriteLine("Rectangulo\nPerimetro: {0} , Area: {1}",r.getPerimetro(),r.getArea());
}catch(Exception ex){
Console.Error.WriteLine("Error {0}",ex.Message);
Environment.Exit(0);
}finally{
t=null;r=null;c=null;
}
}
}
abstract class Figura{
private int[] lados;
private int altura;
private int bases;
public void setLados(int[] lados){
this.lados=lados;
}
public int[] getLados(){
return lados;
}
public int Bases{get;set;}
public int Altura{get;set;}
}
interface Funciones{
int getArea();
int getPerimetro();
}
class Triangulo : Figura , Funciones{
public int getPerimetro(){
return (int)this.getLados()[0] * 3;
}
public int getArea(){
return (this.Bases*this.Altura) / 2;
}
}
class Rectangulo : Figura, Funciones{
public int getPerimetro(){
return 2*(this.Bases*this.Altura) + (2* this.Bases);
}
public int getArea(){
return this.Bases*this.Altura;
}
}
class Circulo : Figura, Funciones{
private double radio;
private double diametro;
public double Radio{get;set;}
public double Diametro{get;set;}
public int getPerimetro(){
return (int)(3.14159*this.Diametro);
}
public int getArea(){
return (int)(3.14159*(this.Radio*2));
}
}
Compilar: gmcs Codemonkey.cs
Ejecutar: mono Codemonkey.exe
sábado, 20 de febrero de 2016
JDBI como alternativa a JDBC
En el post anterior hablábamos de una librería que nos permite realizar operaciones con bases de datos de una manera más sencilla y similar a lo que se hace con JDBC.
JDBI promete, al menos en teoría, hacer que el manejo de información en bases de datos no sea tan complicada. Haremos un ejemplo práctico para ver si es tan fácil o no.
Supongamos que tenemos una base de datos llamada "test" y una tabla llamada "persona". Obtendremos la información contenida en la tabla persona creando los siguientes archivos (clases):
- ModeloPersona.java que servirá como "entidad" en nuestra aplicación.
- ModeloPersonaMapper. java que servirá como "mapeador" de la entidad.
- PersonaDAO.java donde definiremos las operaciones de consulta.
- TestPersona.java que servirá como clase principal.
Nuestra tabla "persona" contiene los siguientes campos: id, nombre, apellidoP, apellidoM, edad,peso, talla. Por lo tanto, nuestra entidad ModeloPersona.java también debe cubrir esos campos.
ModeloPersona.java
public class ModeloPersona implements java.io.Serializable{
private static final long serialVersionUID=1L;
private String id;
private String nombre;
private String apellidoP;
private String apellidoM;
private String edad;
private String peso;
private String talla;
public ModeloPersona(String id, String nombre,String apellidoP,String apellidoM,String edad,String peso,String talla){
super();
this.id=id;
this.nombre=nombre;
this.apellidoP=apellidoP;
this.apellidoM=apellidoM;
this.edad=edad;
this.peso=peso;
this.talla=talla;
}
//setters y getters
}
ModeloPersonaMapper.java
public class ModeloPersonaMapper implements ResultSetMapper<ModeloPersona> {
@Override
public ModeloPersona map(int arg0, ResultSet r, StatementContext arg2) throws SQLException {
ModeloPersona mpersona=new ModeloPersona();
mpersona.setClave(r.getString("clave"));
mpersona.setNombre(r.getString("nombre"));
mpersona.setApellidoP(r.getString("apellidoP"));
mpersona.setApellidoM(r.getString("apellidoM"));
mpersona.setEdad(r.getString("edad"));
mpersona.setPeso(r.getString("peso"));
mpersona.setTalla(r.getString("talla"));
return null;
}
}
PersonaDAO.java
import org.codemonkey.model.ModeloPersona;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
@RegisterMapper(ModeloPersonaMapper.class)
public interface PersonaDAO {
@SqlQuery("SELECT test.persona.clave, test.persona.nombre, test.persona.apellidoP, test.persona.apellidoM, test.persona.edad, test.persona.peso, test.persona.talla FROM test.persona WHERE test.persona.clave = :id")
ModeloPersona findById(@Bind("id") long id);
@SqlQuery("SELECT test.persona.clave, test.persona.nombre, test.persona.apellidoP, test.persona.apellidoM, test.persona.edad, test.persona.peso, test.persona.talla FROM test.persona")
List<ModeloPersona> verTodo();
void close();
}
Finalmente la clase TestPersona.java
package org.codemonkey.test1;
import org.codemonkey.dao.PersonaDAO;
import org.codemonkey.model.ModeloPersona;
import org.skife.jdbi.v2.DBI;
import org.skife.jdbi.v2.Handle;
import static java.lang.System.out;
public class TestPersona {
public static void main(String[] args) {
DBI dbi = new DBI("jdbc:mysql://localhost:3306/test",
"root",
"5432");
Handle h = dbi.open();
if(!dbi.open().isInTransaction()){
out.println("No esta realizando alguna transaccion");
}
PersonaDAO pers=null;
try{
pers=dbi.open(PersonaDAO.class);
if(pers.verTodo().size() > 0){
out.println("Lista de persona llena!!:"+pers.verTodo().size());
out.println(""+pers.verTodo().toString());
for(int i=0 ; i < pers.verTodo().size(); i++){
out.println("id:"+pers.verTodo().get(i).getClave());
out.println("nombre:"+pers.verTodo().get(i).getNombre());
out.println("apellido paterno:"+pers.verTodo().get(i).getApellidoP());
out.println("apellido materno:"+pers.verTodo().get(i).getApellidoM());
out.println("edad:"+pers.verTodo().get(i).getEdad());
out.println("peso:"+pers.verTodo().get(i).getPeso());
out.println("talla:"+pers.verTodo().get(i).getTalla());
}
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
pers.close();
}
h.close();
}
}
sábado, 23 de enero de 2016
Conociendo JDBI
Usar JDBC implica el uso de clases y algunas configuraciones que nos
permiten establecer conexión con bases de datos. Además tan solo
necesitamos algún driver para cada tipo de bases (MySQL, Oracle, Sqlite,
Firebird,etc.).
Sin embargo, hay cierta complejidad cuando necesitamos manejar gran cantidad de información. Los que han programado en Java saben lo molesto que puede ser el acceso a base de datos mediante los mecanismos que nos proporciona el JDBC (Java DataBase Connectivy). No es que sean malos, pero cuando se trata de administrar la información de un proyecto más o menos grande si causa algunos problemas.
JDBI nace gracias a la necesidad de los programadores por acceder y administrar bases de datos de una manera más sencilla. Es una librería Java que promete ser una alternativa más adecuada al uso de JDBC.
JDBI nos ofrece dos estilos:
Links
http://jdbi.org/
Sin embargo, hay cierta complejidad cuando necesitamos manejar gran cantidad de información. Los que han programado en Java saben lo molesto que puede ser el acceso a base de datos mediante los mecanismos que nos proporciona el JDBC (Java DataBase Connectivy). No es que sean malos, pero cuando se trata de administrar la información de un proyecto más o menos grande si causa algunos problemas.
JDBI nace gracias a la necesidad de los programadores por acceder y administrar bases de datos de una manera más sencilla. Es una librería Java que promete ser una alternativa más adecuada al uso de JDBC.
JDBI nos ofrece dos estilos:
- Estilo fluido: Donde se hace uso de Datasource similares a JDBC, pero de una manera mucho más sencilla.
- Estilo Objetos SQL: Similar a lo que hacemos usando Hibernate o JPA nativo. donde tenemos nuestras "Entities" y las manipulamos mediante DAOs.
Links
http://jdbi.org/
jueves, 31 de diciembre de 2015
Scala ... en ejemplos sencillos no. 7 [Mapas]
Los mapas o "hashmap" en lenguajes como Scala, Java, etc. son colecciones de objetos desordenados. Se compone de una "llave o identificador" y su correspondiente valor.
Podemos obtener algo como esto:
mapa: {"uno":1,"dos":2,"tres":3}
mapa:{"A":3223,"Z":4329,"W":4322,"ACF":434}
En Scala podemos crear un mapa escribiendo:
var mapa: Map[String,Int] = Map()
Un mapa vacío que puede ser llenado de la siguiente manera:
mapa += (objLlave -> valor)
Tenemos así: Mapas.scala
Para recorrer el mapa creado:
Mapa mapa = Mapa () Objeto obj= Objeto() Integer valor= Integer() mapa.put(obj,valor)
Podemos obtener algo como esto:
mapa: {"uno":1,"dos":2,"tres":3}
mapa:{"A":3223,"Z":4329,"W":4322,"ACF":434}
En Scala podemos crear un mapa escribiendo:
var mapa: Map[String,Int] = Map()
Un mapa vacío que puede ser llenado de la siguiente manera:
mapa += (objLlave -> valor)
Tenemos así: Mapas.scala
object Mapas{ def main(args: Array[String]): Unit ={ var mapa: Map[String,Int] = Map() mapa += ("uno" -> 1) mapa += ("tres" -> 3) mapa += ("Clave" -> 456) } }
Para recorrer el mapa creado:
mapa.keys.foreach{ k => Console.println("Llave:"+k) Console.println("Valor:"+mapa(k)) }
sábado, 12 de diciembre de 2015
Groovy en ejemplos no.9: Leer un JSON
Usar archivos JSON para el intercambio de información entre aplicaciones se ha vuelto muy indispensable. Es una alternativa para sustituir el uso de archivos XML.
Un archivo JSON se compone de:
{
"persona": {
"nombre": "Mariana",
"edad": 32
}
}
Donde "persona" es el nodo (objeto) principal. Los valores pueden ser de tipo boolean (true o false), númericos y cadenas. También podemos definir arreglos (que inician y cierran con corchetes) como este:
{
"persona": {
"nombre": "Mariana",
"edad": 32,
"libros":[
"El extraño caso de el perro en el ropero",
"El error de llamarse Godofredo"
]
}
}
Donde "libros" es el arreglo.
¿Cómo leer el archivo JSON?
leerJSON.groovy
import groovy.json.JsonSlurper
import java.io.File
static main(args) {
def json=new JsonSlurper()
def archivo=new File("persona.json")
if(archivo.exists()){
println "Archivo existe:${archivo.getAbsolutePath()}"
def objeto=json.parse(archivo)
if(objeto !=null){
if(objeto.persona.nombre == null && objeto.persona.nombre == null){
println "Objetos nulos"
}
javax.swing.JOptionPane.showMessageDialog(null, "Nombre:"+objeto.persona.nombre+"\nEdad:"+objeto.persona.edad)
}
}
}
Para acceder a una propiedad del objeto es necesario definir su nombre, por ejemplo, si queremos obtener el "valor" de la propiedad "nombre" debemos acceder de este modo: objeto.persona.nombre
Ejecutamos: groovy leerJSON.groovy
Y obtenemos:
Links
https://geekytheory.com/json-i-que-es-y-para-que-sirve-json/
http://www.json.org/json-es.html
Un archivo JSON se compone de:
- Una colección tipo diccionario con nombre y valor.
- Un arreglo o lista ordenada.
{
"persona": {
"nombre": "Mariana",
"edad": 32
}
}
Donde "persona" es el nodo (objeto) principal. Los valores pueden ser de tipo boolean (true o false), númericos y cadenas. También podemos definir arreglos (que inician y cierran con corchetes) como este:
{
"persona": {
"nombre": "Mariana",
"edad": 32,
"libros":[
"El extraño caso de el perro en el ropero",
"El error de llamarse Godofredo"
]
}
}
Donde "libros" es el arreglo.
¿Cómo leer el archivo JSON?
- Necesitamos crear un archivo json (que cumpla con la estructura adecuada), y que denominaremos como "persona.json"
- Usar la librería groovy.json.JsonSlurper
leerJSON.groovy
import groovy.json.JsonSlurper
import java.io.File
static main(args) {
def json=new JsonSlurper()
def archivo=new File("persona.json")
if(archivo.exists()){
println "Archivo existe:${archivo.getAbsolutePath()}"
def objeto=json.parse(archivo)
if(objeto !=null){
if(objeto.persona.nombre == null && objeto.persona.nombre == null){
println "Objetos nulos"
}
javax.swing.JOptionPane.showMessageDialog(null, "Nombre:"+objeto.persona.nombre+"\nEdad:"+objeto.persona.edad)
}
}
}
Para acceder a una propiedad del objeto es necesario definir su nombre, por ejemplo, si queremos obtener el "valor" de la propiedad "nombre" debemos acceder de este modo: objeto.persona.nombre
Ejecutamos: groovy leerJSON.groovy
Y obtenemos:
Links
https://geekytheory.com/json-i-que-es-y-para-que-sirve-json/
http://www.json.org/json-es.html
Suscribirse a:
Entradas (Atom)
Programando en C# no. 15: ASP .NET Core
Recordemos lo que es .NET: ".NET es una plataforma de desarrollo gratuita, multiplataforma y de código abierto para crear diversos...
-
Ionic es un framework que permite crear aplicaciones móviles híbridas. Éstas aplicaciones son las que emplean tecnologías como HTML, CSS ...
-
Progress ABL es un lenguaje de programación vinculado al entorno Progress OpenEdge , su base de datos y las utilidades que lo rodean. Es s...
-
Vibe Coding es un nuevo paradigma de programación, una nueva forma de crear código. Es un enfoque emergente en el desarrollo de sof...
Etiquetas
- .NET
- 100
- abl
- abstract
- abstractas
- activemq
- ada
- agente
- agile
- akka
- algoritmos
- almacenados
- alternativa
- android
- angular
- angularjs
- apache
- apache-camel
- apache-mesos
- apache-poi
- apex
- api
- appserv
- aprender
- aprender java
- aprender jsf
- aprender python
- aprendizaje
- area
- args
- aserciones
- asm
- asp
- assembly
- assert
- automatización
- awk
- aws
- ayuda
- azure
- backend
- ballerina
- base de datos
- bases de datos
- bash
- bat
- bd
- beam
- beef
- bigquery
- biotipo
- bitacora
- bitcoin
- bleam
- blockchain
- blog
- bq
- bucket
- bundle
- c
- c#
- c++
- c3
- calculadora
- calculo
- camel
- case
- cassandra
- celsius
- ceylon
- cgi
- charp
- charts
- chatgpt
- cherrypy
- chino
- cibersecurity
- clang
- clases
- claude code
- cli
- cliente
- clojure
- closures
- cloud
- cmd
- cmd.bat
- coalesce
- cobol
- codeblocks
- codeigniter
- codes
- código
- códigos
- comando
- comandos
- commit
- comparativa
- compartir
- compilador
- compile
- composer
- comprobación
- computación
- computing
- conceptos
- concurnas
- concurrente
- condicionales
- conectividad
- configuration
- consejos
- const
- constantes
- consultas
- contenedores
- contenedores web
- control de versiones
- conversion
- conversor
- convertidor
- copilot
- core
- corsera
- couchdb
- cpan
- cplus
- cpp
- cpp-httplib
- crear
- cripto
- criptomoneda
- crow
- CrowdStrike
- crystal
- csharp
- cshtml
- css
- css3
- csv
- cte
- curso
- d
- dancer2
- dapper
- datastage
- datos
- deepseek
- delphi
- deploy
- desarrollo
- determinar
- dev c++
- developer
- devops
- días
- directivas
- disparejo
- distribuido
- django
- dlang
- doc
- docker
- docker-swarm
- dockerfile
- document
- documentación
- dotnet
- driver
- dsl
- dylan
- easyphp
- eclipse
- eclipse foundation
- eclipse y scala
- economica
- editor
- eip
- ejb
- ejecutar
- ejemplos
- ejemplos cpp
- ejemplos de csharp
- ejemplos de scala
- ejemplos java
- ejemplos python
- ejmeplo
- elixir
- elixir.
- en línea
- encapsulación
- ensamblador
- entityframework
- enum
- erlang
- error
- errores
- es6
- escribir
- esproc
- esprocsqpl
- estructuras
- ethereum
- euler
- excel
- excepciones
- expando
- export
- express
- externa
- f#
- faces
- fahrenheit
- feliz año
- fetch
- filosofía
- firebase
- flask
- foreach
- framework
- fsharp
- funcional
- funciones
- functions
- futuro
- gcc
- gcp
- geany
- gem
- gemfile
- generador de proyectos
- genie
- gestor de proyectos
- github
- glassfish
- gleam
- gnu
- go
- golang
- google web toolkit
- gosu
- graalvm
- gradle
- grain
- grapes
- graphql
- graven
- grok
- grooscript
- groovy
- groovyeConsole
- grpc
- gson
- gui
- gwt
- gwtext
- hashicorp
- hashmap
- haskell
- haxe
- headers
- helidon
- helm
- herencia
- hibernate
- hola
- hola en ceylon
- horoscopo
- HTA
- html
- html5
- http
- http-server
- http/2
- ia
- iaas
- iac
- ibm
- IDE
- ide scala
- if
- ifnull
- imagen
- imc
- import
- importar
- ingeniería
- iniciar glassfish
- iniciar tomcat
- inicio
- inicio en ceylon
- IntelliJ IDEA pycharm
- interface
- interfaces
- interfaz
- interna
- interoperabilidad
- interprete
- interview
- inversión de control
- inyección de dependencias
- ionic
- ios
- jabaco
- jakartaee
- java
- java swing
- java y ceylon
- JAVA_HOME
- javadoc
- javaee
- javascript
- javaserver
- jax-rs
- jaxb
- jdbc
- jdbi
- jdk
- jdk8
- jee
- jpa
- jpql
- jquery
- jre
- jruby
- jscript
- jsf
- jsni
- json
- juego
- julia
- jvm
- jvm y ceylon
- jython
- k8s
- kafka
- kanban
- katas
- kate
- koltin
- kotlin
- ktor
- kubectl
- kubernetes
- la path
- langchain
- langchain4j
- laravel
- learn
- lectura
- lenguaje
- lenguaje scala
- lenguajes
- let
- leyes
- librería
- libro
- linq
- linux
- list
- lista
- listas
- livescript
- llm
- llvm
- logger
- lua
- macro
- major
- mapas
- mariadb
- maven
- maven y eclipse
- mensajería
- mensajes
- menú
- mercurial
- messagebox
- metaClass
- micronaut
- microsoft
- minilux
- minimal api
- mix
- mobile
- modularidad
- módulo
- mojo
- mojolicious
- mongo
- mongodb
- mono
- monodevelop
- moonbit
- ms-dos
- mu
- mvc
- mybatis
- mysql
- n8n
- native images
- neo4j
- netbeans
- nexus
- ng
- nicon notify
- nimrod
- nlog
- node
- nodejs
- nomad
- nosql
- notificaciones
- npm
- nube
- nuevo
- nuget
- nullable
- nullif
- numericas
- ocaml
- okhttp3
- ollama
- online
- openai
- openclaw
- opencode
- opendylan
- openedge
- operaciones
- oracel
- oracle
- orientación a objetos
- orm
- otp
- owasp
- paas
- paas iaas
- package
- packages
- padrino
- paradigma
- pascal
- path groovy
- path java
- patrones de diseño
- pdf-parser
- perl
- phoenix
- php
- pl/1
- plot
- plsql
- pom.xml.build.gradle
- poo
- powershell
- pregunta
- problema
- problemas al ejecutar programa en ceylon
- procedimientos
- procedures
- programa
- programacion
- programación
- programador
- programadores
- programar
- programas
- programas java
- programming
- progress
- prompt engineering
- proto
- protobuff
- protocolos
- proyectos maven
- prueba
- pseint
- pubsub
- pulsaciones
- pyramid
- python
- pyzenity
- quarkus
- questions
- r
- rabbitmq
- reactiva
- rebar3
- record
- recursos
- regex
- regiones
- remix
- repl
- replace
- repositorios
- REST
- RESTEasy
- reverse
- romanos
- ruby
- run
- rust
- ruta
- saas
- sanic
- sap
- sas
- sbt
- scala
- scottplot
- scripting
- scripts
- scrum
- sdkman
- security
- seguridad
- semántica
- sentencias
- serilog
- servidor
- shell
- show
- simplej
- sinatra
- singleton
- sintaxis
- sitios
- slim
- sms
- smslib
- soap
- socket.io
- solidity
- solución
- spark
- spl
- spring
- spring framework
- spring-boot
- spyder
- sql
- standard
- storage
- stored
- strawberry
- struts
- style
- svn
- swagger
- swift
- symfony
- system
- tapestry
- tarot
- tdd
- técnicas
- terminal
- terraform
- the maven integration requires that eclipse be running in a jdk
- tiempo
- tips
- tomcat
- top-down
- tornadoweb
- tratamiento xml
- triggers
- turbogears
- tutoriales
- type
- typescript
- udemy
- udf
- unitarias
- unsupported
- usar jdk
- uso
- uwamp
- variables
- vba
- vbscript
- ventanas
- verificar
- version
- version_52.0
- versiones
- vertx
- vibecoding
- videojuegos
- vistazo
- visual code
- visual csharp
- visual studio
- vite
- vscode
- vulnerabilidades
- wampserver
- wasm
- web
- web2pybottle
- webapi
- webassembly
- webhooks
- websharper
- websocket
- wildfly
- window
- windows
- windows-services
- wisp
- work-services
- wsl
- WSO2
- xampp
- xml
- xunit
- yaml
- youtube
- zenity
Archivo del blog
-
►
2025
(83)
- ► septiembre (7)
-
►
2024
(58)
- ► septiembre (1)
-
►
2023
(12)
- ► septiembre (1)
-
►
2022
(10)
- ► septiembre (1)
-
►
2021
(26)
- ► septiembre (1)
-
►
2020
(9)
- ► septiembre (2)
-
►
2019
(26)
- ► septiembre (3)
-
►
2015
(24)
- ► septiembre (4)
-
►
2014
(36)
- ► septiembre (1)
-
►
2013
(40)
- ► septiembre (5)
-
►
2012
(46)
- ► septiembre (3)










