Fix the Windows Phone Recovery Tool error 0x80091007

e0ed68f3-d9ae-4d25-8409-c2cc80248344

The fix process:

  1. Download this pack of files:聽http://1drv.ms/1LKvCnq
  2. Run EVERY installation inside EVERY folder EXCEPT the WPRTInstaller.msi from the Packages folder.
  3. Run the oficial Windows Phone Recovery Tool installation.
    1. If it works, run the program and follow the steps.
    2. If it not works, run the WPRTInstaller.
  4. Finally, if nothing works, run the WindowsPhoneRecoveryTool.exe inside the Windows Phone Recovery Tool folder as administrator. If a message is shown, cr茅ate the folder in the place it says. (commonly, C:\Program Files\Microsoft\Care Suite).

Where did this files come from?

I searched where the official installation puts the files needed to install, so, thats why you need to run EVERY installation inside EVERY folder, except the WPRTInstaller.msi.

It worked for me, after so many suggestions that did not work.

If it was useful, give me a comment 馃槈

Generaci贸n autom谩tica de getters, setters y constructores en C#

Una de las caracter铆sticas que m谩s me gustan de Netbeans es su posibilidad de generar c贸digo repetitivo autom谩ticamente utilizando funciones de generaci贸n de c贸digo automatizadas presionando alt+insertar en el cuerpo de la clase, tales como la generaci贸n de los Inspectores (Getters), Modificadores (Setters) y Constructores, que ahorran tiempo considerablemente y m谩s cuando queremos solo completar la definici贸n de una clase de forma elegante.

En C#, sabemos que los getters y setters se pueden declarar r谩pidamente en una propiedad (es decir, atributo p煤blico cuya asignaci贸n o lectura no requerir谩 de un m茅todo particular) usando cualquiera de estos m茅todos:

[csharp]
//Declaraci贸n abreviada
public tipo nombre{get; set;}

//Declaraci贸n con miembro privado
private tipo micampo;

public tipo acceso_micampo
{
get{ return micampo; }
set{ micampo = value; }
}
[/csharp]

Durante mucho tiempo, pens茅 que Visual Studio no permit铆a acelerar esta tarea, ya que aunque es bastante corta la manera de declarar dichos m茅todos, siempre se agradece no tener que estar copiando y pegando algo que se mantendr谩 constante para todas las propiedades de una clase. Ademas, a la hora de crear diversos constructores, hab铆a que escribirlos a mano, lo cual quita del mismo modo, bastante tiempo.

Para simplificar la generaci贸n de c贸digo de las propiedades, utilizaremos la funci贸n Insertar Fragmento de C贸digo, haciendo clic derecho sobre cualquier parte dentro de una clase y seleccionando C# y luego prop, propg o propfull.

Notar que basta con escribir estas instrucciones en nuestro c贸digo y seguido a ello, presionar tab, lo que llamar谩 a la autocompletaci贸n de c贸digo en plantilla.

[csharp]
//Escribiendo prop + TAB
public TYPE Type { get; set; }

//Escribiendo propg + TAB
public int I { get; private set; }

//Escribiendo propfull + TAB
private int myVar;

public int MyProperty
{
get { return myVar; }
set { myVar = value; }
}
[/csharp]

Para la generaci贸n de un Constructor, desgraciadamente, Visual Studio no incluye un generador o plantilla que pueda servirnos, pero si utilizamos un plugin como ReSharper (de pago, a no ser que seas un MVP), su generaci贸n es muy simple, basta con ir al men煤 de ReSharper, seleccionar Edit y finalmente Generate Code.

Se abrir谩 un peque帽o men煤 contextual como el de Netbeans en el cual seleccionamos Constructor y luego, un asistente nos guiar谩 en el resto del proceso.

Llenar de manera as铆ncrona un combobox (o DropDownList en Razor) en ASP.NET MVC4 a partir de otro combobox

Es com煤n que cualquier formulario que utilicemos en un sitio web llene los combos de selectores de datos a partir de informaci贸n llenada previamente.

Para este ejemplo, agradezco la ayuda de Camilo Ramirez, quien tiene vasta experiencia en MVC4.

Por ejemplo, al seleccionar un pa铆s en un combobox (o select o DropDownList, etc茅tera), lo esperable es que otro combobox llene las ciudades a partir del pa铆s seleccionado en el primer combobox.

En MVC4 tenemos dos formas de hacerlo; la forma sincron铆a es enviar el valor del primer combo a un controlador, que llene una segunda lista y se env铆e a la vista dentro del modelo para desplegar los datos. El problema de esta forma, es que recargaremos la p谩gina completa, por lo que si no enviamos los datos ya llenados por el usuario, deberemos generar las rutinas para que los valores de todos los campos se llenen de modo autom谩tico.

La segunda forma es hacer que el valor sea env铆ado a una acci贸n del controlador de manera as铆ncrona, y los valores sean devueltos utilizando AJAX. Veamos como se hace:

