viernes, 25 de febrero de 2022

Como crear una nueva red wifi 5G router ZTE F6640

Buenas a tod@s

 

Haca años que no escribo nada por aquí, no, no es que haya muerto, estaba de parranda. Desde hace un tiempo a esta parte la verdad es que estoy teniendo multitud de compromisos que no me permiten, por un lado, escribir y por otro siempre estoy con la lengua fuera.

 

El otro día estuvo en mi casa el técnico de MasMovil para ponerme un nuevo router. El aparato en cuestión es un ZTE F6640. Un cacharro muy grande y bastante robusto, con wifi 6 y muchas cosillas más.

 

Antes de nada, me voy a quejar:

SEÑORES DE MASMOVIL, POR DIOS, DEJARNOS AL MENOS GESTIONAR LOS PUERTOS, ESTO ES UNA VERGÜENZA.

 

El aparato tiene buena pinta, pero ahora tiene "Super Wifi" que básicamente es un Wifi 6 con las dos SSID juntas (la de 2,4 y la de 5G). Por lo que, si queremos conectarnos a la de alta velocidad directamente, no podremos. El técnico, el pobre, no sabía como hacerlo. Entonces me propuse hacer un manualillo para que todos los técnicos que lo necesiten puedan crear la nueva red 5G y hacer la prueba de velocidad correcta.

 

Inicio del tutorial

 

Primero entramos en el router a través del navegador web poniendo la ip 192.168.1.1 (o la que tengamos asignada a la puerta de enlace de nuestro equipo) y veremos esta pantalla

Luego ingresamos con el usuario y contraseña, en principio para MasMovil

Usuario: 1234

Contraseña: 1234

 

Ya estamos en la pantalla de administración, ahora pinchamos sobre Local Network

 

Accedemos a la pantalla de LocalNetwork y ahora en el margen de la izquierda pinchamos en WLAN y luego desplegamos en WLAN SSID Configuration

 

Ahora se nos desplegarán todos los SSID. Por defecto tenemos únicamente 2 activos, el resto estarán en OFF

Pinchamos sobre en un SSID que sea 5G y esté inactivo por ejemplo el SSID 6

Ahora se desplegará las configuraciones. Debemos seleccionar las siguientes opciones:

Ponemos el SSID 6 ON y ponemos un nombre a la red inalámbrica nueva. Aconsejo poner el mismo que tenemos añadiendo la coletilla 5G

Ejemplo de una configuración correcta

Para terminar, pulsamos el botón de Apply.

 

 

Listo ya nos debería aparece la nueva red wifi independiente y solo 5G

 

Fin del tutorial

 

Aquí dejo este tuto para mí y para todo el que quiera utilizarlo. Espero que esto os sirva a much@s, y si no te sirve, que al menos la lectura haya sido amena.

 

Muy importante, si decides compartir o republicar parte de este artículo porque te ha sido útil, por favor cita la fuente y el autor del mismo (vamos cítame) y pon un enlace al artículo de mi blog, te estaré eternamente agradecido.

 

Muchas gracias por leerme.

Saludetes a todos

 

P.D. Podéis seguirme en @Jberron y LinkedIn

 

about.me/jberron

viernes, 9 de marzo de 2018

Crear instalador con Visual Studio 2017

Buenos días a tod@s

Sé qué hace mucho que no escribo por aquí, pero, espero alegraros con deciros que sigo vivo y entero jeje. 

Hoy vengo a contaros un problema/necesidad que he tenido y que me ha costado bastante solucionar. No por ser complicado, sino porque la documentación es escasa, difícil de encontrar y todo es muy poco intuitivo. Bueno al tema de hoy que no por eso es menos apasionante. 

Antiguamente desde la versión de Visual Studio 2008 (creo recordar), InstalShield ofrecía una versión gratuita y muy limita de su producto pero que para pequeñas instalaciones nos soluciona el problema de una forma muy profesional. Este acuerdo ha estado presente hasta la versión 2015, pero a partir de entonces ya no tenemos este recurso (una verdadera lástima). 

Visto que ya no podemos hacer las cosas como antes ¿Cómo lo hacemos?


Bueno pues existen múltiples soluciones, Yo he optado por utilizar el propio generador de instalaciones de Visual Studio 2017. Es probablemente la más complicada y engorrosa de todas, pero tiene una cosa a favor, que como forma parte del propio Visual Studio, es muy difícil que deje de funcionar o perdamos el soporte cuando cambiemos a una futura versión.

