agosto 31, 2012

UML en NetBeans

Para hacer diagramas UML en NetBeans 7.1 (en Mac OS X) hice el siguiente procedimiento:
  1. Hacer click en el menú Tools y luego en la opción Plugins.
  2. En la ventana que se abre, hacer click en el tab Settings y hacer click en el botón Add.
  3. En la ventana que se abre digite cualquier nombre en el campo Name (yo le puse Sun) y en el campo URL escriba la siguiente dirección:
    http://dlc.sun.com.edgesuite.net/netbeans/updates/6.9/uc/m1/dev/catalog.xml


    NetBeans comienza el proceso de actualización de la lista de plugins disponibles. Cuando termina vaya al tab Available Plugins y en la lista encontrará UML. Lo selecciona y hace click en el botón Install y sigue las instrucciones.
  4. Reinicia NetBeans. Para probar que funcionó el procedimiento hace click en el menú File y luego en New Project... y en la lista de tipos de projecto deberia estar listado UML


  5. En la siguiente ventana escribe el nombre del proyecto y la ubicación del proyecto en el disco.
  6. Después aparecerá la ventana para seleccionar qué tipo de diagrama UML desea crear.


  7. NetBeans mostrará la ventana para empezar a crear el diagrama estático de clase UML con las herramientas para crear clase, relaciones, etc en el panel de la parte derecha. En la imagen inferior ya se creó una clase en el editor. 


mayo 08, 2008

Estrategia Zerg

Zergling Rush

  1. Ponga los Drones 1-4 a minar
  2. Iniciar el 5to Drone. Mueva su Overlord lejos tratando de adivinar la posición del enemigo, mientras explora el terreno intermedio.
  3. Justo antes de que el 5to Drone esté listo comience el 6to. Cuando el 5to salga, póngalo a minar.
  4. Cuando el 6to salga, póngalo a minar pero que vaya solo una vez. Cuando esté regresando usted debe tener 150 en minerales. Convierta el 6to en un Spawning Pool.
  5. Obtenga otros 50 de minerales, haga un 6to Drone de nuevo. Póngalo a minar con los otros 5 Drones.
  6. Cuando su Spawning Pool esté cerca de la mitad de crecimiento (o más), usted tendrá 100 de minerales. Haga un Overlord. Esto pondrá lento el proceso en aproximadamente 10 segundos, pero proveerá el soporte de comida que usted necesita para mantener un rush fallido de que lo dejen inutilizado.
  7. El Overlord finalizará justo al mismo tiempo o un poco después de que termine el Spawning Pool. Dentro de los siguientes 5 o 6 segundos después de que el Spawning Pool esté vivo, usted tendrá 150 de minerales y 3 Larvae listas. Haga 6 Zerglings.
  8. Mueva el Overlord a algún lugar seguro. Cuando salgan los 6 Zerglings, seleccionelos, y use el commando Move para enviarlos a una base enemiga. Naturalmente esto funciona mejor en mapas pequeños, pero si usted no está jugando contra un buen jugador que conozca cómo se hace una defensa Rush, esto puede funcionar hasta en mapas 256x256.
Ahora, el resultado básico es que usted tiene 6 unidades activas y buscando causar la muerte del enemigo dentro de los primeros 2 minutos de juego. En un mapa estándar de 128x128, si usted sabe dónde va a encontrar a su oponente (algunas veces ayuda ver el mapa de antemano en StarEdit o en la previsualización del juego), usted puede tener sus Zerglings allí antes de que una defensa significativa sea montada.

Zergs vs. Terran

Los Terrans típicamente tendrán Barracks, posiblemente 1 o 2 Marines (algunas veces 3), si se movieron rápidamente. Pero si usted concentra su ataque Zergling, 6 Zerglings pueden acabar con 3 Marines. Los Terran continuarán haciendo Marines, y posiblemente los Marines y los SCVs podrán aniquilar los Zerglings, pero sin antes llevarse a la tumba 1 o 2 SCVs.
En el momento en el que sus 6 Zerglings mueran, usted habrá hecho otros 6 Zerglings y ya podrán atacar. Los Zerg, con su habilidad de hacer 3 unidades en paralelo, pueden mantener un alto flujo de unidades en producción. Aunque note que si usted no ataca efectivamente causando la muerte de los SCVs dentro de los 2 o 3 primeros ataques, usted probablemente esté muerto y enterrado… los Marines seguramente acabarán con la base Zerg.

