Es una pregunta que deberíamos hacernos antes de empezar a estudiar y/o aprender programación. La pregunta parece tan sencilla y compleja a la vez.
¿Por qué programamos? Algunos dirán que programamos porque nos pagan, otros porque les parece muy divertido y otros más divagarán en sus respuestas.
Tal vez la respuesta más lógica (y adecuada) es porque necesitamos resolver problemas. Es obvio que estos problemas tienen que ver con las empresas o centros de trabajo donde estamos. Donde se nos paga por crear programas o depurar proyectos existentes.
También existen personas que programan porque les motiva a crear cosas y no necesariamente estudiaron computación (o algo relacionado con las computadoras). Así como hay gente que programa aunque no les guste (sic).
Con el tiempo "el gusto de programar" puede terminar; gente que es muy buena programando y resolviendo problemas relativos a la programación, pero que termina odiando su trabajo.
Los que nos dedicamos a la programación debemos entender que no todos sabemos de todo, algunas cosas nos parecerán muy sencillas y otras nos provocaran mucha frustración al no poder resolverlas lo más rápido posible.
También la frustración de usar un lenguaje o herramienta que no nos guste, por ejemplo, usar Visual Studio (con C#) en lugar de Java o Python con Eclipse o cualquier otro IDE; las fechas de entrega de proyectos, las desveladas, no tener vida social, soportar personas que no nos agradan, etc..
A veces tienes que trabajar con gente que no tiene idea de lo que es la programación e ignora cual es tu trabajo, o peor que ni el mismo tiene idea de lo que él hace ahí. Su jefe inmediato le pide que ponga a trabajar a los de sistemas. ¿En qué? Ni él mismo lo sabe, solo hace lo que le pidieron.
En los comics de Dilbert se puede ver cada situación que viven los programadores, lo manejan de una manera muy sarcástica, pero aunque parezca exagerado no dista mucho de la realidad.
Para concluir, programamos porque necesitamos resolver problemas de la gente, por ejemplo, diseñar un programa para los cajeros automáticos, hacer que la interfaz sea lo más sencilla para el usuario final (aunque esta comprobado que eso no ayuda mucho, ya que la gente muchas veces no sabe usarlos aunque solo consista en apretar unos cuantos botones).
domingo, 14 de diciembre de 2014
domingo, 23 de noviembre de 2014
Programando en Java ... no. 9
Acaba de salir la nueva versión de la librería NiconNotify OSD , la cual provee clases para crear mensajes tipo "alert" de Java Swing.
Un ejemplo.
import javax.swing.UIManager;
import javax.swing.plaf.nimbus.NimbusLookAndFeel;
import nicon.notify.core.Notification;
public class TestNiconNotify {
public static void main(String[] args) {
try{
UIManager.setLookAndFeel(new NimbusLookAndFeel());
int respuesta=Notification.windowConfirmMessage(null, "Confirmacion", "Desea borrar Windows de sus sistema?");
if(respuesta==1){
Notification.windowMessage(null, "Respuesta", "Claro, quiero eliminar Windows de mi sistema");
}else{
Notification.windowMessage(null, "Respuesta", "No, todavia no.");
}
}catch(Exception ex){
System.err.println("error: "+ex.getCause());
}
}
}
Ejecutando programa:
Un ejemplo.
import javax.swing.UIManager;
import javax.swing.plaf.nimbus.NimbusLookAndFeel;
import nicon.notify.core.Notification;
public class TestNiconNotify {
public static void main(String[] args) {
try{
UIManager.setLookAndFeel(new NimbusLookAndFeel());
int respuesta=Notification.windowConfirmMessage(null, "Confirmacion", "Desea borrar Windows de sus sistema?");
if(respuesta==1){
Notification.windowMessage(null, "Respuesta", "Claro, quiero eliminar Windows de mi sistema");
}else{
Notification.windowMessage(null, "Respuesta", "No, todavia no.");
}
}catch(Exception ex){
System.err.println("error: "+ex.getCause());
}
}
}
Ejecutando programa:
Programando en Java ... no. 8
Este ejercicio es muy sencillo, no es nada del otro mundo, crearemos una conexión a una base de datos MySQL, un método para insertar, actualizar, borrar y mostrar todos los datos de una tabla.
Herramientas:
Creamos la base de datos
create database test;
Creamos la tabla persona
create table persona(id int auto_increment primary key, nombre varchar(55),apellidoP varchar(55),apellidoM varchar(55),edad int, peso float,talla float);
Insertar valores a la tabla
insert into persona (nombre,apellidoP,apellidoM,edad,peso,talla) values ("Ernesto","Huerta","Flores",44,78.2,1.70), ("Mariana","Garcia",Torres",23,56.0,1.67);
Código de la conexión a la base de datos (Conexion.java)
La clase Persona.java tendrá las mismas propiedades de la tabla persona
public class Persona {
private Integer id;
private String nombre;
private String apellidoP;
private String apellidoM;
private int edad;
private Float peso;
private Float talla;
public Persona(){}
//...demás métodos
}
Método para consultar los datos de la tabla
Método para crear persona
Método para actualizar persona
Método para eliminar persona
Herramientas:
- Eclipse Luna
- Librería mysql-connector-java-5.1.34-bin.jar
Creamos la base de datos
create database test;
Creamos la tabla persona
create table persona(id int auto_increment primary key, nombre varchar(55),apellidoP varchar(55),apellidoM varchar(55),edad int, peso float,talla float);
Insertar valores a la tabla
insert into persona (nombre,apellidoP,apellidoM,edad,peso,talla) values ("Ernesto","Huerta","Flores",44,78.2,1.70), ("Mariana","Garcia",Torres",23,56.0,1.67);
Código de la conexión a la base de datos (Conexion.java)
La clase Persona.java tendrá las mismas propiedades de la tabla personapublic class Persona {
private Integer id;
private String nombre;
private String apellidoP;
private String apellidoM;
private int edad;
private Float peso;
private Float talla;
public Persona(){}
//...demás métodos
}
Método para consultar los datos de la tabla
Método para crear persona
Método para actualizar persona
Método para eliminar persona
sábado, 25 de octubre de 2014
Julia en ejemplos no.2
En este ejemplo vamos veremos como introducir datos y crearemos una función para calcular el área de un triángulo equilátero.
#función para leer datos
function entrada(prompt::String="")
print(prompt)
chomp(readline())
end
#función para calcular área
function area(b,h)
return (b*h) / 2.0
end
#cuerpo principal del programa
begin
run(`clear`)
base=float(entrada("Introduce base:"))
altura=float(entrada("Introduce altura:"))
println("area obtenida: ",area(base,altura))
end
¿Cómo ejecuto el script?
julia nombreDeTuprograma.jl
- Función para leer datos
- Función para calcular área
- Cuerpo principal del programa
#función para leer datos
function entrada(prompt::String="")
print(prompt)
chomp(readline())
end
#función para calcular área
function area(b,h)
return (b*h) / 2.0
end
#cuerpo principal del programa
begin
run(`clear`)
base=float(entrada("Introduce base:"))
altura=float(entrada("Introduce altura:"))
println("area obtenida: ",area(base,altura))
end
¿Cómo ejecuto el script?
julia nombreDeTuprograma.jl
sábado, 11 de octubre de 2014
Programando en Ceylon ... no. 4
Ejemplo. Programa que calcule el área de un triángulo, un cuadrado, y un circulo.
Áreas (fórmulas):
Triángulo => (base*altura)/2
Cuadrado => lado^2
Circulo => 3.14159*(radio^2)
Crearemos:
- Una interface
- Una clase base abstracta
- Tres clases hijas
shared interface NombreInterface{ ... }
Llamaremos 'Operaciones' a nuestra interface, escribimos un método 'area', el cual nos servirá más adelante.
shared interface Operaciones{
shared formal Float area();
}
Es muy similar a Java, aunque es obvio que las anotaciones y palabras reservadas van a cambiar.
La clase base abstracta quedará así:
abstract class Figura() of Triangulo|Cuadrado|Circulo satisfies Operaciones{ }
La parte "of Triangulo|Cuadrado|Circulo" nos indica las clases hijas, la parte "satisfies Operaciones" es similar al implements de Java.
Las clases hijas quedarán de la siguiente forma:
shared class Triangulo(base,altura) extends Figura(){
shared Float base;
shared Float altura;
shared actual Float area(){
return (base*altura)/2.0;
}
shared String description = "Triangulo(base: ``base``, altura: ``altura``)";
}
shared class Cuadrado(lado) extends Figura(){
shared Float lado;
shared actual Float area(){
return lado^2;
}
shared String description = "Cuadrado(lado: ``lado``)";
}
shared class Circulo(radio) extends Figura(){
shared Float radio;
shared actual Float area(){
return 3.14159*(radio^2);
}
shared String description = "Circulo(radio: ``radio``)";
}
Finalmente el método principal del programa.
shared void run(){
Triangulo triangulo=Triangulo(12.9,20.0);
Cuadrado cuadrado=Cuadrado(3.7);
Circulo circulo=Circulo(2.9);
print(" ``triangulo.description``");
print(" ``cuadrado.description``");
print(" ``circulo.description``");
print(" area triangulo: ``triangulo.area()``");
print(" area cuadrado: ``cuadrado.area()``");
print(" area circulo: ``circulo.area()``");
}
Compilamos: ceylon compile source/elefante.ceylon
Ejecutamos: ceylon run default
sábado, 13 de septiembre de 2014
Programando en C# no. 3 ...
Ingenieria económica en C#
Una alternativa para enseñar a programar es mediante ejemplos. Tal vez a muchos no les interese para nada las matemáticas, sin embargo son necesarias en varios aspectos de nuestra vida. Por ejemplo, a muchos de nosotros se nos complica la administración del dinero. Creemos que solo es para gastar, pero no es así.
Planeamos comprar un auto, pagar deudas, etc. Sin embargo no tenemos un plan para hacerlo, y llegan los problemas.
Preguntas como:
No es indispensable contar con grandes cantidades de dinero o ser dueño de una empresa para poder administrar nuestro dinero. Tampoco ser experto en matemáticas financieras.
¿Qué es la ingeniería económica?
Es una colección de técnicas matemáticas que simplifican las comparaciones económicas.
Básicamente nos ayudan a tomar decisiones respecto al uso del dinero.
Pasos para resolver problemas
Valor futuro
vf=vp*(1+n)**n
Esta fórmula nos sirve para obtener el valor futuro (vf) de esa cantidad en préstamo (vp) dado una tasa de interés (i) y un plazo de pago (n). Es la suma o valor del dinero en algún futuro.
Ejemplo. María Isabel pide un préstamo de $ 12,000.00 a una tasa de interés del 3% y un plazo de pago de 4 años. Determinar el valor futuro de esa cantidad.
Paso 1: Identificar el problema.
Lo que nos pide es obtener el valor o suma de esa cantidad.
Paso2: Definir las variables necesarias.
vf=¿?
vp= $12,000.00
i= 3%
n= 4 años
Paso 3: Escribir los pasos necesarios para resolver el problema.
Realizamos el algoritmo.
Calcular_ValorFuturo
Entrada: vp, i, n
Salida: vf
Inicio
Escribe "Introducir monto inicial"
Lee vp
Escribe "Introducir tasa de interés"
Lee i
Escribe "Plazo a pagar"
Lee n
Si (n>0 && i>0 && vp>0) entonces
vf= vp * (1+i/100)**n
fin_si
otro
Escribe "no debe haber valores menores a cero"
fin_otro
Escribe "El valor futuro es %.2f"%(vf)
Fin
Paso 4: Convertir a código
En este caso usaremos C#, es necesario tenerlo instalado. Creamos un nuevo proyecto de tipo Windows Forms.
Lo nombramos "IngenieriaEconomica".
Para hacer uso del componente InputBox es necesario dirigirse al Explorador de soluciones, dar clic derecho a References, dentro de la etiqueta .NET seleccionar Micrososft.VisualBasic y aceptar.
Listo
Una alternativa para enseñar a programar es mediante ejemplos. Tal vez a muchos no les interese para nada las matemáticas, sin embargo son necesarias en varios aspectos de nuestra vida. Por ejemplo, a muchos de nosotros se nos complica la administración del dinero. Creemos que solo es para gastar, pero no es así.
Planeamos comprar un auto, pagar deudas, etc. Sin embargo no tenemos un plan para hacerlo, y llegan los problemas.
Preguntas como:
- ¿Cuánto debo ahorrar para pagar mis estudios universitarios?
- ¿Es necesario conseguir una tarjeta de crédito?
- Si pido un préstamo ¿Cuánto tendré que pagar después?
- Etc.
No es indispensable contar con grandes cantidades de dinero o ser dueño de una empresa para poder administrar nuestro dinero. Tampoco ser experto en matemáticas financieras.
¿Qué es la ingeniería económica?
Es una colección de técnicas matemáticas que simplifican las comparaciones económicas.
Básicamente nos ayudan a tomar decisiones respecto al uso del dinero.
Pasos para resolver problemas
- Identificar el problema y entenderlo claramente
- Definir las variables necesarias
- Escribir los pasos necesarios para resolver el problema
- Convertir esa solución a código
Valor futuro
vf=vp*(1+n)**n
Esta fórmula nos sirve para obtener el valor futuro (vf) de esa cantidad en préstamo (vp) dado una tasa de interés (i) y un plazo de pago (n). Es la suma o valor del dinero en algún futuro.
Ejemplo. María Isabel pide un préstamo de $ 12,000.00 a una tasa de interés del 3% y un plazo de pago de 4 años. Determinar el valor futuro de esa cantidad.
Paso 1: Identificar el problema.
Lo que nos pide es obtener el valor o suma de esa cantidad.
Paso2: Definir las variables necesarias.
vf=¿?
vp= $12,000.00
i= 3%
n= 4 años
Paso 3: Escribir los pasos necesarios para resolver el problema.
Realizamos el algoritmo.
Calcular_ValorFuturo
Entrada: vp, i, n
Salida: vf
Inicio
Escribe "Introducir monto inicial"
Lee vp
Escribe "Introducir tasa de interés"
Lee i
Escribe "Plazo a pagar"
Lee n
Si (n>0 && i>0 && vp>0) entonces
vf= vp * (1+i/100)**n
fin_si
otro
Escribe "no debe haber valores menores a cero"
fin_otro
Escribe "El valor futuro es %.2f"%(vf)
Fin
Paso 4: Convertir a código
En este caso usaremos C#, es necesario tenerlo instalado. Creamos un nuevo proyecto de tipo Windows Forms.
Lo nombramos "IngenieriaEconomica".
Para hacer uso del componente InputBox es necesario dirigirse al Explorador de soluciones, dar clic derecho a References, dentro de la etiqueta .NET seleccionar Micrososft.VisualBasic y aceptar.
Comenzamos colocando dos botones y una etiqueta. En el código del botón Quitar colocamos:
Environment.Exit(0);
Environment.Exit(0);
Dentro del botón Calcular colocamos:
double vp=0.0,vf=0.0,i=0.0;
int n=0;
try{
vp=double.Parse(Microsoft.VisualBasic.Interaction.InputBox("Introduce monto inicial"));
i=double.Parse(Microsoft.VisualBasic.Interaction.InputBox("Introduce tasa de interés"));
n= int.Parse(Microsoft.VisualBasic.Interaction.InputBox("Introduce plazo"));
if(n>0 && i>0 && vp>0){
vf=vp*Math.Pow(1+i/100,n);
}else{
MessageBox.Show("no debe haber valores menores a cero");
}
label1.Text= "el valor o suma total generada es de $ "+vf;
}catch(Exception ex){
MessageBox.Show("Error: "+ex.Message);
}
Resultado:
double vp=0.0,vf=0.0,i=0.0;
int n=0;
try{
vp=double.Parse(Microsoft.VisualBasic.Interaction.InputBox("Introduce monto inicial"));
i=double.Parse(Microsoft.VisualBasic.Interaction.InputBox("Introduce tasa de interés"));
n= int.Parse(Microsoft.VisualBasic.Interaction.InputBox("Introduce plazo"));
if(n>0 && i>0 && vp>0){
vf=vp*Math.Pow(1+i/100,n);
}else{
MessageBox.Show("no debe haber valores menores a cero");
}
label1.Text= "el valor o suma total generada es de $ "+vf;
}catch(Exception ex){
MessageBox.Show("Error: "+ex.Message);
}
Resultado:
Listo
sábado, 30 de agosto de 2014
Groovy ... en ejemplos no. 4
Herencia
Al definir clases esperamos que estas cumplan todos los requisitos necesarios, ni más ni menos. Si creamos una clase llamada Imagen, esta debe tener atributos que la identifiquen: nombre, tamaño, y url.
class Imagen{
String nombre
String tamanyo
String url
}
Ahora una clase llamada TestImage con método main.
class TestImage{
static main(args){
def imagen=new Imagen(nombre:"Groovy.jpg",tamanyo:"45kb",url:"http://misimagenes.com.mx")
}
//también podría haber sido así
def imagen=new Imagen()
imagen.with{
nombre="Groovy.jpg"
tamanyo="45kb"
url="http://misimagenes.com.mx"
}
}
Al parecer no existe problema alguno, esta clase cumple su objetivo. Ahora ¿qué pasaría si necesitaramos agregarle alguna 'funcionalidad' extra? para ello usaremos la herencia.
Vamos a crear:
//clase base
class Heroe{}
//clase hija hereda de clase padre
class SuperHeroe extends Heroe{}
//hace uso de los métodos de la interface Superpoderes
class Superman extends SuperHeroe implements Superpoderes{
@Override
public void vuelo(){
println "Superman vuela"
}
@Override
public void velocidad(){
println "Superman corre a gran velocidad"
}
@Override
public void fuerza(){
println "Superman posee gran fuerza"
}
}
//hace uso de la interface Habilidades
class Batman extends SuperHeroe implements Habilidades{
@Override
public void karate(){
println "Batman sabe karate"
}
}
interface Superpoderes{
public abstract void vuelo()
public abstract void velocidad()
public abstract void fuerza()
}
interface Habilidades{
public abstract void karate()
}
class TestHeroe{
static main(args) {
Superman superman=new Superman()
Batman batman=new Batman()
superman.vuelo()
superman.velocidad()
superman.fuerza()
batman.karate()
}
}
Salida:
Superman vuela
Superman corre a gran velocidad
Superman posee gran fuerza
Batman sabe karate
Ejecutamos: groovy TestHeroe.groovy
Código:http://www.pasteall.org/53722/groovy
Al definir clases esperamos que estas cumplan todos los requisitos necesarios, ni más ni menos. Si creamos una clase llamada Imagen, esta debe tener atributos que la identifiquen: nombre, tamaño, y url.
class Imagen{
String nombre
String tamanyo
String url
}
Ahora una clase llamada TestImage con método main.
class TestImage{
static main(args){
def imagen=new Imagen(nombre:"Groovy.jpg",tamanyo:"45kb",url:"http://misimagenes.com.mx")
}
//también podría haber sido así
def imagen=new Imagen()
imagen.with{
nombre="Groovy.jpg"
tamanyo="45kb"
url="http://misimagenes.com.mx"
}
}
Al parecer no existe problema alguno, esta clase cumple su objetivo. Ahora ¿qué pasaría si necesitaramos agregarle alguna 'funcionalidad' extra? para ello usaremos la herencia.
Vamos a crear:
- Una clase base (o padre) llamada Heroe
- Dos clases hijas llamadas Superman y Batman
- Dos interfaces llamadas Superpoderes y Habilidades
- Una clase llamada TestHeroe
//clase base
class Heroe{}
//clase hija hereda de clase padre
class SuperHeroe extends Heroe{}
//hace uso de los métodos de la interface Superpoderes
class Superman extends SuperHeroe implements Superpoderes{
@Override
public void vuelo(){
println "Superman vuela"
}
@Override
public void velocidad(){
println "Superman corre a gran velocidad"
}
@Override
public void fuerza(){
println "Superman posee gran fuerza"
}
}
//hace uso de la interface Habilidades
class Batman extends SuperHeroe implements Habilidades{
@Override
public void karate(){
println "Batman sabe karate"
}
}
interface Superpoderes{
public abstract void vuelo()
public abstract void velocidad()
public abstract void fuerza()
}
interface Habilidades{
public abstract void karate()
}
class TestHeroe{
static main(args) {
Superman superman=new Superman()
Batman batman=new Batman()
superman.vuelo()
superman.velocidad()
superman.fuerza()
batman.karate()
}
}
Salida:
Superman vuela
Superman corre a gran velocidad
Superman posee gran fuerza
Batman sabe karate
Ejecutamos: groovy TestHeroe.groovy
Código:http://www.pasteall.org/53722/groovy
Suscribirse a:
Entradas (Atom)
El lenguaje de programación C
El mítico lenguaje de programación C sigue siendo el lenguaje que definió todo. Y con todo nos referimos a todo lo referente a la inf...
-
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...
-
Claude Code es una herramienta de inteligencia artificial creada por Anthropic que funciona directamente en la terminal. Sirve para acele...
-
Ionic es un framework que permite crear aplicaciones móviles híbridas. Éstas aplicaciones son las que emplean tecnologías como HTML, CSS ...
Etiquetas
- .NET
- 100
- 2026
- 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
- cygwin
- 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
- documental
- 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
- experience api
- 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
- go golang
- 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
- jai
- 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
- mingw64
- minilux
- minimal api
- mix
- mobile
- modularidad
- módulo
- mojo
- mojolicious
- mongo
- mongodb
- mono
- monodevelop
- moonbit
- ms-dos
- mu
- mulesoft
- 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 coincidencia
- patrones de diseño
- pattern matching
- 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
- processs api
- 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
- system api
- tapestry
- tarot
- tdd
- técnicas
- terminal
- terraform
- the maven integration requires that eclipse be running in a jdk
- tiempo
- tips
- tomcat
- top-down
- tornadoweb
- trailer
- 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
-
▼
2026
(50)
- ► septiembre (4)
-
►
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)


















