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

En serio tenés que verlo completo

Esto me lo envió Andrés, un amigo, hay que verlo.

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();
            }
    }
}

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



Existe un buscador de codigo llamado Krugle, permite buscar codigo fuente en una gran cantidad de lenguajes y temas de programacion y tiene incluso plug-ins.

fuente original aqui

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




Trolltech ha sacado una nueva versión de su herramienta de desarrollo multiplataforma basada en java QT jambi, y los demos que muestras son increibles.

(Recordemos que KDE esta desarrollado en las herramientas de Trolltech)

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)

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

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.

La proxima versión de SQL Server

Aquí un adelanto.

viernes, mayo 04, 2007

mmmmm....

Hay gente que conquista medio mundo, pero valora mas la mitad que no tiene