Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter
Eric Raymond
Z
El blog amigo del Nerd moderno
Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter






Cientifico A: ... estás loco. Nadie va a ser tan boludo. Esta bien que la mayoría de la gente es bastante ignorante. Pero supongo que de esta si se darán cuenta.
Científico B: Vos haceme caso. La gente del populacho son un grupo de ovejas decerebradas. Vos decile que este bicho inerte es un caballo y lo van a comprar como billete del gordo de navidad...
Luego de haberse tomado 2 ginebras, 5 fernet y 4 whiskys...
Cientifico A: Che, encontré un animal de 15cm de largo, con caparazón ocificado, cabeza tupular, carente de dientes y ninguna extremidad...
Cientifico B: Un caballo!

SELECT * FROM Countries WHERE Country_id = :c_id
using (IDbConnection conn = new OracleConnection("Password=hr;Persist Security Info=True;User ID=hr;Data Source=localhost")){
conn.Open();
using (IDbCommand command = conn.CreateCommand()) {command.CommandType = CommandType.Text;
command.CommandText = "SELECT * FROM Countries WHERE Country_id = :c_id";
IDbDataParameter param = command.CreateParameter();
param.ParameterName = "c_id";
param.DbType = DbType.AnsiStringFixedLength;
param.Value = String.Empty;
command.Parameters.Add(param);
using (IDataReader reader = command.ExecuteReader()) {DumpReader(reader);
}
}
conn.Close();
}
El domingo, luego de instalar una actualización que se bajó de Windows Update, mi PC dejó de funcionar. Restauré una imagen de Ghost que tenía creada, pero se ve que algo malo tenía, porque no andaba Windows Update y tiraba algunos errores, por lo que decidí reinstalar. El lunes estuve todo el dia instalando Windows Vista y bajando drivers. Una vez que estuvo todo andando, abrí los updates y bajé todo lo que había para actualizar y… reinicie. Esa fue la última vez que Windows Vista pudo arrancar.
Teniendo mas ira que un ejercito de vikingos en puerta de vírgenes, decidí contar hasta 10, pensar en la tumba de quien no terminó de probar los updates y agarrar la imagen de Windows XP.
Otra vez en el viejo y querido OS lanzado en 2001 por Microsoft, espero terminar mis idas y venidas por Vista y XP, al menos hasta que salga el SP2 de Vista.
PD: Encontré para usar con XP un programa que simula (y muy bien) el Exposé (o como se escriba) de OS X. Lo pueden conseguir en http://www.reflexvision.net/
Z
Gente, les dejo aca un excelente jueguito de pelea en 3D basado en los personajes de DragonBall Z… hechos lemmings!
Es medio exigente con la placa de video, pero el juego esta muy bueno: HomePage
Z
Para toda la gente que tenga un blog o similar y tenga que pegar código, le recomiendo que use el CopySourceAsHtml y a olvidarse de los problemas de Blogger, Word 2007 o Live Writer cuando pegás un pedazo de código!. (Gracias Mariano!)
Lo pueden bajar de aca.
Z
Hoy estábamos viendo con uno de los chicos del laburo que necesitaba poder acceder a distintos WebServices (desconocidos para el en tiempo de compilación) y queríamos encontrar una forma cómoda de hacerlo.
Después de buscar un poco, encontramos una solución que pareció bastante piola: usando el WSDL del WebService, generar la clase proxy en runtime y usar los WebMethods por Reflection. Está claro que no es la solución óptima en términos de velocidad, pero con unas clases helper que hice, resulta muy cómodo para usar.
El siguiente código lee el WSDL y genera la nueva clase en runtime:
try
{
//Get the web service description
Uri uri = new Uri(wsdlUrl);
WebRequest webRequest = WebRequest.Create(uri);
System.IO.Stream requestStream = webRequest.GetResponse().GetResponseStream();
ServiceDescription sd = ServiceDescription.Read(requestStream);
string sdName = sd.Services[0].Name;
//Create the ServiceDescriptionImporter
ServiceDescriptionImporter sdImporter = new ServiceDescriptionImporter();
sdImporter.AddServiceDescription(sd, String.Empty, String.Empty);
sdImporter.ProtocolName = "Soap";
sdImporter.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties;
CodeNamespace codeNamespace = new CodeNamespace(DefaultNamespace);
CodeCompileUnit compileUnit = new CodeCompileUnit();
compileUnit.Namespaces.Add(codeNamespace);
//Import the ServiceDescription
ServiceDescriptionImportWarnings warnings = sdImporter.Import(codeNamespace, compileUnit);
if (warnings == 0) //No warnings
{
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
codeProvider.GenerateCodeFromNamespace(codeNamespace, new StringWriter(), new CodeGeneratorOptions());
//Compile the assembly
string[] assemblyReferences = new string[2] { "System.Web.Services.dll", "System.Xml.dll" };
CompilerParameters param = new CompilerParameters(assemblyReferences);
param.GenerateExecutable = false;
param.GenerateInMemory = true;
param.TreatWarningsAsErrors = false;
param.WarningLevel = 4;
CompilerResults results = codeProvider.CompileAssemblyFromDom(param, compileUnit);
Assembly assembly = results.CompiledAssembly;
Type[] types = assembly.GetExportedTypes();
//Get the generated Type
return new DynamicProxyClass(types[0], GetMethodNames(sd.PortTypes[0].Operations));
}
else
{
throw new Exception(String.Format("Importing has warnings: {0}", warnings.ToString()));
}
}
catch (Exception ex)
{
throw new Exception("Couldn't generate proxy class (see inner exception)", ex);
}
Acá se puede ver que lo que devuelvo es una DynamicProxyClass. Esta clase lo que hace es wrappear la clase generada y exponer solo los métodos del WebService, sus tipos de retorno y sus parámetros.
Si les interesa jugar con esto, dejo para bajar el código completo de la solución.
Z
Les dejo la segunda parte del artículo, donde se ven más ejemplos y una implementación de Linq hecha sobre una clase propia.
Lo pueden bajar de acá.
¡Hasta la próxima!
Z
Hace unos meses, con Ariel Neisen y Javier Argüello hicimos un artículo explicando los nuevos features incluidos en C# 3 y Linq para publicar en la revista .Code. El artículo ya había sido enviado, sin embargo hace unos días nos enteramos de que la publicación de la revista fue suspendida (aparentemente for good). Como el artículo ya estaba hecho, decidí publicarlo en el blog.
La primera parte hace una introducción a las nuevas herramientas del lenguaje y a Linq. La pueden bajar de acá.
En un rato estaré publicando la segunda parte.
¡Hasta la próxima!
Z
Gente, para quienes tengan que usar TFS en sus proyectos, pero estén acostumbrados a herramientas para control de versión menos invasivas como el SVN o CVS, les recomiendo el SvnBridge: un programita que pone un mini-server de SVN en la maquina local, que lo único que hace es wrappear los comandos de SVN a otro server de TFS. Yo lo estoy usando para subir las cosas a Codeplex. Parece funcionar un poco lento, aunque no se si es por el server de TFS o este programa. Muy bueno
Pueden obtener el código fuente desde acá: http://www.codeplex.com/SvnBridge
Saludos!
Z