Posteos de artículos y noticias importantes del mundo de sistemas, y muy esporádicamente anotaciones personales.
martes, diciembre 04, 2007
miércoles, noviembre 14, 2007
Por favor no instalés Windows Vista
El titulo de mi post pareciera exagerado, pero si vamos a mi experiencia con windows vista, es un titulo completamente valido.
Visual Studio me da errores de runtime y se cierra.
Firefox llega a ocuparme hasta 300 Mb de memoria RAM.
Tengo 8 Gb. de RAM pero si utilizo mas de 4 el disco duro trabaja incansablemente y el sistema se vuelve lento, es decir no puedo usarlos todos.
Cuando saco un backup de mi información (lo cual genera acceso intensivo a disco) mi vista se congela mientras dura el proceso.
Mi teléfono lo tengo que sincronizar por bluetooth ya que vista no reconoce mi base de sincronización.
No puedo dejar mi máquina encendida ni 3 dias ya que se va degradando aun mas el rendimiento (mi XP lo dejaba semanas).
y para colmo
Me funciona mas rápido el logmein que el Remote Desktop en vista.
Como servidor de paginas los tiempos de renderizado en vista son 10 veces mas lentos (medidos por addon de firefox) que el de un xp montado en una virtual!!!, para servir paginas tengo que montar una virtual con xp, que responde mas rápido que mi flamante vista.
Al encender mi máquina (solo encederla) ya tengo 1.6Gb. de memoria RAM ocupada, se supone que es por el superfetch pero parece no ayudar en nada al rendimiento.
En general vista da problemas de compatibilidad pero eso es comprensible, lo que es insoportable es lo lento (pude utilizar una palabra peor) y devorador de recursos que se vuelve.
pero lo peor
no puedo quitar vista de mi máquina ya que xp solamente soporta 4Gb de RAM como máximo.
jueves, noviembre 08, 2007
Aprendiendo a usar Google Maps (Segunda Entrega)
como el nombre lo dice la segunda parte del articulo de como hacer aplicaciones utilizando google maps. El artículo aquí
miércoles, octubre 10, 2007
Aprendiendo a Utilizar Google Maps (Primera Entrega)
Leyendo algunos posts que llegan a mi cuenta encontré este interesante artículo en otro blog, sobre como realizar aplicaciones que aprovechen las enormes caracteristicas del google maps. Articulo aqui.
jueves, octubre 04, 2007
Crear un virtual directory con .net
Es relativamente fácil implementar una rutina para crear directorios virtuales desde codigo, aqui el post original
Private Sub CreateVirtualDir(ByVal WebSite As String, ByVal AppName As String, ByVal Path As String)
Dim IISSchema As New System.DirectoryServices.DirectoryEntry("IIS://" & WebSite & "/Schema/AppIsolated")
Dim CanCreate As Boolean = Not IISSchema.Properties("Syntax").Value.ToString.ToUpper() = "BOOLEAN"
IISSchema.Dispose()
If CanCreate Then
Dim PathCreated As Boolean
Try
Dim IISAdmin As New System.DirectoryServices.DirectoryEntry("IIS://" & WebSite & "/W3SVC/1/Root")
'make sure folder exists
If Not System.IO.Directory.Exists(Path) Then
System.IO.Directory.CreateDirectory(Path)
PathCreated = True
End If
'If the virtual directory already exists then delete it
For Each VD As System.DirectoryServices.DirectoryEntry In IISAdmin.Children
If VD.Name = AppName Then
IISAdmin.Invoke("Delete", New String() {VD.SchemaClassName, AppName})
IISAdmin.CommitChanges()
Exit For
End If
Next VD
'Create and setup new virtual directory
Dim VDir As System.DirectoryServices.DirectoryEntry = IISAdmin.Children.Add(AppName, "IIsWebVirtualDir")
VDir.Properties("Path").Item(0) = Path
VDir.Properties("AppFriendlyName").Item(0) = AppName
VDir.Properties("EnableDirBrowsing").Item(0) = False
VDir.Properties("AccessRead").Item(0) = True
VDir.Properties("AccessExecute").Item(0) = True
VDir.Properties("AccessWrite").Item(0) = False
VDir.Properties("AccessScript").Item(0) = True
VDir.Properties("AuthNTLM").Item(0) = True
VDir.Properties("EnableDefaultDoc").Item(0) = True
VDir.Properties("DefaultDoc").Item(0) = "default.htm,default.aspx,default.asp"
VDir.Properties("AspEnableParentPaths").Item(0) = True
VDir.CommitChanges()
'the following are acceptable params
'INPROC = 0
'OUTPROC = 1
'POOLED = 2
VDir.Invoke("AppCreate", 1)
Catch Ex As Exception
If PathCreated Then
System.IO.Directory.Delete(Path)
End If
Throw Ex
End Try
End If
End Sub
Private Sub CreateVirtualDir(ByVal WebSite As String, ByVal AppName As String, ByVal Path As String)
Dim IISSchema As New System.DirectoryServices.DirectoryEntry("IIS://" & WebSite & "/Schema/AppIsolated")
Dim CanCreate As Boolean = Not IISSchema.Properties("Syntax").Value.ToString.ToUpper() = "BOOLEAN"
IISSchema.Dispose()
If CanCreate Then
Dim PathCreated As Boolean
Try
Dim IISAdmin As New System.DirectoryServices.DirectoryEntry("IIS://" & WebSite & "/W3SVC/1/Root")
'make sure folder exists
If Not System.IO.Directory.Exists(Path) Then
System.IO.Directory.CreateDirectory(Path)
PathCreated = True
End If
'If the virtual directory already exists then delete it
For Each VD As System.DirectoryServices.DirectoryEntry In IISAdmin.Children
If VD.Name = AppName Then
IISAdmin.Invoke("Delete", New String() {VD.SchemaClassName, AppName})
IISAdmin.CommitChanges()
Exit For
End If
Next VD
'Create and setup new virtual directory
Dim VDir As System.DirectoryServices.DirectoryEntry = IISAdmin.Children.Add(AppName, "IIsWebVirtualDir")
VDir.Properties("Path").Item(0) = Path
VDir.Properties("AppFriendlyName").Item(0) = AppName
VDir.Properties("EnableDirBrowsing").Item(0) = False
VDir.Properties("AccessRead").Item(0) = True
VDir.Properties("AccessExecute").Item(0) = True
VDir.Properties("AccessWrite").Item(0) = False
VDir.Properties("AccessScript").Item(0) = True
VDir.Properties("AuthNTLM").Item(0) = True
VDir.Properties("EnableDefaultDoc").Item(0) = True
VDir.Properties("DefaultDoc").Item(0) = "default.htm,default.aspx,default.asp"
VDir.Properties("AspEnableParentPaths").Item(0) = True
VDir.CommitChanges()
'the following are acceptable params
'INPROC = 0
'OUTPROC = 1
'POOLED = 2
VDir.Invoke("AppCreate", 1)
Catch Ex As Exception
If PathCreated Then
System.IO.Directory.Delete(Path)
End If
Throw Ex
End Try
End If
End Sub
miércoles, octubre 03, 2007
Util, seleccionar un registro aleatoriamente
A veces, necesitamos obtener información aleatoria de una Base de Datos por diferentes razones, aquí unas rutinas muy útiles para cuando queremos generar información de prueba.
articulo original aqui
-------------------------------------------------------------------------------
Select a random row with MySQL:
SELECT column FROM table
ORDER BY RAND()
LIMIT 1
Select a random row with PostgreSQL:
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 1
Select a random row with Microsoft SQL Server:
SELECT TOP 1 column FROM table
ORDER BY NEWID()
Select a random row with IBM DB2
SELECT column, RAND() as IDX
FROM table
ORDER BY IDX FETCH FIRST 1 ROWS ONLY
Thanks Tim
Select a random record with Oracle:
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 1
articulo original aqui
-------------------------------------------------------------------------------
Select a random row with MySQL:
SELECT column FROM table
ORDER BY RAND()
LIMIT 1
Select a random row with PostgreSQL:
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 1
Select a random row with Microsoft SQL Server:
SELECT TOP 1 column FROM table
ORDER BY NEWID()
Select a random row with IBM DB2
SELECT column, RAND() as IDX
FROM table
ORDER BY IDX FETCH FIRST 1 ROWS ONLY
Thanks Tim
Select a random record with Oracle:
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 1
sábado, septiembre 29, 2007
Programadores del Kernel de Linux
Como información curiosa, una fotografia del cuerpo de programadores del kernel de linux, incluyendo por supuesto al pinguino fundador Linus Torvalds.
enlace completo aqui
viernes, agosto 31, 2007
HOWTO: Compress Virtual PC virtual hard disks (.VHDs)
Para los que utilizan Vmware es un poco mas sencillo pero si tenés alguna instalación con Virtual PC, éstas instrucciones te van a ser muy útiles, casi recuperé la mitad de mi disco duro.
el artículo aquí
lunes, agosto 27, 2007
Aventura en España
Debido a compromisos de trabajo tuve la oportunidad de conocer Madrid, por supuesto una ciudad hermosa y grandísima. Tiene atractivos turísticos historicos como el Palacio Real y modernos como el Estadio Santiago Bernabeu. Además de los atractivos turísticos qué me gustó y que no, pues me gusto que da confianza salir de noche, es bastante segura, el metro de Madrid es una maravilla, podés ir de una esquina a otra de la ciudad inmediatamente, lo que no me gustó pues los precios, aunque no es algo exclusivo de Madrid sino de Europa, para nosotros los Latinamericanos que estamos acostumbrados a un nivel de vida mucho mas barato aquí, todo nos parece caro, yo desayunaba un pan tostado con mermelada, cafe y zumo de naranja y eso me costaba €8 son como $10, aquí en Guatemala eso me cuesta unos Q15 que somo como €1.5 casi $2, una coca cola en una tienda de la calle €3 que son como Q30.
martes, agosto 14, 2007
Para que practiqués
Si querés practicar un poco, éste programa tiene algunas funciones muy buenas, un listado de 8000 palabras con su traducción al ingles y su pronunciación respectiva, tiene examenes tanto de traducción textual como de comprensión auditiva, ademas se puede dejar corriendo como un widget mostrando palabras y su traducción, sin darte cuenta te las vas aprendiendo. En resumen es un programita sencillo para enriquecer el vocabulario en ingles y mejorar la comprensión, es feo pero muy útil.
enlace http://wordsgalore.com/
jueves, agosto 02, 2007
Numero a Letras en SQL
Mas de alguna vez hemos tenido la necesidad de pasar de numeros a letras, y hay una gran cantidad de rutinas muy eficientes para hacerlo, tanto para delphi, .NET, etc. Aquí una no tan común en SQL. Cortesía de Hugo.
CREATE FUNCTION [dbo].[Num2Let]
(
@Numero NUMERIC(20,2)
)
RETURNS varchar(2000)
AS
BEGIN
DECLARE @lnEntero INT,
@lcRetorno VARCHAR(512),
@lnTerna INT,
@lcMiles VARCHAR(512),
@lcCadena VARCHAR(512),
@lnUnidades INT,
@lnDecenas INT,
@lnCentenas INT,
@lnFraccion INT
SELECT @lnEntero = CAST(@Numero AS INT),
@lnFraccion = (@Numero - @lnEntero) * 100,
@lcRetorno = '',
@lnTerna = 1
WHILE @lnEntero > 0
BEGIN
SELECT @lcCadena = ''
SELECT @lnUnidades = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
SELECT @lnDecenas = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
SELECT @lnCentenas = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
-- Unidades
SELECT @lcCadena =
CASE
WHEN @lnUnidades = 1 AND @lnTerna = 1 THEN 'Uno ' + @lcCadena
WHEN @lnUnidades = 1 AND @lnTerna <> 1 THEN 'Un ' + @lcCadena
WHEN @lnUnidades = 2 THEN 'Dos ' + @lcCadena
WHEN @lnUnidades = 3 THEN 'Tres ' + @lcCadena
WHEN @lnUnidades = 4 THEN 'Cuatro ' + @lcCadena
WHEN @lnUnidades = 5 THEN 'Cinco ' + @lcCadena
WHEN @lnUnidades = 6 THEN 'Seis ' + @lcCadena
WHEN @lnUnidades = 7 THEN 'Siete ' + @lcCadena
WHEN @lnUnidades = 8 THEN 'Ocho ' + @lcCadena
WHEN @lnUnidades = 9 THEN 'Nueve ' + @lcCadena
ELSE @lcCadena
END
-- decenas
SELECT @lcCadena =
CASE
WHEN @lnDecenas = 1 THEN
CASE @lnUnidades
WHEN 0 THEN 'Diez '
WHEN 1 THEN 'Once '
WHEN 2 THEN 'Doce '
WHEN 3 THEN 'Trece '
WHEN 4 THEN 'Catorce '
WHEN 5 THEN 'Quince '
ELSE 'Dieci' + @lcCadena
END
WHEN @lnDecenas = 2 AND @lnUnidades = 0 THEN 'Veinte ' + @lcCadena
WHEN @lnDecenas = 2 AND @lnUnidades <> 0 THEN 'Veinti' + @lcCadena
WHEN @lnDecenas = 3 AND @lnUnidades = 0 THEN 'Treinta ' + @lcCadena
WHEN @lnDecenas = 3 AND @lnUnidades <> 0 THEN 'Treinta y ' + @lcCadena
WHEN @lnDecenas = 4 AND @lnUnidades = 0 THEN 'Cuarenta ' + @lcCadena
WHEN @lnDecenas = 4 AND @lnUnidades <> 0 THEN 'Cuarenta y ' + @lcCadena
WHEN @lnDecenas = 5 AND @lnUnidades = 0 THEN 'Cincuenta ' + @lcCadena
WHEN @lnDecenas = 5 AND @lnUnidades <> 0 THEN 'Cincuenta y ' + @lcCadena
WHEN @lnDecenas = 6 AND @lnUnidades = 0 THEN 'Sesenta ' + @lcCadena
WHEN @lnDecenas = 6 AND @lnUnidades <> 0 THEN 'Sesenta y ' + @lcCadena
WHEN @lnDecenas = 7 AND @lnUnidades = 0 THEN 'Setenta ' + @lcCadena
WHEN @lnDecenas = 7 AND @lnUnidades <> 0 THEN 'Setenta Y ' + @lcCadena
WHEN @lnDecenas = 8 AND @lnUnidades = 0 THEN 'Ochenta ' + @lcCadena
WHEN @lnDecenas = 8 AND @lnUnidades <> 0 THEN 'Ochenta y ' + @lcCadena
WHEN @lnDecenas = 9 AND @lnUnidades = 0 THEN 'Noventa ' + @lcCadena
WHEN @lnDecenas = 9 AND @lnUnidades <> 0 THEN 'Noventa y ' + @lcCadena
ELSE @lcCadena
END
-- centenas
SELECT @lcCadena =
CASE
WHEN @lnCentenas = 1 AND @lnUnidades = 0 AND @lnDecenas = 0 THEN 'Cien ' + @lcCadena
WHEN @lnCentenas = 1 AND NOT(@lnUnidades = 0 AND @lnDecenas = 0) THEN 'Ciento ' + @lcCadena
WHEN @lnCentenas = 2 THEN 'Doscientos ' + @lcCadena
WHEN @lnCentenas = 3 THEN 'Trescientos ' + @lcCadena
WHEN @lnCentenas = 4 THEN 'Cuatrocientos ' + @lcCadena
WHEN @lnCentenas = 5 THEN 'Quinientos ' + @lcCadena
WHEN @lnCentenas = 6 THEN 'Seiscientos ' + @lcCadena
WHEN @lnCentenas = 7 THEN 'Setecientos ' + @lcCadena
WHEN @lnCentenas = 8 THEN 'Ochocientos ' + @lcCadena
WHEN @lnCentenas = 9 THEN 'Novecientos ' + @lcCadena
ELSE @lcCadena
END
--Terna
SELECT @lcCadena =
CASE
WHEN @lnTerna = 1 THEN @lcCadena
WHEN @lnTerna = 2 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN @lcCadena + ' Mil '
WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) AND
@lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0 THEN @lcCadena + ' Millon '
WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) AND
NOT (@lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0) THEN @lcCadena + ' Millones '
WHEN @lnTerna = 4 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN @lcCadena + ' Mil Millones '
ELSE ''
END
--Armo el retorno terna a terna
SELECT @lcRetorno = @lcCadena + @lcRetorno
SELECT @lnTerna = @lnTerna + 1
END
IF @lnTerna = 1
SELECT @lcRetorno = 'Cero'
RETURN RTRIM(@lcRetorno) + ' Con ' + LTRIM(STR(@lnFraccion,2)) + '/100'
END
viernes, julio 27, 2007
miércoles, julio 18, 2007
configurar squid en 5 minutos
Probablemente como yo, tuvieron alguna vez la necesidad de montar una pequeña red con recursos compartidos, todos sabemos que si se deja la salida a Internet libre, cualquiera llega pone un p2p y nos mata a todos, y obviamente soluciones como un servidor necesitan máquinas decentes si utilizamos Windows, la solución perfecta es squid ya que con una 486 que usábamos de banca podemos instalar un servidor de Internet. Aunque el titulo dice 5 minutos a mi me llevó como 3 horas ya que yo uso kubuntu y el artículo es para Red Hat, pero es cuestión de afinamiento.
Artículo aqui
PD. squid es un proxy, open source.
viernes, julio 13, 2007
jueves, julio 05, 2007
Comparacion Linux
Una pagina donde se pueden comparar entre si muchas las distribuciones de Linux, calificándolas en base a ciertas pruebas tales como facilidad de instalación, consumo de recursos, estabilidad, etc.
enlace aqui
lunes, junio 25, 2007
Cómo enviar correo electrónico por código usando cuentas de GMail
Enviar correos utilizando .NET es muy fácil sin embargo para utilizar la cuenta de Gmail se necesita un par de configuraciones adicionales como lo son el uso de SSL y un puerto diferente para la conexión
articulo original aqui
using System;
using System.Collections;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
public class EjemploCorreoGMail
{
public static void Main()
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add("destinatario@dominio.com");
msg.From = new MailAddress("micuenta@gmail.com", "Tu Nombre", System.Text.Encoding.UTF8);
msg.Subject = "Prueba de correo a GMail";
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = "Cuerpo del mensaje";
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = false;
//Aquí es donde se hace lo especial
SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential("micuenta@gmail.com", "miclave");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true; //Esto es para que vaya a través de SSL que es obligatorio con GMail
try
{
client.Send(msg);
}
catch (System.Net.Mail.SmtpException ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
}
}
articulo original aqui
using System;
using System.Collections;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
public class EjemploCorreoGMail
{
public static void Main()
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add("destinatario@dominio.com");
msg.From = new MailAddress("micuenta@gmail.com", "Tu Nombre", System.Text.Encoding.UTF8);
msg.Subject = "Prueba de correo a GMail";
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = "Cuerpo del mensaje";
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = false;
//Aquí es donde se hace lo especial
SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential("micuenta@gmail.com", "miclave");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true; //Esto es para que vaya a través de SSL que es obligatorio con GMail
try
{
client.Send(msg);
}
catch (System.Net.Mail.SmtpException ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
}
}
jueves, junio 21, 2007
Aventura en Cuba
Bueno se que muchos al igual que yo se preguntan como es Cuba en realidad, quien miente? y luego de una semana en La Habana puedo contar lo que vi y lo que escuche, no quiero opinar ni decir si pienso que algo es bueno o malo simplemente traslado lo que viví.
1) La moneda para los turistas se llama peso cubano convertible, que esta al 1x1 con el Dolar pero te multan con un impuesto del 10% y otro recargo que no recuerdo, total por USD$100 te dan 80CUC, solo con esto ya todo sale un 20% mas caro, hay que ir con Euros, sale mejor.
2) La moneda para el pueblo cubano y con el cual pagan los sueldos se llama peso (solamente)
3) Todo se debe pagar en CUC en ningún lugar aceptan Dolares, Tarjetas o Euros.
4) Los cubanos no pueden subir a los hoteles, ni entrar a los sitios turísticos como Baradero, tienen prohibido "molestar" a los turistas
5) Se puede caminar a media noche por cualquier lugar, sin pena alguna, es increíblemente seguro
6) La educación y la salud son gratis y obligatorias.
7) también el servicio militar es obligatorio y es por 5 años
8) Es cierto hay médicos, ingenieros etc, como taxistas y meseros. Ya que la educación es accesible a todos, pero no hay suficiente oferta de trabajo.
9) El Sueldo mensual de un Medico es de USD$35
10) El estado brinda servicios básicos, como la comida, la educación y la salud, pero con su sueldo deben comprar el resto
11) El producto nacional es muy barato, digamos una pizza mediana en un restaurante cuesta 3CUC, sin embargo una gaseosa importada cuesta 2CUC, es decir La Habana esta llena de restaurantes pero un cubano con un sueldo de USD$35 no puede sentarse y comerse una pizza que cuesta como USD$5, son para los turistas
12) No hay trafico, casi no hay carros, y la mitad de los pocos carros que hay son modelo tipo '40, '50 por allí, pero muy bien cuidados.
13) Existen lugares turísticos como la Fortaleza de El Morro, El Malecón, etc. que vale la pena visitar
14) El agua potable es purificada
15) No hay Internet, en Cuba es muy caro cuesta USD$600 mensuales una linea dedicada de 64Kb, si 64Kb.
16) Que dicen los cubanos? pues algunos estan contentos con esa forma de vida, pero la mayoría quieren mas libertades
1000) bueno no me aguanté, que creo que es lo mejor de cuba? el nivel de educación, salud y seguridad, comparado con el nuestro está por las nubes. Que es lo peor? la falta de libertades.
martes, junio 19, 2007
Buscador de codigo fuente
jueves, junio 07, 2007
Como funciona google internamente?
En 1997 los creadores de Google los estudiantes Larry Page y Sergey Brin realizaron su tesis doctoral donde planteaban las bases para lo que mas tarde se convertiría en Google.
Una traducción al español de la tesis aqui
El articulo completo del traductor aqui
(por cierto Google es ya la marca mas valiosa del mundo con un valor en Abril del 2007 de 66.000 millones de dólares, por encima de Microsoft, Coca Cola y otros)
La nueva version de Qt jambi
lunes, junio 04, 2007
Google ya reconoce rostros
Que significa esto? en pocas palabras el resultado final dentro de poco tiempo sera que si buscas "Ronaldo", google va a reconoces todas las imagenes donde apareza su rostro.... !!!!
la noticia completa aqui
una busqueda de prueba aqui
(esta busqueda dice muestreme todas las imagenes que tengan un rostro cualquiera)
la noticia completa aqui
una busqueda de prueba aqui
(esta busqueda dice muestreme todas las imagenes que tengan un rostro cualquiera)
martes, mayo 29, 2007
Aventura en Bogota
Tuve la oportunidad recientemente de conocer la ciudad de Bogota, y debo decir que es un lugar precioso, el centro de Bogota es muy antiguo pero con construcciones bien restauradas, y la ciudad es increiblemente limpia, fui por motivos de trabajo lo que no me permitio conocer mucho, pero lo poco que pude conocer me gusto. Me sigo quedando con la Antigua pero con Bogota si hay competencia. Por cierto la idea del trasmetro en Guatemala fue tomado del Transmilenio de Bogota, eso si, como se puede ver en la fotografia hay una gran diferencia. Por cierto algo que olvidaba mencionar, casi todas las construcciones e inclusive los edificios son de ladrillo, entonces la ciudad se ve completamente naranja......
viernes, mayo 18, 2007
Como obtener la informacion del Disco Duro
Muchas veces nos es útil obtener información del Disco Duro por ejemplo para el control de licencias, una vez obtenido ésto podemos encriptar o manipular esa información para que nos sirva de comprobación de piratería :)
articulo original aqui
Se hace una Clase DiscoDuro.vb que será nuestra clase especializada
Public Class DiscoDuro
Private _Modelo As String
Private _Tipo As String
Private _Serial As String
'Propiedad para Manejar el Modelo del Disco
Public Property Modelo() As String
Get
'Retorna el Modelo del Diso Duro
Return _Modelo
End Get
Set(ByVal value As String)
'Asigna el Modelo del Disco Duro
_Modelo = value
End Set
End Property
'Propiedad para Manejar el Tipo del Disco
Public Property Tipo() As String
Get
'Retorna el Tipo del Diso Duro
Return _Tipo
End Get
Set(ByVal value As String)
'Asigna el Tipo del Disco Duro
_Tipo = value
End Set
End Property
'Propiedad para Manejar el Serial del Disco
Public Property Serial() As String
Get
'Retorna el Serial del Diso Duro
Return _Serial
End Get
Set(ByVal value As String)
'Asigna el Serial del Disco Duro
_Serial = value
End Set
End Property
End Class
Y el codigo para utilizarla seria asi
'Importamos el namespace System.Management para Accesar al Windows Management Instrumentation
Imports System.Management
Public Class Form1
'Declaramos una coleccion del tipo ArrayList
Dim hdLista As New ArrayList
'En el evento Load escribiremos el codigo para obtener la informacion
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
'Creamos ahora un objeto ManagementObjectSearcher y agregaremos la cadena de seleccion
'para obtener de la clase Win32_DiskDrive
' la Informacion del modelo y el tipo del Disco Duro
Dim BuscardorWMI As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
For Each wmi_HD As ManagementObject In BuscardorWMI.Get
'creamos un objeto del tipo DiscoDuro
Dim Hd As New DiscoDuro
'asignamos el valor del Modelo obtenido de la consulta
' en la propiedad Modelo del objeto Hd
Hd.Modelo = wmi_HD("Model").ToString
'asignamos el valor del Tipo obtenido de la consulta
' en la propiedad Modelo del objeto Hd
Hd.Tipo = wmi_HD("InterfaceType").ToString
'y Finalmente agregamos dicho objeto Hd al ArrayList que creamos
hdLista.Add(Hd)
Next
'Creamos ahora una nueva instancia del objeto que habiamos
' creado del tipo ManagementObjectSearcher
'y agregaremos la cadena de seleccion para obtener de la clase Win32_PhysicalMedia
' los seriales internos
'de los Discos Duros que hallamos encontrado en el ciclo anterior
BuscardorWMI = New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")
'Deifinimos a i como un contador para manejar el ArrayList
Dim i As Integer = 0
For Each wmi_HD As ManagementObject In BuscardorWMI.Get
'Indica continuar con el ciclo mientras que i sea menor que
' la cantidad de discos encontrados
If i < hdLista.Count - 1 Then
'creamos un nuevo objeto del Tipo DiscoDuro para ir almacenando alli
'cada uno de los discos duros encontrados
Dim hd As New DiscoDuro
'asignamos el valor acutalde la lista en el objeto HD
hd = hdLista(i)
'debemos verificar que el valor del campo "SerialNumber" obtenido en la busqueda
'no sea un valor nulo de lo contrario
'la aplicacion arrojará una excepcion
If wmi_HD("SerialNumber").ToString = Nothing Then
'en el caso de que se halla encontrado el serial la propiedad "Serial" del
' objeto hd se guardará los siguiente:
hd.Serial = "No se Pudo Obtener El Serial"
Else
'en el caso contrario almacenaremos el numero de serial interno
'del disco duro en la propiedad "Serial" del objeto hd
hd.Serial = wmi_HD("SerialNumber").ToString
End If
'incrementando i
i += 1
End If
Next
'aqui coloco una manera de mostrarlo ustedes pueden escoger la que mejor les paresca
For Each hd As DiscoDuro In hdLista
'por cuestiones de tiempo yo escogí usar un MessageBox
MessageBox.Show(hd.Modelo & vbCrLf & hd.Tipo & vbCrLf & hd.Serial)
Next
End Sub
End Class
articulo original aqui
Se hace una Clase DiscoDuro.vb que será nuestra clase especializada
Public Class DiscoDuro
Private _Modelo As String
Private _Tipo As String
Private _Serial As String
'Propiedad para Manejar el Modelo del Disco
Public Property Modelo() As String
Get
'Retorna el Modelo del Diso Duro
Return _Modelo
End Get
Set(ByVal value As String)
'Asigna el Modelo del Disco Duro
_Modelo = value
End Set
End Property
'Propiedad para Manejar el Tipo del Disco
Public Property Tipo() As String
Get
'Retorna el Tipo del Diso Duro
Return _Tipo
End Get
Set(ByVal value As String)
'Asigna el Tipo del Disco Duro
_Tipo = value
End Set
End Property
'Propiedad para Manejar el Serial del Disco
Public Property Serial() As String
Get
'Retorna el Serial del Diso Duro
Return _Serial
End Get
Set(ByVal value As String)
'Asigna el Serial del Disco Duro
_Serial = value
End Set
End Property
End Class
Y el codigo para utilizarla seria asi
'Importamos el namespace System.Management para Accesar al Windows Management Instrumentation
Imports System.Management
Public Class Form1
'Declaramos una coleccion del tipo ArrayList
Dim hdLista As New ArrayList
'En el evento Load escribiremos el codigo para obtener la informacion
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
'Creamos ahora un objeto ManagementObjectSearcher y agregaremos la cadena de seleccion
'para obtener de la clase Win32_DiskDrive
' la Informacion del modelo y el tipo del Disco Duro
Dim BuscardorWMI As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
For Each wmi_HD As ManagementObject In BuscardorWMI.Get
'creamos un objeto del tipo DiscoDuro
Dim Hd As New DiscoDuro
'asignamos el valor del Modelo obtenido de la consulta
' en la propiedad Modelo del objeto Hd
Hd.Modelo = wmi_HD("Model").ToString
'asignamos el valor del Tipo obtenido de la consulta
' en la propiedad Modelo del objeto Hd
Hd.Tipo = wmi_HD("InterfaceType").ToString
'y Finalmente agregamos dicho objeto Hd al ArrayList que creamos
hdLista.Add(Hd)
Next
'Creamos ahora una nueva instancia del objeto que habiamos
' creado del tipo ManagementObjectSearcher
'y agregaremos la cadena de seleccion para obtener de la clase Win32_PhysicalMedia
' los seriales internos
'de los Discos Duros que hallamos encontrado en el ciclo anterior
BuscardorWMI = New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")
'Deifinimos a i como un contador para manejar el ArrayList
Dim i As Integer = 0
For Each wmi_HD As ManagementObject In BuscardorWMI.Get
'Indica continuar con el ciclo mientras que i sea menor que
' la cantidad de discos encontrados
If i < hdLista.Count - 1 Then
'creamos un nuevo objeto del Tipo DiscoDuro para ir almacenando alli
'cada uno de los discos duros encontrados
Dim hd As New DiscoDuro
'asignamos el valor acutalde la lista en el objeto HD
hd = hdLista(i)
'debemos verificar que el valor del campo "SerialNumber" obtenido en la busqueda
'no sea un valor nulo de lo contrario
'la aplicacion arrojará una excepcion
If wmi_HD("SerialNumber").ToString = Nothing Then
'en el caso de que se halla encontrado el serial la propiedad "Serial" del
' objeto hd se guardará los siguiente:
hd.Serial = "No se Pudo Obtener El Serial"
Else
'en el caso contrario almacenaremos el numero de serial interno
'del disco duro en la propiedad "Serial" del objeto hd
hd.Serial = wmi_HD("SerialNumber").ToString
End If
'incrementando i
i += 1
End If
Next
'aqui coloco una manera de mostrarlo ustedes pueden escoger la que mejor les paresca
For Each hd As DiscoDuro In hdLista
'por cuestiones de tiempo yo escogí usar un MessageBox
MessageBox.Show(hd.Modelo & vbCrLf & hd.Tipo & vbCrLf & hd.Serial)
Next
End Sub
End Class
viernes, mayo 11, 2007
Un mes utilizando Windows Vista
Ya tengo un mes utilizando Windows Vista, y tengo mis observaciones (post orientado a usuario general, mas adelante pondré como me fué con las herramientas de desarrollo)
1) PRO: la apariencia Grafica que brinda el Tema Aero, es hermosa, con transparencias, brillos, efectos 3D, se nota en realidad una gran diferencia con windows XP.
2) CONTRA: eh aqui una imagen de mi monitor de proceso con el equipo recién iniciado.
Con solo entrar a Windows Vista ya tengo 1.4Gb. de memoria ocupados.
3) PRO: las busquedas y la indexacion de documentos y contenidos, permite encontrar cualquier documento ya sea por nombre, por contenido o por referencias...muy buena.
4) CONTRA: Aplicaciones, nada funciona al 100% todo es incompatible, tengo problemas en casi todas las aplicaciones instaladas. Sin embargo tambien hay truco y parches para casi todo.
En resumen Windows vista tiene sus incompatibilidades y un enorme consumo de recursos, entonces si la apariencia es muy importante pues prefiero un windows XP con algun programa de temas, y si la estabilidad lo es, pues no se, la pantalla de errores de windows Vista ahora es verde con azul eso si. Muy bonita, al final prefiero Windows Xp que Windows Vista. Eso sin mencionar que los Widgets, transparencias, efectos 3D y brillos estan en Linux y MacOSX desde hace casi 2 años.
1) PRO: la apariencia Grafica que brinda el Tema Aero, es hermosa, con transparencias, brillos, efectos 3D, se nota en realidad una gran diferencia con windows XP.
2) CONTRA: eh aqui una imagen de mi monitor de proceso con el equipo recién iniciado.
Con solo entrar a Windows Vista ya tengo 1.4Gb. de memoria ocupados.
3) PRO: las busquedas y la indexacion de documentos y contenidos, permite encontrar cualquier documento ya sea por nombre, por contenido o por referencias...muy buena.
4) CONTRA: Aplicaciones, nada funciona al 100% todo es incompatible, tengo problemas en casi todas las aplicaciones instaladas. Sin embargo tambien hay truco y parches para casi todo.
En resumen Windows vista tiene sus incompatibilidades y un enorme consumo de recursos, entonces si la apariencia es muy importante pues prefiero un windows XP con algun programa de temas, y si la estabilidad lo es, pues no se, la pantalla de errores de windows Vista ahora es verde con azul eso si. Muy bonita, al final prefiero Windows Xp que Windows Vista. Eso sin mencionar que los Widgets, transparencias, efectos 3D y brillos estan en Linux y MacOSX desde hace casi 2 años.
viernes, mayo 04, 2007
lunes, abril 16, 2007
instalacion openSUSE 10.2
Si hay alguien que todavía crea que openSUSE es difícil de instalar, definitivamente tiene que ver éste vídeo.
vídeo aqui
lunes, abril 09, 2007
Los 21 grandes fracasos tencnológicos
Cuando escuchamos hablar de Microsoft, Apple u otros grandes pensamos solo en éxitos pero si pensamos en Windows Me o la primer PDA de Apple, recordamos grandes (enormes) fracasos.
una lista muy completa aqui
una lista muy completa aqui
viernes, marzo 30, 2007
DELPHI 10 LITE v3.0 [SP1 Integrated]
Borland puso a la venta hace algunos meses su versión Delphi Studio 2006 (el que usa delphi no me dejará mentir que es el IDE mas rápido y que genera el código mas liviano de todos) aunque genera aplicaciones que piden pocos recuros, el IDE como tal si consume mucho, entonces en Asia (para variar) de alguna forma hicieron una versión hack llamada Delphi 10 Lite, la cual es Delphi Studio 2006 sin todos los componentes extra y sin .NET y que pide la misma cantidad de recursos que Delphi 7 pero con las bondades y novedades de Delphi 10.
Aqui el link
Y aquí el readme completo como un avance
====================================
DELPHI 10 LITE v3.0 [SP1 Integrated]
====================================
Welcome to Delphi 10 Lite, a mod of Delphi 2006 that doesn't require .NET.
1. FEATURES.
2. SYSTEM REQUIREMENTS.
3. COMPONENTS INCLUDED IN DELPHI 10 LITE.
4. COMPONENTS INCLUDED IN DELPHI 10 LITE SUPPLEMENTAL INSTALLERS.
5. WHAT IS INCLUDED IN THE HELP.
6. DELPHI TWEAKS UTILITY
7. CONTACT.
1. FEATURES
-----------
- Extremely small size. Only Standard Components and Database Components
are included.
- Optional components have been moved to supplemental installers, which may
be downloaded separately.
- The help system has been substituted by the Delphi 7 help, which is far
better and doesn't require the .NET Framework SDK.
- Included OpenHelp utility from Delphi 7.
- Included programming font Monospac821 BT. Recommended setting: size 8 with
ClearType activated.
- The Delphi Tweaks utility, located in the "Delphi 10 Lite" group, lets you
enhance the Delphi IDE in several ways. Optimum settings have already been
set, so you don't really need to run Delphi Tweaks unless you want to go
back to the default values.
- BORLNDMM.DLL has been updated to FastMM v4.62.
- Refactoring, ErrorInsite, and ActiveX support have been disabled, as they
require the .NET Framework.
- Update 1 has been installed (version of the IDE is 10.0.2166.28377)
2. SYSTEM REQUIREMENTS
----------------------
- Windows 2000/XP or higher.
- 160 MB of disk space.
For the rest, the requirements are similar to those of Delphi 7.
3. COMPONENTS INCLUDED IN DELPHI 10 LITE
----------------------------------------
Delphi 10 Lite includes the following components:
- Borland Standard Components
- Borland Database Components
4. COMPONENTS INCLUDED IN DELPHI 10 LITE SUPPLEMENTAL INSTALLERS
----------------------------------------------------------------
Delphi 10 Lite supplemental installers include the following components:
- Borland ActionBar Components
- Borland ADO DB Components
- Borland BDE DB Components
- Borland Control Panel Applet Package
- Borland DataSnap Connection Components
- Borland dbExpress Components
- Borland Editor Emacs Enhancements
- Borland Editor Script Enhancements
- Borland InterBase Express Components
- Borland Internet Components
- Borland Markup Language Wizards
- Borland MyBase DataAccess Components
- Borland Sample Components
- Borland SimpleDataset Component (DBX)
- Borland SOAP Components
- Borland WebSnap Components
- Delphi 1.0 Compatibility Components
- Internet Explorer Components
- Microsoft Office 2000 Sample Automation Server Wrapper Components
- Microsoft Office XP Sample Automation Server Wrapper Components
5. WHAT IS INCLUDED IN THE HELP
-------------------------------
The help system has been substituted by the Delphi 7 help, which is far
better and besides it doesn't require the .NET Framework SDK.
Only the reference materials have been included. These are:
- Delphi Object and Component Reference
- Delphi Language Guide
- Delphi Compiler Messages and Warnings
- Delphi Compiler Options and Directives
- Microsoft Win32 Programmer's Reference
- Glossary
If you need a programmer's guide, there are some excellent books out there,
such as the Delphi 6 Developer's Guide, by Xavier Pacheco and Steve Teixeira.
NOTE: There is no context-sensitive help, sorry. However, you can access the
help from the Delphi main menu or clicking on the Help icon in the toolbar.
6. DELPHI TWEAKS UTILITY
------------------------
Delphi Tweaks is an utility that lets you enhance the Delphi IDE in several
ways that require modifying the binaries. Hence the IDE needs to be closed
before saving any changes. Optimum settings have already been set, so you
don't really need to run Delphi Tweaks unless you want to go back to the
default values.
- Docked panels: Lets you customize the speed at which the docked panels open
and close when they are in unpinned mode.
- TFrame bugfix: Lets you fix a bug present in TFrame in Delphi 2006.
Explanation: In Delphi 2006, when you create an instance of a frame, the
IDE sets its TabStop property to "true", which is in contradiction with the
default value of TabStop. Now imagine that you want to set TabStop to
"false". Well.. you can't, because the IDE still believes that "false" is
the default value, and thus it refuses to store "false" in the DFM (it
would be a waste of disk space, in theory). Thus TabStop is always "true".
This problem is fixed here.
7. CONTACT
----------
delphi10lite@gmail.com
miércoles, marzo 21, 2007
lunes, marzo 19, 2007
¿Cuántos megapixels tienen nuestros ojos?
Estaba buscando en Internet algún listado mas o menos estandarizado de los colores de ojos que hay (el para qué es otra historia...) y encontré casualmente éste curioso artículo. aqui.
viernes, marzo 02, 2007
Vista activation cracked by brute force
Parece ser que el infalible sistema de seguridad de Windows Vista para la activación en linea Software Protection Platform (WSPP) que es WSPP?, sufrió la misma suerte que su tambien infalible sistema de protección de derechos de Autor (DRM) que es DRM?, y ya se desarrollo un metodo para burlarlo, la informacion completa Vista activation cracked by brute force
miércoles, febrero 28, 2007
Visual Studio 2005 Service Pack 1
En realidad el SP de VS2005 salió como en noviembre 2006 pero yo lo acabo de instalar por el miedo que siempre existe de que causen mas daño que bien, sin embargo me parece que éste SP hace mucho bien, ya que resuelve al menos el peor de los problemas del VS2005, el enorme consumo de recursos.
se puede bajar el SP aqui
martes, febrero 27, 2007
sábado, febrero 17, 2007
Y no que no pues Fabio.....
Debut de Ronaldo en el AC Milan, anota 2 goles y pone asistencia para otro, sera que haber sido declarado el mejor centro delantero de los ultimos 10 años fué por algo....o no Fabio?
noticia aqui
jueves, febrero 15, 2007
Como burlar al antivirus
Les sorprenderia saber lo facil que es burlar a los "mejores" antivirus que hay actualmente como kapersky, nod32, norton, etc., y estoy hablando de técnicas sencillas para lograrlo, con herramientas complejas y técnicas avanzadas que se podrá hacer? mejor ni imaginarlo. En éste documento se explica como se hizo para que los antivirus permitieran la ejecución de ficheros infectados. Documento pdf aqui
enlance original al artículo aqui
Diccionario:
virus informático
antivirus
tabla comparativa de antivirus1
tabla comparativa de antivirus2
lunes, febrero 12, 2007
La POO está muriendo?
post original aqui
Hace unos días Robert h Quinn nos comentaba de pasada en su bitácora que la programación orientada a objetos está muriendo. En los últimos tiempos ha crecido el interés por lenguajes como Haskell o Erlang. Los lenguajes orientados a objetos tienden a introducir cada vez más conceptos ajenos a la POO, siendo los ejemplos más claros Ruby y la próxima versión de C#. Incluso C++ se renueva. ¿Hay argumentos suficientes para afirmar que la orientación a objetos está muerta? ¿O es sólo que ha madurado? ¿Cómo será el próximo gran lenguaje?
jueves, febrero 08, 2007
Aventura Extrema
Bueno para uno que es cobarde para las alturas si lo fué, con unos amigos hicimos canoping en un parque ecológico muy bonito www.pindulce.com en realidad muy recomendable (si te gusta sufrir)
Galeria completa aquí
miércoles, febrero 07, 2007
Muy caro el software?.....aqui alternativas libres
Todos sabemos que soluciones empresariales de software no siempre son la opción mas indicada para pequeñas empresas, por ello en el siguiente enlace se muestra un listado de aplicaciones libres, algunas de ellas incluso mejores que las de pago.
Por ejemplo:
1) Firefox reemplaza a Internet Explorer para navegación web
2) Thunderbird reemplaza a Microsoft Outlook y Eudora como clientes de correo
3) Subird reemplaza el calendario de Microsoft Outlook
y otra mas, 30 en total.
enlace aqui
jueves, febrero 01, 2007
Pero que hiciste Capello?
Pero que te pasa Fabio, tiene 3 FIFA World Player y decis que no juega?
Máximo goleador de la Eredivisie 1995
Máximo goleador de la Eredivisie 1996
Trofeo Pichichi al máximo goleador de la liga española 1997
Bota de Oro 1997
Balón de Oro 1997
Trofeo Bravo 1997
Onze de Oro 1997
FIFA World Player 1996
FIFA World Player 1997
Trofeo Bravo 1998
Balón de Bronce 1998
Máximo Goleador de la Copa de la UEFA 1998
Máximo Goleador de la Lega Calcio 1998
Mejor extranjero de la Lega Calcio 1998
Mejor Jugador de la Lega Calcio 1998
Balón de Oro del Mundial 1998
Plata en el FIFA World Player 2000
Botín de Oro al máximo goleador del Mundial 2002
Balón de Oro 2002
Onze de Oro 2002
FIFA World Player 2002
Bronce en el FIFA World Player 2003
Trofeo Pichichi al máximo goleador de la liga española 2004
Incluido en la lista FIFA 100 de los mejores jugadores vivos de la historia. 2004
Maximo goleador de las clasificatorias al mundial de 2006
martes, enero 30, 2007
Lanzamiento mundial de windows vista
Pues bien, el día de hoy fué el lanzamiento mundial de windows vista, para quien lo ama y para quien lo odia nimodo, aquí unos links interesantes.
Windows Vista a Fondo
Un post que realiza un análisis de qué es Windows Vista con un poco de historia y todas sus nuevas versiones
Windows XP contra Windows Vista: Comparación de Rendimiento
En ésta pagina se realizaron una serie de pruebas de rendimiento entre ambos sistemas operativos con una serie de aplicaciones y juegos, con interesantes resultados.
Sistema de Protección de Contenidos de Windows Vista
Enlaces sobre la protección de reproducción de multimedia pirata, explica como y por qué de la protección de contenidos.
Video de Windows Vista para quien no lo ha visto
Video de Mac OSX para quien no lo conoce
Video de Linux KDE
jajjajaaj este video me encantó deberas
Windows Vista a Fondo
Un post que realiza un análisis de qué es Windows Vista con un poco de historia y todas sus nuevas versiones
Windows XP contra Windows Vista: Comparación de Rendimiento
En ésta pagina se realizaron una serie de pruebas de rendimiento entre ambos sistemas operativos con una serie de aplicaciones y juegos, con interesantes resultados.
Sistema de Protección de Contenidos de Windows Vista
Enlaces sobre la protección de reproducción de multimedia pirata, explica como y por qué de la protección de contenidos.
Video de Windows Vista para quien no lo ha visto
Video de Mac OSX para quien no lo conoce
Video de Linux KDE
jajjajaaj este video me encantó deberas
Sistema de Protección de Contenidos de Windows Vista
Además de otros temas que ya todos conocemos como la exagerada utilización de recursos de Windows Vista, el problema de compatibilidad con muchas aplicaciones, etc. hay otro tema del que se ha hablado poco, ya que el que no este de acuerdo es porque gusta de hacer copias de contenidos, pero en resumen....windows vista no permitira copiar, reproducir, ni almacenar ningun tipo de información con derechos de autor, como musica, videos, etc.
articulo completo
A Cost Analysis of Windows Vista Content Protection
articulo completo
A Cost Analysis of Windows Vista Content Protection
viernes, enero 26, 2007
Padre Rico Padre Pobre video
Un libro muy bonito, aqui va un video sobre el mismo, para quien no lo ha leído y por supuesto un refresco de memoria para que aquel que yá lo conoce.
fuente aqui
fuente aqui
programadores según el cine
Por qué en peliculas como matrix, los codigos son innumerables simbolos verdes sobre un fondo negro? o por qué en swordfish y otros tantos se representa la intrusión en sistemas como un juego de counter strike?
acaso no la computación y la programación es completamente diferente a lo que el cine dice?
por qué en el cine creen que los codigos fuentes se mueven?
post interesante
What code DOESN'T no in real life
jueves, enero 25, 2007
Anecdota
Un consejo (aprendido para variar despues del golpe), cuando andes de visita en un pais del que no conoces siquiera el nombre de las calles mas importantes, asegurate de recordar al menos el nombre de tu hotel.......sino te costara mucho........muchisimo regresar :(
martes, enero 23, 2007
Análisis Estático de Código
En Sistemas donde es muy importante la fiabilidad, o en aquellos donde se necesite el cumplimiento de estándares de calidad, o bien para analizar codigo fuente no documentado o mal finalizado se precisa la utilización de herramientas de análisis de código. Éstas permiten la verificación y corrección del código. Una metodología indispensable para desenmarañar código antiguo.
enlace aqui
enlace aqui
viernes, enero 19, 2007
Convertir una IP dinámica en una IP fija con DynDNS (actualizado)
Este resumen no está disponible. Haz clic
aquí para ver la publicación.
jueves, enero 18, 2007
jueves, enero 11, 2007
Desarrollo Agil
Desarrollo ágil es una filosofía, no una metodología
El desarrollo ágil no es una metodología con pasos establecidos, es simplemente una manera de pensar y de trabajar.
El desarrollo ágil se puede resumir en una frase “ejecuta rápidamente”. La rapidez no es un método infalible a aplicar a rajatabla, es una manera de enfocar las tareas enfocada a dar prioridad a la ejecución sobre la planificación.
Planificas o actúas
El tiempo no es infinito. No puedes hacer todo al mismo tiempo, optar por una opción o la otra conlleva muchas cosas. Claro, puedes hacer ambas cosas, pero entonces harás ambas a medias.
Especular o probar en real
¿Funcionará una web que busca en 23 webs de vuelos simultáneamente como Trabber? A priori la idea tiene sentido, pero quién sabe si funcionaría, si captaría tráfico, si generaría fidelidad... A posteriori se ha visto que sí, que funciona, pero a posteriori todo parece siempre evidente. La única manera de saberlo ha sido desarrollar el proyecto.
En un entorno donde las innovaciones envejecen en apenas meses, donde todo evoluciona a la velocidad de la luz, no está siempre clara la utilidad de dedicar excesivamente tiempo a investigar que puede funcionará y qué no, o a planificar al detalle. Es divertido especular con ideas en el aire, pero no se obtiene nada en concreto.
Investigar e innovar
Innovar también es investigar
Innovación significa crear algo que no existía antes, ejecutar para obtener algo físico. Investigar es averiguar información útil para el proyecto, crear algo intangible, conocimiento.
La ventaja de innovar sobre investigar, es que a la vez que obtienes algo físico funcionando, también puedes averiguar información útil para el proyecto, en muchos casos una información mucho más fiable que te proporciona la pura investigación. En conclusión, innovando también investigas.
Tras investigar y planificar puedes tardar 8 meses en tener la primera beta impoluta para lanzarla a público o tardar 1 mes con algo hecho rápidamente sin refinar. En la segunda opción 7 meses más tarde puedes tener cientos o miles de usuarios, una versión refinada y mucha más información real, no especulaciones. En la primera opción nada te garantizaría que la beta impoluta no sea después un fiasco.
Internet facilita innovar y hacer experimentos con usuarios reales, basta con públicar la web y tener un poco de tráfico.
Reacción rápida
Rectificar puede ser percibido negativamente, significa que has cometido un error o lo puedes percibirlo positivamente como que has aprendido y eres capaz de reaccionar rápidamente para arreglarlo.
Cuanto más rápidamente ejecutes, antes descubrirás qué es bueno, qué es malo, qué es suficientemente bueno y podrás hacer mejoras. Rectificar no es fácil, conlleva ser humilde y modesto.
Cuando el área del proyecto está muy trillada y se conoce bastante sobre lo que funciona, si puede tener sentido investigar y planificar para mejorar lo que ya existe. La filosofía de desarrollo ágil funciona mejor cuando se trata de hacer algo desde 0 o rediseñarlo totalmente, por el contrario es menos recomendable cuando quieres mejorar algo que ya sabes que funciona.
Ideas sobre desarrollo ágil
Lo mejor es enemigo de lo bueno
¿Cuando tienes algo suficientemente bueno para sacar a público? En cuanto funcione de manera técnicamente aceptable.
Lo mejor es enemigo de lo bueno, pero lo mejor aún es peor enemigo cuando ni siquiera sabes qué es. No dudes, sácalo a real y verás si funciona o no.
Resuelve los problemas cuando los tengas
No tiene sentido preocuparse de problemas de escalabilidad en el futuro al principio de un proyecto, deberías preocuparte de las cosas más urgentes en ese momento. Además de quitarte tiempo muy valioso, seguramente las soluciones a las que llegues distarán de ser óptimas. Por ejemplo, hasta que no sepas exactamente que problemas de escalabilidad vas a tener no sabrás cuál será la mejor opción.
Lo mismo pasa con los temas legales. Si no hay ingresos, ni pagos, ni información personal muy delicada almacenada no creo que valga la pena que te quiten el sueño. La última cosa de la que me preocuparía sería de como declarar una pequeña cantidad de ingresos de Adsense.
Los grandes planes nunca funcionan
No es una ley de Murphy, pero como si lo fuera. Planificar excesivamente aleja de la realidad, es muy fácil escribir en un papel ideas, pero muy difícil ejecutarlas. Conforme una planificación se complica es más probable que no funcione como se espere.
Es positivo tener unas ideas básicas y generar algunos documentos concisos, pero hay que evitar la complicación excesiva. Jesús Encinar cuenta como redujeron el plan de negocio de Idealista de 150 páginas a solo 7.
Logs y estadísticas de servidor
Para saber qué funciona y qué no funciona de los cambios realizados, tu gran aliado serán las estadísticas. Son la manera más rápida, ágil y barata de obtener información fiable del mundo real.
No se trata de manejar mil datos estadísticos, sino centrarte en los realmente relevantes y sensibles a los cambios. Los test de usuarios de guerrilla son útiles especialmente cuando tienes dudas o hay grandes cambios.
No es algo nuevo
La filosofía de desarrollo ágil no es nueva en absoluto. Cualquiera que comienza un proyecto puede optar por planificar bien o actuar rápido, ya sea construyendo un puente o diseñando una web. Simplemente en algunos proyectos puede ser más adecuado hacerlo que en otros.
No es recomendable arriesgarse a tener accidentes construyendo un puente, todo tiene que estar bien planificado y aguantar mucho más de lo necesario. Sin embargo una web inicialmente no la creas para resistir mucho más tráfico del necesario y si un día cae un par de horas se puede resolver fácilmente.
Es un medio, no un fin
La metodología de desarrollo web ágil, como cualquier otra metodología es un medio, no un fin. No se trata de aplicarla a rajatabla, sino cuando nos ayude a conseguir nuestro objetivo. Nadie debería seguir esta filosofía en su proyecto porque lo ha leído este artículo, ni en ningún otro, sino porque es lo más adecuado para su proyecto en ese momento y en esas condiciones.
Hay servicios que deben funcionar perfectamente desde el primer día porque por su propia naturaleza solo aportan si funcionan bien, no se les daría una segunda oportunidad, para esto no vale el desarrollo ágil. Si desarrollas un servicio de pago tampoco te recomiendo experimentar demasiado con desarrollo ágil.
Sin marketing masivo
Hacer cambios de manera rápida no significa forzosamente la presencia de bugs, pero ciertamente con desarrollo ágil puede ser más proclives a tenerlos. Además puede que el aspecto del sitio no sea muy refinado cuando lo sacas a público tras un mes de desarrollo.
Por estas razones no es bueno aparecer en grandes medios porque entonces como comentaba Joel on Software en Massive Frontal PR is incompatible with Ship Early and Often” tendrías dos problemas a) un proyecto inacabado b) todo el mundo lo sabría.
Para un proyecto que utiliza desarrollo ágil es mejor el marketing de guerrilla, de blogs, el boca-oreja y en general cualquier técnica enfocada a un público más pequeño y limitado. Este público especialmente interesado en la idea es más comprensivo y da mucho feedback, sugiere, comenta, etc.
Motivación y abandono
El desarrollo ágil disminuye la probabilidad de abandono del proyecto porque lo hace más motivador.
Cualquier proyecto desde 0 requiere un volumen de motivación impresionante, no es extraño que un proyecto se abandone sin ser completado, lo que sucede mucho más frecuentemente en proyectos que tardan muchos meses en salir a público.
Un desarrollo ágil tiene una primera versión mucho antes con lo que minimiza el riesgo de abandono previo. Luego al no parar de sacar cambios y recibir feedback de los usuarios se obtiene más motivación positiva y se reduce la probabilidad de que sea abandonado.
Con pocos recursos es más fácil
Cuanto menos tengas, menos tienes que perder. Si no tienes inversión más que tu tiempo, eso será lo único que perderás si te arriesgas. Si te alguien te paga mucho dinero o invierte en tu proyecto, te dará más miedo arriesgarte a experimentar y probar cosas nuevas.
La conclusión es sencilla, aunque paradójica, tu escasez de recursos te abre la puerta de grandes oportunidades. Para llegar a innovar radicalmente hay que experimentar y probar haciendo cosas que grandes empresas ni podrían, ni se atreverían a hacer.
Utilizando desarrollo web ágil un equipo pequeño y sin recursos convierte sus debilidades en ventajas. Hay que evitar entrar a competir con las grandes con sus mismas armas y sus mismas metodologías de trabajo, es muy complicado tener opciones entrando en su terreno.
Equipo inicial minúsculo
No hablo de un equipo pequeño de 5 o 6, me refiero a un equipo minúsculo de 2 o 3 personas inicialmente.
Si hay mucha gente tardas demasiado en ponerte de acuerdo y sobre todo es complicado que nadie se moleste cuando parece que das “bandazos” con tanto experimento y cambio de opinión. A menos gente más agilidad de implementar y menos discusiones.
Lo que no recomiendo en absoluto para un proyecto así es depender de patas físicas, de acuerdos con terceros, de demasiada gente, etc. es complicado utilizar desarrollo ágil en esas circunstancias.
¿Es serio un proyecto llevado así?
Sucede que algunas personas no toman en serio un proyecto que cambia cada dos por tres, donde algunas cosas no son tan estables como debieran y que no tiene inicialmente un nivel de refinamiento muy alto. Se puede llegar a pensar que es un proyecto de “amiguetes”, algo poco serio, un juego.
En realidad nada tiene que ver una cosa con la otra. Cualquier experimento tiene mucho de juego, de descubrir que funciona y que no funciona, de ser como un niño curioso que prueba y prueba.
En realidad es positivo que sea divertido y que el ambiente sea relajado porque es solo es posible tener ideas nuevas y atreverse a implementarlas rápidamente en un ambiente flexible y donde se acepte la alta incertidumbre como normal, justamente lo que no sucede en un ambiente de trabajo clásico. Creo que no sería positivo para un proyecto desarrollado de manera ágil el parecer “serio”. Las camisetas y la ausencia de trajes no son casualidad o una moda en este ambiente.
El desarrollo ágil no es para siempre
El desarrollo ágil es especialmente útil al principio del proyecto, cuando hay que crear algo de la nada y aprender lo antes posible.
Más tarde, al cabo de un año o dos, cuando ya empiezas a tener claro lo que funciona y lo que no, la filosofía forzosamente cambia. Empieza a haber más gente en el equipo, se empieza a discutir más y se hace menos. Es normal e inevitable, no es lo mismo jugarte perder usuarios cuando empiezas y solo tienes un par de miles que más tarde cuando tienes un par de cientos de miles.
Cuando tienes muchos usuarios además se complican los cambios, la gente se acostumbra a las cosas y prefieren estabilidad, no les gustan los cambios, aunque realmente sean positivos para ellos.
Una filosofía de trabajo que no es para todos ni para todo
Tu carácter personal es importante
Para aplicar desarrollo ágil debes tolerar niveles altos de incertidumbre e incluso de caos en ocasiones. No te debe poner excesivamente nervioso no saber qué va a pasar en el futuro. Es una filosofía que funciona bien con personas que necesitan respuestas rápidas, hacer algo y ver los cambios, que no les gusta esperar.
Si tu estilo de trabajo es muy organizado y planificado, te incomoda la incertidumbre, pero por el contrario eres capaz de mantener alta tu motivación en un largo proyecto donde los resultados no se visualizan hasta meses más tarde, seguramente esta filosofía de trabajo no es para ti.
Cuando tienes ideas muy claras, te entusiasman ciertos autores y te encantan las metodologías, seguramente encajarás muy bien en otros proyectos, pero no en uno de desarrollo web ágil. Al contrario, la gente más óptima para desarrollo ágil, es la que peor encaja en grandes organizaciones con muchas jerarquías y procesos. No opino que un perfil sea mejor que otro, simplemente son diferentes para casos diferentes.
El caso de Panoramio
El caso de Panoramio es bastante claro de las ventajas que tiene aplicar metodología de desarrollo ágil.
Comenzó con un equipo de solo 2 personas, que ahora es de 3 personas con la reciente incorporación de José Florido. Más sería una multitud en un proyecto así.
Los cambios y rediseños han sido constantes en Panoramio, por ejemplo, hemos cambiado 3 veces radicalmente de homepage en un año, el último hace 4 días escasos.
En un tema como las mash-ups que usan el API de Google Maps no hay estándares porque están siendo inventadas ya mismo. No se sabe lo que funciona y lo que no, no hay referencias. En nuestro caso no hay más de 5 webs que posicionen fotos en mapas. Supongo que esto habrá facilitado que Google Earth recomiende Panoramio en su página de descarga, nos esté ayudando con el hosting y nos invitase al Googleplex.
Ningún método de investigación te dirá si una idea como la de Panoramio funcionará, es demasiado nueva, es más rápido obtener información de la gente que utiliza la web realmente.
Por la evolución del proyecto y su rápida salida a público en etapas muy iniciales, quizás algunas personas han tomado poco en serio el proyecto como de “amiguetes” o como un juego. Ciertamente lo pasamos bien, es divertido, pero eso no quita que trabajemos en Panoramio más horas que tiene el día y que nuestro nivel de implicación sea muy alto.
Panoramio salió sin modelo de negocio claro lo que puede parecer inadecuado. Por supuesto nosotros pensamos que lo ideal es tener un modelo de negocio claro desde el principio, pero siendo un equipo inicialmente de dos personas, o te centras en crear un proyecto útil y que funcione, o te centras en crear un modelo de negocio, no puedes estar en todo. Si creas algo útil seguro que luego hay una manera de rentabilizarlo. Actualmente con la publicidad Adsense el sitio cubre costes y da beneficios, lo que no es banal en un sitio que hospeda fotos.
Si hubiéramos utilizado el método clásico de desarrollo hubiéramos tardado 6 meses como mínimo en salir a público. Sin embargo en ese tiempo ya teníamos 15.000 fotos y muchos miles de usuarios probando algo en real y dándonos información. El número de fotos actual es cercano a las 60.000.
La ventaja de haber salido a público tras solo dos meses de desarrollo no es solamente que a día de hoy tenemos mucho más tráfico, miles de fotos y de usuarios que si lo hubieramos hecho más tarde. La gran ventaja es que además de eso hemos aprendido mucho, un año es un mundo en estas áreas y este aprendizaje nos permitirá hacer grandes mejoras en un futuro próximo que de otro modo hubieran llegado mucho más tarde.
Respecto al marketing, hasta ahora nos habíamos limitado al marketing de guerrilla, puesto que inicialmente habían muchas cosas que corregir y mejorar, no era conveniente saltar a grandes medios. El boca a boca nos permitió aparecer citados en más de 800 blogs lo que nos trajo muchas personas interesadas y motivadas para dar mucho feedback e información para mejorar el sitio. Ciertamente, aún queda mucho que mejorar, pero ahora el proyecto esta mucho más definido y preparado para salir en grandes medios masivamente, de hecho ayer lo hizo por primera vez (Panoramio en Google News)
A partir de ahora las cosas irán cambiando en Panoramio, pero no tan radicalmente y muchos cambios lo serán en la parte invisible, por ejemplo la velocidad de interacción de las fotos con el mapa. Más allá de preferir unas filosofías de trabajo u otras lo importante es ser flexible y buscar la mejor manera de alcanzar los objetivos buscados.
ver tambien aqui
fuente original aqui
Etiquetas:
desarrollo agil,
programacion extrema
Suscribirse a:
Entradas (Atom)