Zergs vs. Protoss

Contra los Protoss, usted no tendrá buena ventaja. La mejor estrategia es matar todos los Probes e ignorar cualquier Zealot que hayan producido. 2 Zealots, con sus escudos activos, acabarán con los 6 Zerglings completamente. Los Zerglings no están hechos para pelear contra Zealots. Entonces, mejor trate de paralizar la producción…

Otras notas Zerg

Una buena táctica es señalar su Hatchery, y oprimir CTRl+1 para asignarle un acceso directo rápido. Es recomendable hacer eso para todos los Hatcheries. Cuando tenga 3 Larvae y la cantidad necesaria de mineral y gas, digite: { 1, S, letra de la unidad que desea crear } para crear rápidamente 3 nuevas unidades.

Esto funciona muy bien durante el rush porque una vez que usted ha empezado a criar sus 6 unidades iniciales, usted puede digitar: { 1, R }, y ubicar el Rally Point en algún lugar de la base… después: { 1, S, Z } y hacer otros 6 Zerglings mientras usted está luchando en territorio enemigo. A medida que sus Zerglings mueran, sus próximos 6 ya estarán en camino, así usted podrá atacar al enemigo un poco más rápido.

La combinación de teclas también ayuda durante el juego, cuando usted está llevando a cabo grandes movimientos de tropa o si usted está haciendo un ataque masivo contra alguien que esté fuertemente defendido con Hydras o Zerglings... no importa lo que tengan, si usted envía suficientes Mutalisks/Hydras/Zerglings al mismo sitio, la base caerá. Teniendo 5 o 6 Hatcheries, todas generando unidades llegando a la base enemiga siginifica tener entre 15 y 18 Hydras/Mutalisks o entre 10 y 36 Zerglings por minuto… eso hará que la defensa caiga.

Análisis

La estrategia de Rush es bastante viable y si se utiliza suficientemente rápido puede ser difícil de contrarrestar para un jugador Protoss. Si se hace correctamente, usted debería tener 6 Zerglings contra 1 Zealot. Mate el Zealot, y después continúe con los Probes. Eventualmente sus Zerglings morirán, pero no antes de matar 4 Probes.

Contra humanos, es aun más rápido. Usted matará 2 Marines (si el Terran es suficientemente rápido) y después matará los SCVs. Si tiene suerte matará 2 o 3 porque son un poco fuertes.

Una buena defensa es jugar en un mapa grande. Los Zerglings son tremendamente débiles y unas pocas unidades de nivel 2 pueden acabarlos. Cuando se acerquen los Zerglings agrupe los guerreros y los peones en un esfuerzo por erradicarlos completamente.

Mutalisk Rush

  1. Ponga los Drones 1-4 a minar
  2. Incube el 5° Drone y póngalo a minar
  3. Incube el 6° Drone. No Construya el 7° hasta que el 6° salga: incube un Extractor.
  4. Incube el 6° Drone (de nuevo) y póngalo a minar.
  5. Incube el 7° Drone (el Extractor debe estar casi listo o terminado) póngalo a sacar gas.
  6. Incube el 8° Drone y póngalo a minar.
  7. Incube el Spawning Pool.
    En este punto, usted estará 9/9 hasta que construya el Spawning Pool. Eso le da suficiente tiempo para obtener 150 de minerales.
  8. Incube el 9° Drone y póngalo a minar.
  9. Incube un Overlord con la siguiente Larva. Aun estará 9/9 hasta que el Overlord nazca.
  10. Cuando el Overlord esté listo debería tener 150 de mineral y 3 Larvae disponibles.
  11. Incube el Drone 10°, 11° y 12° y póngalos a sacar gas.
  12. Cuando el Spawning Pool esté listo, debería tener 150 de mineral y 100 de gas.
  13. Incube el 13° Drone y cuando nazca debería tener 300 de mineral o algo cercano.
  14. Con el 13° Drone construya el 2° Hatchery. Si hay un sitio cercano para expansión ponga el nuevo Hatchery allí.
  15. Incube de nuevo el Drone 13° y cuando el 2° Hatchery evoluciónelo a Lair.
  16. Con el Drone 13° construya un Spire.
  17. Incube 2 Overlords cuando tenga 200 de mineral.
  18. Incube el Lair esté listo, debería tener un Hatchery, un Lair con 3 Larvae y casi 600 de mineral y 600 de gas.
  19. Incube 6 Mutalisks.
