Wednesday, 17 May 2017

Obten la correspondencia oficial de tu título universitario (pre-Bolonia) con MECES - EQF

Como suele pasar, las titulaciones universitarias cambian cada 3x4.

Si, como yo, tienes una titulación antigua, debes saber que puedes obtener muy fácilmente un documento oficial que certifica la equivalencia que le corresponda a tu título dentro de los nuevos marcos MECES (nacional) o EQF (Europeo).

La equivalencia, es como sigue:


Es decir:


  • Diplomados, Ingenieros Técnicos, Maestros y Arquitectos Técnicos, equivalen a un Grado/Bachelor (MECES 3 - EQF 6)
  • Licenciados, Ingenieros Superiores o Arquitectos, equivalen a un Máster/Master (MECES 3 - EQF 7)
  • Doctores, equivalen a Doctor (MECES 4 - EQF 8)

¿Cómo obtener el certificado?


1.- Ve a ésta página del Ministerio de Educación
2.- Pincha en "Acceso al servicio Online"
3.- En la página que aparece, pincha en el botón naranja que dice "Acceder"
4.- Identifícate con tu DNIe, con un Certificado electrónico, o con Cl@ve
5.- Introduce el número del Registro Nacional de Títulos que aparecerá en tu titulación. Suele tener el formato AÑO/NÚMERO, como 2002/234012. En el formulario hay que introducir todo, pero sin la barra, es decir: 2002234012.

Aparecerán tus datos y la equivalencia que corresponde a tu título, y te dará opción de descargar un certificado como éste:


Espero que sirva,

Tuesday, 11 April 2017

¿Es importante la sanidad pública?

Hace no mucho nos sucedió algo realmente relevante, para decidir si la sanidad pública es una necesidad irrenunciable que hay que defender, o si por el contrario es prescindible.

Empezaré diciendo que no soy nada amigo del modelo de funcionariado español. Soy de los que cree que otorgar una plaza vitalicia (e intocable) a un bedel, a un chófer o a una persona que atiende en una ventanilla es absurdo. Pero siempre he creído que la sanidad es una excepción evidente, igual que las fuerzas de seguridad, los jueces, inspectores y demás autoridades del estado.

Lo que nos pasó, arroja bastante luz al tema:

Resulta que tuvimos un pequeño problemilla en forma de bultito sospechoso. Tras las pruebas, se confirmó que no era nada, pero los médicos aconsejaban vigilarlo. En aquellos tiempos, la empresa nos pagaba un seguro privado, así que nos atendían en uno de los mejores hospitales de España, del cual no tengo queja alguna. El trato era maravilloso, y el nivel de los médicos realmente bueno.

El caso es que tras unos meses así, nos derivaron a un cirujano especialista para que valorara si era conveniente o no operar. Varios médicos habían confirmado que no era nada malo ni grave, pero bueno... acudimos a la consulta, y fue como sigue:

El médico llegó con prisas, medio corriendo. Se notaba que paró un segundito a atendernos, porque llegó corriendo y se fue corriendo. De hecho, ni siquiera se puso la bata, nos atendió con la ropa de calle. Miró el bultito durante 2 o 3 segundos, lo palpó con un guante de latex durante otros 2 o 3 segundos, y nos preguntó por las pruebas que nos habían hecho durante otros 2 o 3 segundos. Ni siquiera las miró, solo con decirle nosotros que la ecografía no había encontrado nada malo, fue suficiente.

Tras esos pocos segundos, nos dijo que efectivamente no parecía nada malo, y que era algo meramente estético (además, es un bultito que no se ve), pero que volviéramos "después del verano" para ver si había evolucionado de alguna forma, y terminó la consulta diciendo que si entonces seguía igual, él aconsejaba operar.

Cuando se fue, tocaba pasar por caja. La consulta fue tan breve, y tan ridícula, que estaba totalmente seguro de que no nos iban a cobrar nada. Evidentemente, estaba muy equivocado: cuando salí al vestíbulo, me quedé atónito al ver que me pasaban una factura de 250 euros.

Nos daba un poco igual, porque el seguro nos reembolsaba la mayor parte, pero madre mía... 250 euros por una consulta que no llegó al minuto, en la que solo nos dijeron "vuelvan después del verano". Increíble.

Aún así, esa parte es una mera anécdota. Un poco escandalosa, pero ni siquiera me parece mal. Cada uno es libre de cobrar lo que crea justo y los demás somos libres de ir a su consulta o no.

Lo realmente relevante de la historia es lo que sigue:

En los meses siguientes, nos mudamos a Navarra, donde la sanidad no es mala precisamente. Nos han asignado médico de cabecera nuevo (en la Seguridad Social), que tras evaluar el caso ha llegado exactamente a las mismas conclusiones y ha seguido exactamente el mismo camino, derivándonos a un cirujano especialista (también de la seguridad social).

Éste también ha llegado exactamente a la misma conclusión que el médico privado: no es nada malo, sino meramente estético. La gran diferencia viene en que esta nueva cirujano opta de forma rotunda por NO operar, mientras no represente ningún problema o molestia adicional.

No dudo de la calidad del primer médico, ni de su honestidad ni de su profesionalidad. No dudo en que si fuera realmente desaconsejable operar, jamás optaría por ello. Pero claro: ¿qué pasa en éstos casos en los que da un poco igual operar o no (desde un punto de vista de salud)? Pues es evidente... si por una consulta de un minuto cobra 250 euros, imagina lo que cobra por una operación. A fin de cuentas, él vive de eso.

