Categories
.NET Varios

Error en compilador de mono para VB.NET

Si bien es cierto que este compilador tpdavía está en fase alpha, falla con el siguiente ejemplo:

vbnet:

Imports System

Public Class Foo
        Public Shared Sub Main()
                Dummy(Console.WriteLine())
        End Sub
        Public Shared Sub Dummy(ByVal x as String)
        End Sub
End Class

Como saben, el código mostrado inicialmente no debería compilar, sabiendo que el método WriteLine de la clase Console, no devuelve nada.

Observando el IL generado para el método Main, hay alguna pista del porque se compila sin problemas

code:

// method line 2
    .method public static
           default void Main ()  cil managed
    {
        // Method begins at RVA 0x2100
        .entrypoint
        // Code size 21 (0x15)
        .maxstack 3
        .locals init (
                object[]        V_0,
                string[]        V_1,
                bool[]  V_2)
        IL_0000:  call void class [mscorlib]System.Console::WriteLine()
        IL_0005:  box [mscorlib]System.Void
        IL_000a:  call string class [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.StringType::FromObject(object)
        IL_000f:  call void class Foo::Dummy(string)
        IL_0014:  ret
    } // end of method Foo::default void Main ()

No soy ningún experto en IL, pero al parecer hace un boxing del tipo System.Void a un objecto (me parece que ahí­ es donde debería mandar el error de compilación)y luego intenta convertir ese objeto a un string.

Estuve intentando determinar donde exáctamente se produce este error, pero sin resultados satisfactorios :(, por lo pronto sólo he reportado el bug.

Categories
.NET ASP.NET Varios

Problemas con mod_mono y SELinux

Ayer, después de instalar mod_mono(compilado) sobre Apache 2.0.54 (el que viene por defecto en Fedora 4) para probar una aplicación que estoy desarrollando, me salía un error con el texto "Service temporarily unavailable" al intentar acceder a la aplicación, busqué en los logs del servidor web, pero no había nada que indicara la causa de este error.

Luego de buscar por un rato, algunos mencionaban que este error se solucionaba desactivando la protección de SELinux sobre el proceso httpd (setsebool -P httpd_disable_trans 1), pero lamentablemente para mí, no encontró alguien que explique el por qué de este problema.

Alguno de ustedes sabe como hacer funcionar mod_mono sin tener que desactivar SELinux para todo el proceso de Apache o en su defecto dé algunas pistas del por qué sucede esto?

Categories
.NET

Controles .NET para aplicaciones de escritorio

A través del blog de Phil Wright me entero que ha sido liberado Kripton Toolkit, que es un conjunto gratuito de controles .NET, destinados a mejorar las interfaces gráficas de usuario en aplicaciones de escritorio, estos controles han sido desarrollados para trabajar con los recientemente liberados: Visual Studio 2005 y .NET Framework 2.

A pesar de que muchas veces se tiene que pagar una licencia por la adquisición de controles y/o componentes, generalmente este tipo de cosas ayudan a las empresas a ganar más "horas desarrollador".

Nota: Para todos aquellos que programen con .NET y tengan un blog con entradas relacionadas a esta área, hay una interesante oferta en la que regalan una copia de la última versión de DotNetMagic, creo que a nadie le cae mal estas cosas :-).

Categories
.NET ASP.NET

Hagamos bien las cosas…

Hace poco acabo de leer una entrada titulada Monologue ya soporta ATOM, me llamó la atención porque hace algunas semanas que vengo jugando con Monologue (que es un agregador de feeds al estilo Planet Planet!), el hecho es que la versión original soporta sólo feeds que están en formato RSS. Por curiosidad me animé a navegar en el repositorio del proyecto OpenBBS en busca del código modificado de Monologue; merecen especial atención las siguientes líneas del archivo monologue-worker.cs:

csharp:

bool bAtom = false;
if ( url.LastIndexOf("atom.xml") > 0 ) //es un ATOM
{
bAtom = true; Console.WriteLine("Es un ATOM");
}

Como pueden observar la comprobación para determinar si el feed está en formato ATOM sólo se basa en la terminación del URL, esto, en mi opinión, es muy ineficiente, por ejemplo en este blog, los feeds son de la forma http://www.buayacorp.com/?feed=atom o http://www.buayacorp.com/feed/atom, en muchos otros casos ni siquiera estará presente la palabra ATOM.

Si bien es cierto que todavía soy muy novato y me queda mucho por aprender, además del hecho de que hasta ahora no haya participado en algún proyecto de Software Libre; creo que debemos tener más cuidado cuando publiquemos este tipo de cosas, porque habrán decenas/cientos/miles/millones de personas que observarán cada idea que expresemos o cada recurso que colguemos en la red, claro está, que eso depende de la cantidad de visitas del sitio, por eso hasta ahora no he recibido muchas críticas :-P.

Categories
.NET Quiz

Quiz sobre C#

Para los entendidos en C#, ¿Qué devuelve la siguiente función (y por qué) ?

csharp:

using System;

class Q1: System.NullReferenceException {
  static int Main() {
    try {
      string valor = "Value: " + (Q1)null;
      return valor.Length;
    }
    catch (Q1 q) {
      throw;
    }
  }
  public static string operator +(string msg, Q1 q) {
    return msg + q;
  }
}

Posibles respuestas

  • Retorna la longitud de la variable valor
  • Se produce un NullReferenceException
  • Se produce un StackOverflowException

Es una ligera adaptación del Quiz Sharp 1 de Adrian Florea

Solución

El código mostrado genera un StackOverflowException, porque la sobrecarga del operador "+" se hace sobre un objeto de tipo string en el primer sumando y un objeto de tipoQ1 en el segundo, es por eso que se hace recursivo (return msg+Q1;) como menciona Kiz.