Este articulo está hecho con VS 2017 Professional. Estoy prácticamente seguro de que es válido al 99,999% para Visual Studio 2015 e incluso 2013 pero la realidad es que esta hecho en 2017 y puede que algunas cosas no sean iguales o se llamen de otra forma.

 

Instalar el paquete Visual Studio Installer para Visual Studio 2017


Antes de nada, si alguno recuerda Visual Studio 2010 en el tipo de proyectos disponibles, existían uno que decía Otros Proyectos à Instalación e implementación y teníamos dos opciones Instalado de Visual Studio y InstalShield LE


Si Intentamos hacer lo mismo en nuestro Visual Studio, veremos que en “Otros tipos de proyecto”, sale vacío. 

Primero debemos instalar el paquete para poder crear nuestros instaladores. Para hacer esto vamos al market de Visual Studio y https://marketplace.visualstudio.com/ y lo buscamos “Installer Projects”.

Para que sea más rápido, os pongo los enlaces directos a los paquetes:

VS 2017

VS 2015

VS 2013

Descargamos e instalamos el paquete y vuala, ya nos aparecerá dentro de “Otros tipos de proyecto “Visual Studio Installer”.

 

Creando nuestro instalador


Tenemos 2 tipos de proyecto en los que nos vamos a centrar. Basicamente son los mismos, la diferencia está en que el primero tiene un pequeño asistente y es algo más amigable (Setup Wizard) y el otro lleva direamente a la pantalla que aparece cuando terminas el asistente (Setup Proyect), por lo tanto el tutoria vale practiamente para los dos.


Pulsamos siguiente


En este ejemplo vamos a hacer una instalación para una aplicación de escritorio, por lo tanto seguimos con la primera opción y pulsamos siguiente.


En esta pantalla nos permite añadir cualquier fichero a la instalación. Podeis hacer lo que querais, desde añadir los ficheros de resultado del proyecto, hasta no añadir nada. Para el ejemplo no voy a añadir nada, pero podria añadirlo todo y ya aparecerian dentro del proyecto.



Ya estamos listos.


Bien ahora vamos a añadir nuestros ejecutables al instalador.
Pulsamos Botón derecho sobre el explorador de soluciones y tenemos la opción "Add"


Podemos hacer 4 cosas:
  • Añadir los resultados de un proyecto (pero para esto debemos añadir el proyecto a esta solución)
  • Añadir Archivo: Mi opción recomendada, añades cualquier fichero y el propio sistema se encarga de configurarlo, buscar sus dependencias etc etc.
  • Añadir “Merge Module”: Si hemos creado otro modulo, podemos añadirlo.
  • Ensamblado: Sin más, añade un ensamblado o componente  


Normalmente, yo la distribución la suelo hacerla independiente al desarrollo. Por lo tanto suelo integrar los ejecutables y librerías ya generados desde la carpeta de resultados, al menos es de la forma que lo he hecho siempre. Pero perfectamente podríamos añadir el proyecto a la solución y que el propio instalador integrara los ficheros (compilara primero el proyecto). Como digo, yo prefiero insertar todo a mano, desde la opción Añadir Archivo. Para eso pulsamos añadir archivo y nos saldrá una ventana para buscar y añadir los ficheros que queramos.


Una vez que hemos seleccionado y pulsamos abrir y ya está.


Y con esto ya tenemos instalador, hasta aquí fácil ¿no?

 

Insertar Información de la aplicación en el instalador

Ya tenemos un instalador para nuestra aplicación prueba ya creado, pero es un poco triste, ya que no hemos añadido información ni nada. Para eso pinchamos en el proyecto de instalación (en mi caso “Tuto Setup”) y seleccionamos la pestaña de propiedades (que no botón derecho propiedades que sale un menú que no tiene nada que ver).


Aquí ya podemos ponerle todos los datos que queramos para que quede más profesional.
Hasta aquí todo bien, ya tendríamos un instalador básico pero bastante apañado.


Opciones de configuración

Es curioso el lugar donde han colocado estos botones de configuración del instalador. Está en la barra superior del explorador de soluciones. Tenemos que tener seleccionado el proyecto de instalación (en el ejemplo “Tuto Setup”) y arriba a la derecha tendremos 5 botones.