Y ése es el principal motivo para defender la sanidad pública: la gente que toma decisiones sobre nuestra salud, tiene que hacerlo guiada única y exclusivamente por nuestro bienestar, nunca por aspectos económicos. 

Y eso solo es posible si la sanidad es absolutamente pública.




Wednesday, 11 January 2017

Happy 10th Birthday, GraphicDNA !

Last week this blog turned 10!!

Image result for 10th birthday

Can't believe how fast time goes by.

During this period, I founded my company, I had the honor to be awarded as DirectX MVP (4 years in a row), I became part of Microsoft / RARE team, and then I spent some of the best years I had in the industry, working as Associate Technical Director at Electronic Arts. It's been an amazing adventure being part of the development teams of all these games:

Credited on...

Now that I´m back to teaching, writing, developing and R&D projects, I'm certain that the best is yet to come.

It's been a wonderful time to be a developer all along, so let's see what the next 10 years bring :)

Cheers!

Tuesday, 10 January 2017

Custom MainLoop in C# / UWP applications with DirectX (SharpDX) with unlocked frame rates (beyond 60 Hz)

When you want to write a game or a 3D application in C# using SharpDX, and you want it to be UWP, there is little information about how to correctly handle the basics of the main loop.

All examples I found were based on the interop between XAML and DirectX, but if you go that path, you´ll need to rely on the CompositingTarget.Rendering event to handle your updates and renders, which lets all the inner processing to Windows.UI.XAML and limits the frame rate to 60 Hz.

So, how to create your own, unlocked-framerate-ready, main loop?

First things first:

Dude, where's my Main entry point?

Typically, a C# application has a Program static class where the "main" entry point is defined.

When you create a WPF, UWP or Windows Store application though, aparently that code is missing, and the application is started magically by the system.

The truth is that the main entry point is hidden in automatically-generated source code files under the obj\platform\debug folder. If you look there for a file called App.g.i.cs, you'll find something like this:


#if !DISABLE_XAML_GENERATED_MAIN
    /// <summary>
    /// Program class
    /// </summary>
    public static class Program
    {
        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Windows.UI.Xaml.Build.Tasks"," 14.0.0.0")]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        static void Main(string[] args)
        {
            global::Windows.UI.Xaml.Application.Start((p) => new App());
        }
    }
#endif

Et'voila... There's your entry point.

So first thing is to define the DISABLE_XAML_GENERATED_MAIN conditional compilation symbol to prevent Visual Studio from generating the entry point for you.

Next, is to add your own Program class and main entry points, as always, so you have control on the application start procedure. You can simply copy-paste that code anywhere in your project.

The Main Loop

Please note: this implementation is inspired by the C++ equivalent described here.

Now that you have a main entry point, you can replace the invokation of Windows.UI.Xaml.Application.Start (which internally deals with its own main loop) with your own code.

What we want to use instead is: Windows.ApplicationModel.Core.CoreApplication.Run, which is not bound to XAML and allows you to define your own IFrameworkView class, with your custom Run method.

Something like:


public static class Program
{
    static void Main(string[] args)
    {
        MyApp sample = new MyApp();
        var viewProvider = new ViewProvider(sample);
        Windows.ApplicationModel.Core.CoreApplication.Run(viewProvider);            
    }
}

The ViewProvider class

The main purpose of the view provider is to create a IFrameworkView when required, so it could be something like this:


public class ViewProvider : IFrameworkViewSource
    {
        MyApp mSample;

        public ViewProvider(MyApp pSample)
        {
            mSample = pSample;
        }
        //
        // Summary:
        //     A method that returns a view provider object.
        //
        // Returns:
        //     An object that implements a view provider.
        public IFrameworkView CreateView()
        {
            return new View(mSample);
        }
    }

The View Class

The view class implements the IFrameworkView interface, which defines most of the logic we want to implement.

The framework will invoke interface's methods to perform the initialization, uninitialization, resource loading, etc, and will also report us when the application window changes through the SetWindow method.

For the purpose of this article, the most interesting part is the Run method, which we can write to include our own, shiny, new Main Loop:



public void Run()
{
    var applicationView = ApplicationView.GetForCurrentView();
    applicationView.Title = mApp.Title;

    mApp.Initialize();

    while (!mWindowClosed)
    {
        CoreWindow.GetForCurrentThread().Dispatcher.ProcessEvents(
                                   CoreProcessEventsOption.ProcessAllIfPresent);
        mApp.OnFrameMove();
        mApp.OnRender();
    }
    mApp.Dispose();
}

This removes the need to rely on XAML stuff in your game (and its overhead), gives you more control about how the mainloop behaves, and unleashes the possibility of rendering with a variable frame rate in C#.

Please refer to this page for further info about how to initialize a swap chain suitable for unlocked frame rates.

Hope it helps!

Monday, 9 January 2017

[UWP] Unable to activate Windows Store app - The app didn't start


Today, I've been struggling with a Visual Studio 2015 deploy error for a while.

When trying to debug a C# - UWP application, I kept receiving the following error upon application activation:


Places like this have information about other people finding the same error. Some of them even re-installed Windows 10 from scratch with no luck.

In my case, the cause (and solution) was much simpler than that:

I have my all my projects in an external SSD drive. Yesterday I was working in my laptop, and the last compilation I did there was in Release mode. When I brought the external disk back to my main PC today and tried to deploy directly as Debug, the activation failed for some reason.

So, going back to Release mode, rebuild, launch and let Windows activate the app did the trick. After that, I've been able to go back to Debug mode normally. 

Hope it helps.