We’re looking for Software Automation Engineers

Corvalius is looking for a graduate (or next to graduation) Software Automation Engineer to join the team as permanent staff. As an automation engineering you will be designing and implementing automation and verification processes to ensure the Team is as efficient and effective as possible. Helping our team to discover and tackle edge cases that most of the time arise during operation activities and more importantly help the team to optimize their own workflow. The position requires an extensive experience in software development using various mainstream and/or other languages (including scripting languages).

Your Duties and Responsibilities:

  • Design, Implement and Evolve tools for use by the software development team. Included but not restricted to:
    • Comprehensive test automation tools, with capabilities to define, execute and analyze test scripts.
    • Rapid deployment and system operation tools.
    • Efficient reporting and analysis of operations data.
  • Plan, configure and conduct functional, compatibility, performance, stress and regression test.
  • Develop and execute reusable and maintainable test automation scripts and other automated tools.
  • Being able to rapidly switch from one project to another and reusing the knowledge acquired.

The position requires the candidate to have proven coding abilities, the ability to express thoughts clearly in English and Spanish (both orally and in writing). Other languages are considered favorably.

It is desirable but not required to have experience in Bamboo or any other continuous integration tools, also Powershell and productive cluster environments. It is also desirable to have  contributed to Open Source, blogs or any other technology awareness activities.

Let us know if you want to apply: info@corvalius.com

Corvalius’ research team grows

Welcome Diego!

labs-academics-avatarIn our pursuit of finding passionate professionals, who like us, look forward to building tools that simplify our daily lives, we came across Diego Evin, who has recently joined the Corvalius Research and Development division.

Diego has been specializing on the study and application of Computer Learning technology for the last 10 years, in order to solve problems in the Biomedical and Speech Recognition fields. Therefore, he was an ideal candidate for the Corvalius Research and Development division. Kindly known to us as Labs + Academics.

Diego has a bachelor’s degree in Bioengineering and a PhD in Computer Science. Before joining us, he had a postdoctoral internship at Stanford Research International, and also at CONICET, where he worked at the Sensory Research Lab at the Institute of Applied Neuroscience.

With a great deal of published articles circulating the bioengineering field, his research primarily focuses on automatic speech recognition, monitoring and diagnostics of vital signs and medical images.

Among his main contributions to the technological transfer field are his developments to a sound measurement system for the work place, an automatic speech recognition system, and the development of tools for forensic voice analysis.

In the teaching field, he taught the university level course “Artificial Intelligence and Computer Intelligence” at the Universidad Nacional de Entre Rios (2004-2012) and was also the Professor for the graduate level course “Computer Science and Artificial Intelligence Topics Applied to Biomedical Engineering: Artificial Intelligence Techniques”, which was part of the Biomedical Engineering Masters Program (2011).

Want to join Diego and the rest of the team? Let us know.

Comenzá 2013 trabajando en Corvalius.

Buscamos un Desarrollador.

Buscamos un Desarrollador que sepa como codear.

Buscamos un Desarrollador que sepa como codear aplicaciones web.

Buscamos un Desarrollador que sepa como codear aplicaciones web en ASP.NET MVC.

Buscamos un Desarrollador que sepa como codear aplicaciones web en ASP.NET MVC, que quiera seguir creciendo.

Buscamos un Desarrollador que sepa como codear aplicaciones web en ASP.NET MVC, que quiera seguir creciendo y que no quiera dejar de aprender.

 En fin…

Te estamos buscando.

Mandanos tu CV a info@corvalius.com

When does software developers perform better?

Targeting an extension for VS2010 and VS2012 using a single manifest

Hi VS coders!

Today I want to share our experience on targeting extensions to Visual Studio 2010 and 2012 in the same package.

What do we achieve with this?

  • A single .vsixmanifest file.
  • A single extension Id
  • Publish your extension in a single page of the Visual Studio Gallery

One side effect is that at the end of the migration, you must use Visual Studio 2012. We investigated possible ways to create a version of the solution to be compatible with 2010 as well, in our case, it was not possible for reasons I will describe later.

Ok, too much introduction! let’s go to the first step:

1. Changes in the vsixmanifest file:

When you first open your solution created in VS2010 in VS2012, it will try to migrate the extension project. Some interesting thing I’ve learned here:

  • The .sln file is compatible for both Visual Studio versions.
  • There is a new version of the vsixmanifest schema, but the migration process won’t attempt to migrate it (that is good because we want our extension to be backward compatible). This is the reason why after the migration, VS2012 can’t open the file with the editor, instead it directly shows you the xml.

Ok, so, in order to let your extension be able to detect VS2012 you have to add this lines in the manifest.

<VisualStudio Version="11.0">
<Edition>Ultimate</Edition>
<Edition>Premium</Edition>
<Edition>Pro</Edition>
</VisualStudio>

of course the actual flavors of VS you support depends on your extension.

 

2. Split the extension:

After changing the manifest you can compile your extension and see if it works on VS2012. In some cases it should work, but we had problems with the following assembly:

  • Microsoft.VisualStudio.ExtensibilityHosting

As we are using MEF inside our extension, we depend on that assembly. The point is you can’t use version 10 inside VS2012, it simply won’t work. Because of this problem, we ended up splitting the projects in the following way.

 

image

We keep the extension project (the one that contains the manifest) targeting .NET framework 4.0 which contains only references to assemblies that are compatible with VS2012  and we create two other specific projects:

  • Extension.v10 –> .Net 4.0 (this project in our case contains references to Microsoft.VisualStudio.ExtensibilityHosting v 10.0.0)
  • Extension.v11 –> .Net 4.5 (this contains Microsoft.VisualStudio.ExtensibilityHosting v 11.0.0)

Some considerations:

  • The extension project should contain references to Extension.v10 and Extension.v11 (the key here is to set the property “Reference output assembly” to false so the compile in .Net 4.0 despite Extension.v11 targets 4.5).
  • Don’t forget to add references to both assemblies in vsixmanifest
<Assembly AssemblyName="Extension.v10">|Extension.v10|</Assembly>
<Assembly AssemblyName="Extension.v11">|Extension.v11|</Assembly>

3. Dynamic load

When your extension is executing, depending on the Visual Studio version it’s running on, it should load the specific assembly for that version . To do that, ask the DTE about the version. Within your Package class, you can use a code similar to this to complete the job:

private const int MaxVsVersion = 11;

protected bool IsVisualStudio2010
        {
            get { return GetMajorVsVersion() == 10; }
        }

private int GetMajorVsVersion()
        {
            DTE dte = (DTE)this.GetService(typeof(DTE));
            string vsVersion = dte.Version;
            Version version;
            if (Version.TryParse(vsVersion, out version))
            {
                return version.Major;
            }
            return MaxVsVersion;
        }

Finally, load the assembly accordingly

 FileInfo assemblyFilename;
            if (IsVisualStudio2010)
                assemblyFilename = new FileInfo(Path.Combine(packageLocation,"Extension.v10.dll"));
            else
                assemblyFilename = new FileInfo(Path.Combine(packageLocation,"Extension.v11.dll"));

            Assembly assembly = Assembly.LoadFrom(assemblyFilename.FullName);

 

Then, you can use reflection or MEF to resolve what you need (the following code is an example using MEF)

var catalog = new AssemblyCatalog(assembly);
            var bootstrapContainer = new CompositionContainer(catalog);

            var export = bootstrapContainer.GetExportedValue<IBootstrapper>();
            container = export.GetContainer();

Hope It helps!

Hernán