De izquierda a derecha:
  • Editor del sistema de archivos
  • Editor del registro
  • Editor de tipos de archivos
  • Editor de acciones personalizadas
  • Editor de las condiciones de inicio


Acciones personalizadas

Ahora vamos a ir a chicha de verdad, lo realmente complicado y el porqué de este tutorial.

Muchas veces creamos programas que necesitamos configurarlos tras la instalación o que queremos que se arranquen. En Instalshield tienes una opción de que al terminar la instalación se lanza un programa. Para mi esta opción era muy útil, por lo dicho anteriormente. Tras instalarlo, lanzaba un programa que configuraba el cliente. Esta opción me permitía facilitar mucho el cómo instalar las cosas y me parece totalmente necesaria. 

Bueno, la buena noticia es que se puede y la mala que es un poco complicado. No porque sea difícil de hacer, si no porque hay poca documentación y la que hay para mi gusto no es demasiado buena. 

Para poder hacer esto debemos a ir al menu del editor de "cciones personalizadas. Al pulsar vemos lo siguiente. 


¿Cómo funciona esto? Bueno, parece evidente ¿no?

Pues no, no lo es.... 

Puedes pulsar botón derecho agregar acción personalizada, seleccionar un ejecutable y va a dar lo mismo lo que hagáis, que no va a ejecutar el programa. 

¿Cómo lo hacemos?

Pues despacito y con buena letra, porque tiene su ciencia. 

Vamos a la solución y agregamos un nuevo proyecto de “Biblioteca de clases (.Net Framework)” (Botón derecho agregar nuevo proyecto à Biblioteca de clases (.Net Framework)).
En mi caso le voy a llamar Acciones Personalizadas.


Bien, ya lo tenemos preparado.


Borramos el elemento Class1.cs y agregamos un elemento “Clase de instalador”


Pulsamos agregar y listo ya tenemos esto medio preparado. 


Ahora pulsamos en el enlace que pone “Haga clic aquí para cambiar a la vista de código”


Y una vez dentro vamos a pegar dentro de nuestra clase todas siguientes funciones, justo debajo de la función Installer.