En la Vista, consideremos el siguiente bloque que genera un combo primera-lista a partir de la variable primeraLista:

[html]
@{
var primeraLista = new List<object> {new {nombre = "primero", id = 1}, new {nombre = "segundo", id = 2}, new {nombre = "tercero", id = 3}};
}

@Html.DropDownList("primera-lista", new SelectList(primeraLista, "id", "nombre"), new { @id = "primera-lista" })
<select id="segunda-lista"></select>
[/html]

El siguiente c贸digo javascript se encarga de “escuchar” cuando el valor de la lista primera-lista sea cambiado, lo que har谩 que el valor sea enviado utilizando AJAX a una acci贸n del controlador que alterar谩 el c贸digo de la p谩gina web de manera as铆ncrona con los valores retornados:

[javascript]
<script src="~/Scripts/jquery-1.8.2.js"></script>
<script type="text/javascript">
$(document).on("ready", function() {
$("#primera-lista").change(function() {
idSelected = $(this).val();
$.ajax({
url: ‘@Url.Action("GetSecondValues")’+"?id=" + idSelected,
type: "POST",
success: function (data) {
var options = "";
$.each(data, function(index, value) {
options += ‘<option value="’ + value.id + ‘">’ + value.nombre + ‘</option>';
});
$("#segunda-lista").html(options);
},
error:function() {
alert("error…");
}
});
});
});
</script>
[/javascript]

En el controlador generamos una acci贸n con ActionResult que reciba como retorno un objeto JSON con la lista de elementos a cargar dependiendo del valor enviado desde el combo primera-lista. Notar que la lista se crea en este momento, por lo que podemos invocar un webservice o rutina a una base de datos para llenar esta lista:

[csharp]
public ActionResult GetSecondValues(int id)
{
List<object> devolver;
switch (id)
{
case 1:
devolver = new List<object>
{
new {nombre = "hola1.1", id = 1},
new {nombre = "hola1.2", id = 2},
new {nombre = "hola1.3", id = 3}
};
break;
case 2:
devolver = new List<object>
{
new {nombre = "hola2.1", id = 1},
new {nombre = "hola2.2", id = 2},
new {nombre = "hola3.3", id = 3}
};
break;
case 3:
devolver = new List<object>
{
new {nombre = "hola3.1", id = 1},
new {nombre = "hola3.2", id = 2},
new {nombre = "hola3.3", id = 3}
};
break;
default:
devolver = new List<object>
{
new {nombre = "default1", id = 1},
new {nombre = "default2", id = 2},
new {nombre = "default3", id = 3}
};
break;
}
return Json(devolver);
}
[/csharp]

Insertar la caja de comentarios de Facebook en WordPress

Una integraci贸n simple y siempre muy solicitada es la de la caja de comentarios de Facebook en los sitios WordPress, que es el CMS m谩s utilizado a nivel mundial dada su simplicidad de uso y mantenci贸n.

Para lograr esta integraci贸n, no requerimos de una Application ID de Facebook, ya que, al igual que los botones Like, funciona “en caliente”, sin requerir tokens ni nada.

Continue reading

Get the logged in Windows User in ASP.NET C# application

We’ll not discover another Americas, but this is easy:

With the Razor Engine, put this on View:

[csharp]
@{
string luser = User.Identity.Name.Split(‘\\’)[1];
}

You’re logged in as @luser
[/csharp]

Or use this on Controller:

[csharp]string luser = User.Identity.Name.Split(‘\\’)[1];[/csharp]

Remember that you must use the Windows Authentication, in other cases, you’ll get an empty string.

Ofrecer Productos o Servicios de Software

En la generaci贸n de oportunidades de negocio, se debe establecer claramente que es lo que se ofrecer谩 finalmente al cliente.

Por un lado, se pueden ofrecer聽Productos, un desarrollo envasado que se vende “as is” -o “tal cual”-, que es b谩sicamente, el modo m谩s com煤n de vender software a nivel empresarial. Videojuegos, Sistemas Operativos o Suites de Ofim谩tica se venden en esta modalidad y su gran ventaja es la de desarrollar una vez, y luego solo buscar a quienes venderles el producto, asociado a un servicio de soporte que puede incluir asesor铆a en funcionamiento o en agregar o corregir features a trav茅s de parches y actualizaciones de seguridad.

Continue reading

Uso de BD embebida en Netbeans usando Derby

Actualmente me encuentro dictando un curso de desarrollo en mi ex Universidad, y esta unidad particularmente nos trajo algunos problemas dadas ciertas configuraciones de Netbeans. Hice un videotutorial que comparto a quien pueda serle聽煤til.

Derby es la base de datos que Netbeans utiliz谩 formalmente como JavaDB, y para esto nos聽provee聽un driver de聽conexi贸n聽incluido聽por defecto en el JDK. El ejemplo muestra como habilitar el uso de Derby en caso de que no este habilitado por defecto y un ejemplo simple de como ejecutar consultas de forma聽gr谩fica聽y por medio de c贸digo.

