jueves, mayo 02, 2013

Java: ¿Cómo referenciar clases de otro proyecto con Eclipse?

Una vez terminado "Eclipse and Java for Total Beginners", lo primero que estoy intentando es traducir mi librería personal de clases .NET.

Creé un nuevo proyecto y comencé a traducir mi clase base (superclass en Java) para conexiones a SQL Server.

Para probar, hice un nuevo proyecto y traté de heredar mi clase con lo que me encontré con el error: "The import xxx cannot be resolved".

(Google "java import other project package cannot be resolved to a type")

¿Cómo es en Eclipse lo que en Visual Studio es click derecho en "References" -> "Add Reference" -> "Projects"?


En Eclipse es "Project" -> "Properties" -> "Java Build Path" -> tab "Projects" -> "Add". Seleccionamos el proyecto donde están las clases que queremos utilizar y le damos "ok".

En este caso estoy heredando una clase abstracta por lo que aprendí dos nuevas cosas:

¿Cómo se indica que estamos heredando de otra clase?
C#
public class Hija : Padre {

Java
public class Hija extends Padre {


¿Cómo se define un método abstracto de la superclase?

C#
protected override String metodo() {

Java
@Override
protected String metodo() {

Continuará...

martes, abril 30, 2013

Java para desarrolladores .NET

Soy desarrollador .NET desde hace mucho tiempo y creo que C# es uno de los lenguajes más elegantes de todos. Al día de hoy no hay nada que no haya podido hacer en C#.

Sin embargo siempre me gustó Java y ahora tengo la oportunidad de aprenderlo debido a una necesidad laboral.

No encontré muchos recursos en la web para un desarrollador .NET que quiere aprender Java, de modo que voy a ir posteando mi recorrido.

¿Cómo creo un proyecto nuevo?
¿Cómo compilo una aplicación?
¿Cual es el equivalente en Java al DataTable de .NET?

Estas son las preguntas que tengo y no "¿qué es un objeto?" o "¿que es herencia?".


Comencemos


Para empezar es necesario mirar el curso Eclipse and Java for Total Beginners. Si vamos a programar en Java, vamos a usar Eclipse y este tutorial se focaliza más en el uso de la herramienta que en explicar el código.

Aunque el curso tiene varios años, es completamente aplicable a las versiones nuevas de Eclipse. El único punto que cambió es los JUnit Test Cases, pero rápidamente se entienden las diferencias.

Continuará...

sábado, diciembre 22, 2012

Cómo saber si un número es potencia de 2 en C#

Uno de las razones de este blog es la de publicar soluciones cuando no las encuentro en Google y las desarrollo por mi cuenta.

Busqué en Google cómo determinar si un número es potencia de 2 y encontré respuestas erróneas debido a que muchos confunden potencia de 2 con elevar un número al cuadrado.

La solución en C# es extremadamente sencilla y sirve para saber si un número es potencia de cualquier número.

La explicación es que la operación inversa de la potenciación es el logaritmo (y no la raiz cuadrada). Entonces, 2 elevado a la potencia de 10 da por resultado un número cuyo logaritmo en base 2 es 10.

Con esto en mente, la solución más sencilla es sacar el logaritmo en base 2 de dicho número y verificar que el resultado es un número entero.

El código:

public bool esPotenciaDe2 (int numero) 
{
 return (System.Math.Log(numero, 2) % 1 == 0);
} 

Para saber si el número resultante es entero simplemente obtengo el módulo 1 del mismo.

Fácilmente podemos convertir la función en una genérica agregando un nuevo parámetro:

public bool esPotenciaDeN (int numero, int esPotenciaDe) 
{
 return (System.Math.Log(numero, esPotenciaDe) % 1 == 0);
} 

Sencillo pero no lo encontré en Google.

lunes, junio 11, 2012

Algoritmos de Cruce y Mutación


Hace un tiempo subí un video de mi implementación de Algoritmos Genéticos para resolver el problema del viajante. Unos días más tarde subí un segundo video con la misma implementación pero mostrando cómo afecta al resultado, la cantidad de algoritmos de cruce y mutación utilizados.

Ahora subí una página donde se puede ver cómo funcionan los 6 algoritmos de cruce y los 6 algoritmos de mutación que utilicé en este desarrollo.

jueves, agosto 11, 2011

Configurar ProFTPD en Ubuntu para que los usuarios vean sólo el home folder

Me costó mucho encontrar información sobre cómo configurar ProFTPD Server para que los usuarios, al conectarse, vean la carpeta correspondiente como si fuera un root ( / ).

Ejemplo de lo que sucede normalmente

1) Tenemos Ubuntu Server (o similar) con ProFTPD Server.
2) Creamos un usuario con el único fin de ser un login de FTP. Por ejemplo: usuarioftp.
3) Seteamos el "home folder" de este usuario en /home/usuarioftp
4) Entramos por ftp con ese usuario y vemos lo siguiente:


Vemos el home folder del usuario creado pero también podemos ir hacia "arriba" y ver el resto de las carpetas.

Solución

1) Creamos un grupo en Ubuntu que contenga a los usuarios que crearemos sólo con el objetivo de conectarse por FTP. Ejemplo: usuariosftpexternos.

2) Creamos nuestro primer usuario "usuarioftp", seteamos su home folder y lo agregamos al grupo "usuariosftpexternos".

3) Editamos el archivo proftpd.conf que normalmente está en: /etc/proftpd/proftpd.conf

4) Agregamos la siguiente línea:
DefaultRoot ~ usuariosftpexternos
(el símbolo ~ hace referencia al home folder del usuario).

5) Reiniciamos el servicio de ProFTPD.

Listo! De ahora en más, todos los usuarios que creemos en Ubuntu y que pertenezcan al grupo "usuariosftpexternos", accederán a su Home Folder cuando se conecten por FTP y verán esa carpeta como root. Es decir, no podrán ver el resto de las carpetas del servidor.

Explicación

El comando DefaultRoot tiene la siguiente sintáxis:

DefaultRoot folder grupo, [!grupo2]

se lee: "Definí como root la carpeta "folder" para los usuarios que estén "grupo", pero no aplica si el usuario pertenece a "grupo2" (opcional).

La instrucción en el paso 4 se lee: "Definí como root la carpeta "Home Folder" respectiva de los usuarios que estén en el grupo "usuariosftpexternos".