[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
        public override void Install(IDictionary stateSaver)
        {
            base.Install(stateSaver);
        }

        [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
        public override void Commit(IDictionary savedState)
        {
            base.Commit(savedState);
        }


        [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
        public override void Rollback(IDictionary savedState)
        {
            base.Rollback(savedState);
        }

        [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
        public override void Uninstall(IDictionary savedState)
        {
            base.Uninstall(savedState);
        }


Perfecto, pues ahora ya podemos programar las acciones personalizadas. Dentro de la función Commit (que será la que realice cuando este terminando la instalación) podemos incluir, por ejemplo, la ejecución de nuestra aplicación.
Sería algo así:

[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
        public override void Commit(IDictionary savedState)
        {
            base.Commit(savedState);
            //ejecución
            System.Diagnostics.Process.Start("prueba.exe");

        }


Fantástico, casi lo tenemos. Ahora tenemos que incluir en acciones personalizadas el evento. Aquí sí que os aconsejo que integréis esta clase con el instalador. 

Para esto Sobre el proyecto de instalación pulsamos con el botón derecho “añadir”, “Resultados del proyecto” y seleccionamos el proyecto en mi caso llamado “acciones personalizadas”.


Ahora ya lo tenemos en nuestro instalador


Bien, vamos ahora la ventana de “Acciones personalizadas” y pinchamos directamente en “Custom Actions” botón derecho “Agregar acciones personalizadas” y buscamos (Que por defecto estará en “Aplicación Folder”) el resultado del proyecto que hemos añadido.


Con esto nuestro instalador va a ejecutar todo lo que este en los eventos que hemos en la clase installer.


Perfecto ya podemos ejecutar cualquier cosa, pero hay otro tema. ¿Cómo sabemos dónde se ha instalado nuestra aplicación para iniciarla? 

Evidentemente si no indicamos la ruta el sistema cuando intente enviar el proceso no da a encontrarla, debemos pasar la ruta completa. Para hacer esto debemos pasarle por parámetro a la clase installer donde esta nuestra aplicación instalada. Pero esto es variable ya que puede que el usuario cambie esto. 

Bien pues para hacer esto tenemos que seleccionar la acción personalizada que queramos y luego ir a propiedades. 


En propiedades tenemos una propiedad llamada “CustomActionData” esto le va a pasar el parámetro a la clase. En la clase en cada función tenemos dentro del objeto base.Context.Parameters un array con todos los parámetros que le hemos pasado.

Para pasar el parámetro se hace de la siguiente forma /name1=parámetro1 /name2=parametro2…. SI queremos pasar un parámetro personalizado del instalador debemos hacerlo “[parámetro]\”. Para pasar la ruta de la instalación debemos pasar el parámetro [TARGETDIR]. Por ejemplo así /TARGETDIR="[TARGETDIR]\", (se que la forma de poner las comillas es muy rara, pero es así 😑, no es ninguna errata ).


Como decía antes ahora debemos utilizar base.Context.Parameters para recuperarlo, sería algo así base.Context.Parameters["TARGETDIR"].ToString()

Si lo aplicamos al código para que ejecute la aplicación al acabar:
System.Diagnostics.Process.Start(base.Context.Parameters["TARGETDIR"].ToString() + "\\prueba.exe");

Con esto ya podemos ejecutar cualquier cosa que este en nuestra carpeta de instalación o no. Sé que existen más parámetros como estos,  [ProgramFilesFolder] [Manufacturer] [ProductName], pero no he encontrado ninguna lista donde aparezcan. Agradecería si alguien sabe de alguna, me la pasara para agregarla al artículo.

Diréis… de donde he sacado esto. Pues de una página de Microsoft, donde lo explican bastante regular (https://msdn.microsoft.com/es-es/library/d9k65z2d(v=vs.100).aspx)


Poner una carpeta de instalación personalizada


Para terminar, por defecto el instalador siempre instala la aplicación en la carpeta de archivos de programa \ nombre de la empresa\ Nombre de la aplicación, o lo que es lo mismo [ProgramFilesFolder] [Manufacturer]\ [ProductName]. A veces no nos interesa o queremos cambiar algo de esta ruta. Para eso tenemos que ir a “Editar el sistema de archivos”, seleccionamos “Application Folder” y pulsamos en propiedades. En la venta de propiedades tenemos una llamada “DefaultLocation” donde podemos poner una ruta personalizada. 


Cambiamos los valores que nos interesen y listo.

Fin del tutorial


Todo llega a su fin y este tutorial también, tengo que decir que ha sido un poco largo. No he querido meterme en otras partes como crear accesos directos, editar el menú de inicio, crear subcarpetas, porque es bastante sencillo. Lo realmente enrevesado es el tema de las acciones personalizadas y creo que con este tuto todo quedará más claro.

Aquí dejo este tuto para mí y para todo el que quiera utilizarlo. Espero que esto os sirva  a much@s, y si no te sirve, que al menos la lectura haya sido amena.

Muy importante, si decides compartir o republicar parte de este articulo porque te ha sido útil, por favor cita la fuente y el autor del mismo (vamos cítame) y pon un enlace al artículo de mi blog, te estaré eternamente agradecido.

Muchas gracias por leerme.
Saludetes a todos

P.D. Podéis seguirme en @Jberron, Google+ y LinkedIn




martes, 7 de julio de 2015

¿Por qué no me sorprende el diseño del Galaxy S6?

Buenas a tod@s, hace ya algunos meses, Samsung nos presentó el que sería un buque insignia en el segmento de Smartphone  (en el  segmento Phablet tendremos que esperar algo más) para todo este 2015 y parte de 2016, el deseado y afamado Galaxy S6 y Galaxy S6 Edge.


La propuesta de Samsung de desarrollar un nuevo teléfono totalmente desde cero, con nuevo diseño, nueva carcasa fue ante todo arriesgada. Arriesgada por querer hacer algo diferente a lo que nos tenía acostumbrado y lo hizo ¿o quizá no tanto?

El cambio de materiales pasando de plástico a cristal y aluminio me parece un cambio muy acertado, pero… ¿esto es un cambio diseño?

Yo creo que no,  es un cambio de materiales pero en diseño….

¿Por qué digo esto?

Sencillo poner un Galaxy S5 al lado de un S6 o incluso un S4, el veréis como el diseño es calcado y para prueba una imagen.


Por si alguien se lo sigue preguntado, el S6 es el de la izquierda.

Por otro lado, me hace mucha gracia escuchar a la gente diciendo que el S6 se parece mucho al IPhone 6 porque su diseño es igual. Me parece una apreciación correcta, pero ¿no será que el S6 se parece al S5 que a su vez se parece al S4 que se parece al S3 y por ende el IPhone se parece a todos estos?


En la siguiente imagen podemos apreciar los diseños de la gama Galaxy S de Samsung desde el S2 (el único que tiene un diseño bastante diferente al resto) . De izquierda a derecha S6, S5, S4, S3 y S2. 


Cuando leí que Samsung iba a rediseñar el teléfono desde cero, pensé que iban a hacer algo nuevo, algo diferente. Como hizo Sony cuando saco el primer Xperia Z y rompió totalmente en diseño y materiales (en este caso si es diseño) con los anteriores terminales de Sony. Pero en este caso Samsung sigue manteniendo prácticamente el mismo diseño y sustituyendo los materiales por unos más nobles (que no tiene porque ser mejores).

Desde luego esperaba algo más, sobre todo algo diferente. Bien es cierto que el Edge es diferente, pero el precio del S6 ya es suficientemente alto como para meternos en los 100€ más que cuesta el Edge. La curvatura de la pantalla no tiene un aporte de peso en el conjunto, añade tres funcionalidades tampoco demasiado pensadas, podríamos decir que mola y ya, pero ni es lo suficientemente útil, ni aporta una mejora que justifique su sobreprecio. Además por muy curva que sea, el diseño es el mismo, cambiado la pantalla, pero lo mismo. 

Creo que Samsung podría hacerlo mucho mejor pero tendría que ser más valiente, más rompedora. Tendría que volver a ser la Samsung que diseño el S2 o el S3 que rompió los moldes.  Y vosotros qué pensáis ¿os parece sorprendente el diseño del S6? 

Saludetes



Empezando cosas nuevas

Buenas a todos

Hace mucho que no publico nada por aquí, tengo que deciros que últimamente estoy haciendo muchas cosas, pero poco escribir. Estoy aprendiendo más Linux de lo que sabia, me compre un servidor HP N54L con el que estoy muy contento, (consume poquito y para almacenamiento que era para lo que realmente lo quiero me va de sobra) y abarcando algunos temas personales que tenia "aparcados" y me están ocupando bastante tiempo, dinero y dolores de cabeza.

También he estado experimentado la "experiencia Windows 10" y relamente me ha gustado y me gusta mucho. Me parece más lógico y usable para un equipo de escritorio de lo que es Windows 8 (aunque este funciona realmente bien).

Pero afortunadamente, las cosas se acaban y salen hacia adelante. Estoy comenzando un nuevo proyecto, he comenzado a colaborar como redactor de noticias para una web de tecnología predicneitor.com a la que os invito a todos que leáis y opinéis. El proyecto esta empezando y la web aun tiene pocas visitas, poco a poco vamos llenándola de contenido, pero es un tema bastante laborioso.

De todas formas, el blog seguirá funcionado y seguiré publicando cositas, tanto los artículos que no tengan cabida en la web, como los que si la tengan, para que podáis seguir leyendo todas mis publicaciones en un mismo sitio (no quiero volveros locos).

Espero que tengais un buen día.
Muchas gracias por leerme.
Saludetes a todos

P.D. Podéis seguirme en @Jberron, Google+ y LinkedIn



martes, 26 de agosto de 2014

Embeber una librería dentro de un ejecutable en .NET

Buenas a to@s

Hoy voy a contaros un recurso que he utilizado alguna vez para evitarme problemas derivados de redistribuir librerías. En momentos es necesario que un programa sea manejable y a poder ser indivisible, para que no se produzcan problemas derivados de la falta de algunas librerías que este utilice. Algunos leguajes de programación como Delphi solucionaban estos problemas muy bien con su característica RunOnce, por eso los programas de Delphi pesaban 2 megas cuando el mismo código en .Net ocupa poco más de 20 Kb. Dejando a Delphi de un lado, el tener la fiabilidad de que tu programa va a funcionar siempre de manera correcta y que nunca le va a faltar una librería (y ademas estas siempre van a ser la versión correcta), es algo que nos da mucha tranquilidad a la hora de redistribuirlo. 

En .Net existe una caracteriza por la que podemos integrar cualquier fichero en nuestro software. Simplemente seleccionamos el fichero, ensamblado, documento… de nuestro proyecto que queramos, vamos a propiedades y en la propiedad “Acción de compilación” seleccionamos “Recurso Incrustado”. Una vez hecho esto ya podemos llamar al cualquier fichero que hayamos incrustado en nuestra aplicación desde dentro sin miedo a que nos dé un error. Para acceder a estos podremos encontrarlos dentro del espacio de nombres de nuestro programa por ejemplo MiPrograma1.imagen.png.

Hasta aquí todo perfecto, podemos incrustar cualquier cosa, pero si probamos a hacerlo con una librería obtendremos un error en tiempo de ejecución de que no encuentra la librería. Para solucionar este problema debemos insertar una línea en el Main de nuestra aplicación y crear un nuevo método en el fichero program de nuestra aplicación para resolver las librerías gracias a los métodos de reflexión.

Dentro de nuestro main debemos escribir una línea similar a esta.
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolverComponentes);

Nos suscribimos al método que se encarga de resolver las referencias y creamos un nuevo manejado que invoque la función que vamos a crear para resolver nuestras referencias. De esta forma lo que el programa va hacer es lo siguiente, primero intenta resolver las librerías por sí mismo y sino la encuentra ira a la función ResolverComponentes que hemos creado.

La función ResolverComponentes devolverá un parámetro tipo System.Reflection.Assembly debe tener dos parámetros de entrada, un object y un ResolveEventArgs que será del que obtendremos el nombre de la librería que debemos devolver.

Esta sería una posible definición:

static System.Reflection.Assembly ResolverComponentes(object sender, ResolveEventArgs args)

Para saber cuál es la librería que necesitamos, podemos hacerlo mediante la propiedad name del segundo parámetro, en este caso args.name. Esto es muy útil si tenemos que cargar varias librerías.

Por ultimo debemos devolver la librería cargada, eso lo hacemos mediante el método load del constructor de System.Reflection.Assembly es decir System.Reflection.Assembly.Load(). Posiblemente este método no os aparezca, dado que solo existe en el constructor.

Al revisarlo os daréis cuenta de que no existe ninguna definición en la que podamos pasarle la ruta donde está la librería. Tras darle unas vueltas lo que me pareció más sencillo fue enviar un array de bytes con la librería contenida en él. Para eso primero nos definimos un System.IO.Stream que contendrá el Stream de nuestra librería. Podemos hacerlo de la siguiente forma:

System.IO.Stream _streamDeLibreria;
_streamDeLibreria = _libreriaResolver.GetManifestResourceStream("MiPrograma.Librerias.LibreriaEmbebida.dll");

Una vez definido el Stream ya solo tenemos que leer todos los bytes y devolverla en el objeto System.IO.Stream:

byte[] _arrayDeLibreria = new byte[_streamDeLibreria.Length];
_streamDeLibreria.Read(_arrayDeLibreria, 0, _arrayDeLibreria.Length);
System.Reflection.Assembly _libreria_resuelta = System.Reflection.Assembly.Load(_arrayDeLibreria);

Por último solo quedaría devolver la biblioteca:

return _libreria_resuelta;


Como podéis ver el método no es muy complicado, si un poco enrevesado pero muy útil.

Si por ejemplo necesitáis hacer esto con varias bibliotecas podéis hacer un if, swich o un select case en el que condicionáis con el nombre, por ejemplo algo así:

if (args.Name == "MiLibreria.Libreria, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1b06a8ecf2258a87")
            
Si vais a realizar esto con muchas librerías, podéis definiros una variable System.Reflection.Assembly por cada librería, cargarlas en las diferentes variables con un método como el anterior y el al función ResolverComponentes solamente debemos hacer un return de la variable previamente cargada con la librería.


Aquí os dejo el método completo para que podáis modificarlo y probarlo:

static System.Reflection.Assembly ResolverComponentes(object sender, ResolveEventArgs args)
{

System.Reflection.Assembly _libreriaResolver = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream _streamDeLibreria;

if (args.Name == "MiLibreria.Libreria, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1b06a8ecf2258a87")
{
_streamDeLibreria = _libreriaResolver.GetManifestResourceStream("MiPrograma.Librerias.LibreriaEmbebida.dll");
}
else
{
_streamDeLibreria = __libreriaResolver.GetManifestResourceStream("MiPrograma.Librerias.LibreriaEmbebida2.dll");           
}

           
byte[] _arrayDeLibreria = new byte[_streamDeLibreria.Length];
_streamDeLibreria.Read(_arrayDeLibreria, 0, _arrayDeLibreria.Length);
System.Reflection.Assembly _libreria_resuelta = System.Reflection.Assembly.Load(_arrayDeLibreria);

return _libreria_resuelta;

}


Si alguien lo necesita y lo pide lo puedo “traducir” a VB si fuera necesario, aunque creo que se entiende bastante bien. 

De la misma manera si lo "traducís" y queréis que lo publique, no hay ningún problema, poneros en contacto conmigo y lo vemos. Si alguien realiza el mismo código, lo mejora o lo modifica y lo publica en su blog, puedo poneros un enlace desde el articulo a vuestra versión.


Espero la lectura haya sido amena e interesante y sobre todo que sirva para algo.
Muy importante, si decides comentar o republicar parte de este articulo porque te ha sido útil, por favor cita la fuente y el autor del mismo (vamos cítame) y pon un enlace al artículo de mi blog

Muchas gracias por leerme.
Saludetes a todos

P.D. Podéis seguirme en @Jberron, Google+ y LinkedIn





miércoles, 30 de julio de 2014

Opera Max conclusiones de uso

Buenas a tod@s

Hoy no voy a hablarlos de un programa, ni os voy a hacer un tutorial, únicamente voy a exponer mis conclusiones al utilizarlo. La victima …. Opera MAX.

 

¿Qué es Opera Max?

 

Opera Max para los que no lo conozcáis es una utilidad creada por Opera (si Opera el de nos navegadores no el de las canciones). Esta utilidad permite comprimir todo el tráfico que sale de nuestro teléfono a través de nuestra línea móvil ahorrándonos preciados megas para que podamos disfrutar de ellos.

El proyecto pintaba muy bien y yo me apunte como tester en cuanto pude. Tuve que esperar una larga lista de espera y finalmente obtuve el preciado programa.

 

Nada más iniciarlo hubo una cosa que no me gusto, y es que para funcionar Opera Max necesita establecer una conexión VPN con el servidor de Opera para enviar el tráfico a través de la red y ahorrarnos esos megas.

 

 

Las Razones

 

Una vez probado y reprobado por mi parte puedo decir sin miedo a equivocarme que no es tan bueno como lo pintan y sobre todo que no interesa.

 

La primera razón: el consumo de batería

Tener que establecer una conexión VPN todo el tiempo consume más batería que si no tenemos que establecer. Esta conexión consume mucha batería al menos en mi caso la vida de mi teléfono se recortó en aproximadamente un 30% (siendo bueno). Normalmente llego a casa con un 30% y con opera Max funcionado todo el día, no llego a casa con el encendido. Mi S4 quedo sin batería en torno a las 20:00 y normalmente sobre las 22:00 que es cuando llego a casa tengo un 30%.

 

La segunda razón: ahorro de megas y pedida de velocidad

Tras muchas pruebas y muchos intentos, con el uso normal que le doy a mi teléfono Opera Max consigue ahorrar un 5% de mis megas con suerte.

Además existen ciertas aplicaciones que con Opera Max funcionando, al reducir la velocidad no funcionan correctamente (Viber por ejemplo no va fina). Para mi este ahorro no me parece suficiente en comparación con la pedida de velocidad.

 

 

 

 

En conclusión

 

Opera Max es interesante y reduce el tráfico, sobre todo de la navegación web pero por ejemplo, ver un video de YouTube, o enviar un mensaje por WhatsApp va a consumir lo mismo.

Para el uso que yo le doy a mi teléfono, no obtengo el beneficio suficiente en ahorro de megas en comparación con el gasto de batería ocasionado.

 

Además y por otra parte, tenemos otra razón que a los más desconfiados puede preocupar. Todo nuestro tráfico pasa por los servidores de Opera. Antes únicamente pasaban por los de nuestro proveedor de internet móvil, pero en este caso introducimos un nuevo intermediario, que aunque asegura no hacer nada con nuestros datos… fiarse es siempre un dilema.

 

Espero la lectura haya sido amena e interesante

Muy importante, si decides comentar o republicar parte de este articulo porque te ha sido útil, por favor cita la fuente y el autor del mismo (vamos cítame) y pon un enlace al artículo de mi blog

 

Muchas gracias por leerme.

Saludetes a todos

 

P.D. Podéis seguirme en @Jberron, Google+ y LinkedIn

 

about.me/jberron