Desde aquí, usted seguirá incubando Mutalisks hasta estar 30/34 o 32/34 y después incube otro Overlord. Empiece a incubar Drones para otro Hatchery cerca a los minerales o al gas.

Esto no es a prueba de lentos. Si sé que el oponente es bueno haciendo rush, esto no funcionará, pero para esos que esperan hacer rush hasta tener 8 o 12 Marines, se encontrarán con 12 a 16 Mutalisks en un mapa de 96x96.

Versión original del tutorial

mayo 06, 2008

Usar una DLL desde SQL Server 2005

Este es mi primer tutorial en un blog, espero que sea de utilidad para los lectores.
Este tutorial pretende mostrar cómo utilizar una DLL desde SQL Server 2005 describiendo el código de la DLL en C# y las instrucciones para utilizar la DLL desde la consola de SQL Server 2005.

El ejemplo que se toma es hacer el envío de un mail desde una función o procedimiento almacenado. La DLL escrita en C# tiene 2 métodos: EnviarCorreo y EscribirLog. Se crea una función que esté asociada a un assembly representado por la DLL y al hacer uso de la función se invoca el método EnviarCorreo lo cual permite enviar un correo desde la base de datos através de la función.

Este es el código de la DLL en C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Mail;
using System.Text;

namespace Comunicacion
{
public class Mensaje
{
public static bool EnviarCorreo(string to, string from, string subject, string body)
{
// Se crea el mensaje
MailMessage mensaje = new MailMessage(from, to);
mensaje.Subject = subject;
mensaje.Body = body;

// Se establece una referencia la servidor SMTP
SmtpClient cliente = new SmtpClient("smtp.gmail.com", 25);
cliente.UseDefaultCredentials = true;

try
{
// Se envia el mail
cliente.Send(mensaje);
return true;
}
catch (Exception ex)
{
return false;
}
}

public static bool EscribirLog(string to, string from, string subject, string body)
{
// Mensaje que será escrito en el archivo
string mensaje = String.Format("Se envió un mensaje a: {0} - desde: {1} con asunto: {2}. Mensaje: {3}", to, from, subject, body);

try
{
// Se crea una referencia al archivo
StreamWriter outFile = System.IO.File.AppendText("c:\\logBD.txt");

// Se escribe el mensaje
outFile.WriteLine(mensaje);

// Se cierra el archivo
outFile.Close();
return true;
}
catch(Exception ex)
{
return false;
}

}
}
}

Se habilita SQL Server 2005 para usar DLL's

exec sp_configure 'clr enabled',1
reconfigure
go

Se habilita la base de datos para que acepte peticiones del CLR.
Para el ejemplo la base de datos se llama PruebaDLL

ALTER DATABASE PruebaDLL SET TRUSTWORTHY ON

Se crea el assembly en la base de datos a partir de la DLL.
Hay varios tipos de permisos pero para que inicialmente no haya problemas se usa UNSAFE.

CREATE ASSEMBLY Comunicaciones FROM 'C:\Comunicacion.dll' WITH PERMISSION_SET = UNSAFE

Se crea una función que consumirá el assembly. Para el ejemplo, la función se llama enviarCorreo. Al final de la función se especifica el assembly al cual estará asociada la función.
La estructura de EXTERNAL NAME es:
NombreDelAssembly.[NombreClase].MetodoDeLaClase
El nombre de la clase debe incluir su namespace. (fully qualified name)

CREATE FUNCTION dbo.enviarCorreo
(
@to as nvarchar(MAX),
@from as nvarchar(MAX),
@subject as nvarchar(MAX),
@body as nvarchar(MAX)
)
RETURNS bit
AS EXTERNAL NAME Comunicaciones.[Comunicacion.Mensaje].EnviarCorreo

Este es el uso de la función desde la consola de SQL Server 2005:

dbo.enviarCorreo 'johncardozo@gmail.com',
'batman@ligajusticia.com',
'Prueba desde SQL server',
'Este es un mail enviado desde SQL server 2005 atraves de una DLL hecha en .Net'

PD. Se reciben comentarios acerca del contenido y del estilo del tutorial para mejorar posibles posteriores artículos, tutoriales, etc.