Dividir un archivo en Linux y unirlo en Windows

Si por聽alg煤n聽motivo tenemos un archivo en Linux que pese demasiado, podemos dividirlo usando el comando Split:

[plain]

split -b 1024m "archivo.ext" "archivo_part-"

[/plain]

Esto generar谩 n partes de archivo.ext de tama帽o 1024 MB con los nombres archivo_part-aa – ab – ac – ad, etcetera.

Para unirlos en Windows usamos el siguiente comando:

[plain]

Copy /b archivo_part-aa聽+ archivo_part-ab聽archivo.ext

[/plain]

Ambos comandos vienen por defecto en ambas plataformas.

Ubuntu 12.04 Oracle JDK is NOT installed – Error Code 1

When tried to install the Oracle JDK in Ubuntu 12.04, i get this error:

[plain]
Oracle JDK 7 is NOT installed.
dpkg: error processing oracle-java7-installer (–configure):
subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
oracle-java7-installer
E: Sub-process /usr/bin/dpkg returned an error code (1)
[/plain]

To solve it, this works for me:

[plain]
sudo rm /var/lib/dpkg/info/oracle-java7-installer*
sudo apt-get purge oracle-java7-installer*
sudo rm /etc/apt/sources.list.d/*java*
sudo apt-get update
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
[/plain]

Then, u can see the Java and Java Compiler versions using:

[plain]
java -version
javac -version
[/plain]

Diccionario Espa帽ol en Kindle 3 (Keyboard) con version 3.4

Kindle 3A todos los due帽os de un Kindle 3, hace algunos meses nos聽sorprendi贸聽que Amazon聽sacara聽una nueva actualizaci贸n de software, por lo que, probablemente, todos corrimos a descargarla e instalarla.

El problema es que el diccionario espa帽ol que la聽mayor铆a聽usa desgraciadamente dejo de funcionar (si, el Larousse聽t铆pico),聽indic谩ndonos聽al marcar una palabra que el diccionario seleccionado no servia y que聽us谩ramos聽otro (que聽est谩n聽en ingles,聽as铆聽que no sirven).

Despu茅s de buscar en varios lugares, di con la聽soluci贸n,聽 que es聽b谩sicamente聽 modificar los metadatos del diccionario para que siempre considerara la聽configuraci贸n聽es-es (es decir, lenguaje espa帽ol,聽distribuci贸n聽espa帽ola) para todas las聽b煤squedas.

El resultado de este proceso lo聽pueden聽bajar aqu铆.

Para instalarlo,

1. Descomprimir el contenido en la carpeta documents del Kindle.

2. En el dispositivo, en la pantalla principal, presionar la tecla Menu, e ir a la聽opci贸n聽Settings.

3. Presionar una vez mas la tecla Menu, y luego ir a la聽opci贸n聽Changue Primary Dictionary.

4. Seleccionar Larousse.

Eliminar posiciones vac铆as de un string[] en C#

Si al utilizar un split en una cadena de texto, nos quedan elementos vac铆os, split no hace de manera inteligente la eliminaci贸n de los elementos que quedaron en blanco.

Para limpiar esos elementos, una forma bastante simple es utilizar una peque帽a cadena hecha en linq que realiza a la perfecci贸n esta funcion:

[plain]
string[] items = cadena.Split("|||".ToCharArray());
items = items.Where(x => !string.IsNullOrEmpty(x)).ToArray();
[/plain]

Redirecci贸n de Apache a la carpeta de los Usuarios sin el “~”

Es com煤n que al crear nuevos usuarios en Linux para darles acceso a un espacio web (tipicamente a trav茅s de una carpeta public_html en la carpeta de sus perfiles), es que la ruta hacia esas paginas web sean del tipo:

http://sitioweb.com/~usuario/

Ese caracter “~”, puede ser dif铆cil de encontrar en tablets y tel茅fonos y ademas, “est茅ticamente”, se ve bastante feo, as铆 que para que el acceso al espacio de los usuarios quede en la forma:

http://sitioweb.com/usuario/

Debemos editar el archivo httpd.conf ubicado com煤nmente en /etc/apache2/ y agregar el siguiente script perl.

[perl]
<perl>
opendir H, ‘/home/';
my @dir = readdir(H);
closedir H;
foreach my $u (@dir) {
next if $u =~ m/^\./;
if (-e "/home/$u/public_html")
{
push @Alias, ["/$u", "/home/$u/public_html/"];
}
}
</perl>
[/perl]

Debemos procurar tener instalado y habilitado el modulo de perl para Apache, si no lo tenemos o no estamos seguros, ejecutamos:

[plain]sudo apt-get install libapache2-mod-perl2[/plain]

Finalmente, reiniciamos el servidor Apache.

[plain]sudo service apache2 restart[/plain]