sábado, 22 de febrero de 2014

LG Uptimus 7 (E900) - Obsolescencia programada


Hola,

Hoy vengo a contar una triste historia que cada vez sufrimos más a menudo. Hace más de 20 años trabajé en una empresa que se dedicaba a comercializar software de diseño electrónico, entre otras cosas. Ya hace más de 20 años existía una aplicación donde cargabas el diseño del circuito y le podías poner el tiempo de vida del circuito. Esta aplicación cambiaba los valores de los componentes para que aproximadamente a la fecha que le habías especificado el circuito fallase. Con esto conseguías que quien te había comprado el circuito te tuviese que llamar por avería y por tanto seguir ganando dinero. Suena mezquino, pero es una práctica habitual en todo lo que nos rodea. La mayoría de los dispositivos que manejamos tienen los días de uso programado. Antes eran componentes electrónicos y ahora, al ser todo digital y con poca circuitería, se ponen contadores para que al llegar a cierto número de usos se averíe de forma automática (deje de funcionar). Pues esto me ha pasado con la WIFI de mi LG E900. ¿Cómo he llegado a esa conclusión?, pues por descarte. Os lo explico a continuación:

Un día desactivé la WIFI y al volver a conectarla ya no respondía. No le había dado ningún golpe y siempre lo he tratado con delicadeza. Lo primero que se me pasó por la cabeza es que se había roto, pero me extrañó. Por curiosidad miré por internet y había bastantes entradas con problemas similares. Es cuando se me ocurrió la posibilidad de que fuese por obsolescencia programada. La primera pista es que el teléfono tiene más de 2 años, con lo que ya no está en garantía y por tanto el fabricante no te lo va a reparar gratuitamente. La segunda pista es que algunos usuarios habían cortado la placa donde se encuentra la WIFI para que el teléfono les arrancase. Esto me hizo intentar demostrar que mi teléfono había llegado al número de usos predeterminado:
Pruebas realizadas:

1.- Lo primero fue hacer un Hard-Reset al teléfono para descartar alguna aplicación reciente instalada. Nada.

2.- Si es algo que esté en el registro de Windows Phone, o en algún fichero del sistema operativo, con flashear el teléfono se solucionaría. Bingo!!. Al arrancar el WIFI empezó a responder, pero al desactivarlo y volverlo a activar se estropeaba.

3.- Realicé varios flasheos de ROMs (alrededor de 10 con diferentes ROMs)y empecé a sacar un patrón. Si tenías el WIFI activado y flasheabas el teléfono el WIFI funcionaba hasta que lo volvías a desactivar.

4.- Si actualizabas a la última ROM del 27 de diciembre de 2011, en teoría te actualizaba los drivers de la WIFI. Efectivamente la WIFI y el teléfono en general funciona genial con esta ROM. Actualizas a WP 7.8 y sigue funcionando, aunque el teléfono se reinicie en bastantes ocasiones hasta que se actualiza. Todo esto sin desactivar la Wifi en ningún momento. Al desactivar y volver a activar la Wifi se volvía a estropear.

5.- Después de volver a flashear el teléfono con la última ROM OPEN del 27 de diciembre y actualizar a WP 7.8, la WIFI funciona perfectamente. Llevo una semana sin problemas, pero eso sí, sin apagar la WIFI en ningún momento.

CONCLUSIÓN:

- No es una avería puesto que la WIFI está funcionando sin problemas.
- El proceso que sigues cuando desactivas la WIFI y la vuelves a activar es similar al de reiniciar el teléfono, con lo que no es un mal funcionamiento del chip del Wifi.
- Activar y desactivar el Wifi es un proceso software y no hardware, es decir, es un proceso lógico y no físico.
- Si fuese una avería hardware no se solucionaría flasheando el teléfono.
- No es ninguna aplicación porque recién flasheado también falla si desactivas y vuelves a activar el Wifi.

La única posibilidad que queda es que cuando desactivas el Wifi se actualiza algún registro interno del teléfono y ya no permite que lo volvamos a activar.

Queda descartada la programación de la obsolescencia en el chip del WIFI porque si el contador hubiese llegado a su límite, no nos permitiría seguir operando después de flashear.

Lo único que nos queda es que en LG hayan programado a nivel de BIOS del teléfono la vida del mismo. Ahora solo me queda esperar a que otro contador llegue a su límite y un día ya no arranque más, lo que supondrá que me tocará cambiar de teléfono y por supuesto, de marca (aunque eso no creo que me salve de volver a sufrirlo).


Espero que esto pueda paliar el problema para algunos sufridores de problemas WIFI en este teléfono. Es una pena porque me ha funcionado genial hasta ahora y no tenía ninguna queja. Por cierto, si alguno se decide a flashear el teléfono para recuperar el WIFI, solo decir que esto solo lo he probado en mi terminal, que es versión 1.0 de hardware. Es posible que otro hardware tenga otros problemas.

 NO DESACTIVES NUNCA EL WIFI para no tener problemas ;-)

http://www.rtve.es/alacarta/videos/el-documental/documental-comprar-tirar-comprar/1382261/

martes, 9 de julio de 2013

Resincronizar todos los snapmirrors rotos (DR Test II) con PowerShell

Esta es la segunda parte del test de DR. Una vez parados todos los snapmirror para hacer las pruebas de contingencia, hay que arrancar todas las relaciones paradas. En este script lo que se hace es:

1.- Para los servicios CIFS. Muchas veces el resync falla porque hay ficheros abiertos en los volúmenes.
2.- Busca los snapmirror que no se encuentren en la lista negra (te pueden interesar excepciones)
3.- Verifica que está en estado 'broken-off' e ignora el resto.
4.- Resyncroniza las relaciones de snapmirror que cumplen las condiciones.
5.- Arranca nuevamente los servicio CIFS.

¡OJO! si el filer de destino tiene algún volumen en producción, al parar CIFS se pueden ver afectado los ficheros abiertos que no tienen nada que ver con el test de DR. Hay que tener esto en cuenta antes de ejecutarlo en un entorno de trabajo.

# Inicio del script

$allNetAPP = @("NetappDR01", "NetappDR02" ) # <--- controladores_de_dominio_o_direccion_IP
@("vol0", "vol_test") # <--- excluidos_del_script
########################################################################################################################
$password = "76492d1116743f0423413b16050a5345MgB8AGgAbwA2AEwAWgBBAGIAcABQADEALwAyADYAbABuAEgAOQBGADYAcwBqAFEAPQA9AHwAOQBmADUANwAyADkAOABmAGEANgA5AGYAZAA1ADcANAA5ADkANQAzADEAMABkAGYANwA0AGEAYwBkADIAMAA5AGUAYQA2ADMANgBiAGYAYwA0AGIANwA0ADkAZAA3ADgANgA4AGUAZABiADIAYwBhADAAZgBiAGEAMwA5AGMAZQA="
$key = "155 43 100 117 110 219 64 220 246 113 218 12 7 233 143 111 25 241 206 16 209 132 60 235 108 215 245 140 103 215 23 210"
$passwordSecure = ConvertTo-SecureString -String $password -Key ([Byte[]]$key.Split(" "))
$cred = New-Object system.Management.Automation.PSCredential("root", $passwordSecure)
########################################################################################################################

Import-module DataONTAP

Write-Host "#########################################################################"
Write-Host "#########################################################################"
Write-Host "## ##"
Write-Host "## Este proceso va a resincronizar los snapmirrors rotos. ##"
Write-Host "## ##"
Write-Host "## Pulsar + C para abortar el script ##"
Write-Host "## ##"
Write-Host "#########################################################################"
Write-Host "#########################################################################"


foreach ($thisNetAPP in $allNetAPP)

{
Connect-NaController $thisNetAPP -Credential $cred |Out-null
$AllSnapMirrors = Get-NaSnapMirror


#Parando los servicios CIFS antes de resincronizar
Write-Host "Parando CIFS ......."
Invoke-NaSsh -Name $thisNetapp -Command 'cifs terminate -t 0' -Credential $Cred
Write-Host "Netapp: CIFS parado en: " $thisNetapp


foreach ($ThisSnapMirror in $AllSnapMirrors)
{
$Destination = $ThisSnapMirror.destination.split(":")
$State = $ThisSnapMirror.state
#$DestinationFiler = $Destination[0]
$DestinationVolName = $Destination[1]
#Si el volumen no está en la lista negra entonces...
if (($volUnused -NotContains $DetinationVolName) -and ($State -eq "broken-off"))
{
Write-Host "Estado actual ....... " $State
Write-Host "Resincronizando .... " $DestinationVolName
Invoke-NaSnapmirrorResync $DestinationVolName -Confirm:$false
Start-Sleep -s 1
}
}
}

Invoke-NaSsh -Name $thisNetapp -Command 'cifs restart' -Credential $Cred
Write-Host "Netapp: CIFS arrancado en : " $thisNetapp


Write-Host "#####################################################"
Write-Host "## ##"
Write-Host "## Los snapmirrors ya se han resincronizado ##"
Write-Host "## ##"
Write-Host "#####################################################"

$SnapMirror = Get-NaSnapmirror
$SnapMirror | format-table |Out-Default

Start-Sleep -s 10

#Fin del script

Parar todos los snapmirrors en destino (DR test) con PowerShell

Este scritp lo utilizo para parar todos los snapmirror de destino y ponerlos en modo lectura/escritura en las pruebas de desastre. Básicamente lo que hace es un listado de los volúmenes que tienen relación de snapmirror creada y esta información la utiliza para ponerlos todos primero en 'quiesce' y luego hacer el 'break'. Se pueden añadir los volúmenes que no queramos romper en una variable de cadena (muy práctico en los primeros tests). Sé que se puede mejorar y se admiten sugerencias y modificaciones.
Observaréis que he puesto contraseña ofuscada con el script que publiqué recientemente. Espero que lo encontréis práctico. Para generar vuestro própio script de contraseña ofuscada os tocará leer el post anterios ;-)

#Inicio del script

$allNetAPP = @("NetappDR01", "NetappDR02" ) # <--- br="" controlador="" del="" el="" introducir="" ip="" nombre="" o=""> $volUnused = @("vol0", "vol_test") # <--- br="" cortar="" los="" menes="" no="" poner="" que="" queramos="" vol=""> ########################################################################################################################
$password = "76492d1116743f0423413b16050a5345MgB8AGgAbwA2AEwAWgBBAGIAcABQADEALwAyADYAbABuAEgAOQBGADYAcwBqAFEAPQA9AHwAOQBmADUANwAyADkAOABmAGEANgA5AGYAZAA1ADcANAA5ADkANQAzADEAMABkAGYANwA0AGEAYwBkADIAMAA5AGUAYQA2ADMANgBiAGYAYwA0AGIANwA0ADkAZAA3ADgANgA4AGUAZABiADIAYwBhADAAZgBiAGEAMwA5AGMAZQA="
$key = "155 43 100 117 110 219 64 220 246 113 218 12 7 233 143 111 25 241 206 16 209 132 60 235 108 215 245 140 103 215 23 210"
$passwordSecure = ConvertTo-SecureString -String $password -Key ([Byte[]]$key.Split(" "))
$cred = New-Object system.Management.Automation.PSCredential("root", $passwordSecure)
########################################################################################################################
Import-module DataONTAP

Write-Host "#########################################################################"
Write-Host "#########################################################################"
Write-Host "##                                                                                                                   ##"
Write-Host "## Este proceso va a parar todas las relaciones de los SnapMirrors ##"
Write-Host "##                                                                                                                  ##"
Write-Host "## Pulsa + C para abortar la ejecución ##"
Write-Host "##                                                                                                                  ##"
Write-Host "#########################################################################"
Write-Host "#########################################################################"
Start-Sleep -s 10

foreach ($thisNetAPP in $allNetAPP)

{
Connect-NaController $thisNetAPP -Credential $cred |Out-null
$AllSnapMirrors = Get-NaSnapMirror

foreach ($ThisSnapMirror in $AllSnapMirrors)
{
$Destination = $ThisSnapMirror.destination.split(":")
$DestinationVolName = $Destination[1]
# Si el volumen no está en la lista negra...
if ($volUnused -NotContains $DetinationVolName)
{
Write-Host "Stopping .... " $DestinationVolName
Invoke-NaSnapmirrorQuiesce $DestinationVolName -Confirm:$false
Invoke-NaSnapmirrorBreak $DestinationVolName -Confirm:$false
Start-Sleep -s 1
}
}
}

Write-Host "###################################################"
Write-Host "## ##"
Write-Host "## Todos los SnapMirrors se han parado ##"
Write-Host "## ##"
Write-Host "###################################################"

$SnapMirror = Get-NaSnapmirror
$SnapMirror | format-table |Out-Default

Start-Sleep -s 20

#Final del script

Crear credenciales ofuscadas en un script de PowerShell

Hola,

Esto se puede considerar una segunda parte del script anterior. En este caso se van a generar unas credenciales ofuscadas, o lo que es lo mismo, unas credenciales ilegibles, pero que si controlas un poco se podría revertir el proceso para revelar el contenido (yo no soy capaz). Es muy práctico si tienes que dejar scripts para que lo ejecuten otros y no quieres que puedan editar el código y ver las credenciales en texto plano. Por ejemplo, para que un departamento de helpdesk pueda ver cierta información que le dejemos disponible en el powershell, pero que no queremos que conozcan las credenciales del usuario con derechos de admin.

Vamos al lío. El script lleva dos partes. La primera genera el código que debemos pegar en en el script y la segunda es un ejemplo que he creado con unas contraseña super segura para ver si alguien es capaz de sacarla

GENERAR EL CÓDIGO
------------------------
Al ejecutar el script te preguntará el usuario y la contraseña. Al introducirlos te genera un fichero llamado OFUSCADO.PS1 y te abre el ISE con el código para hacer directamente el copy/paste sobre el script.

# Ubicación donde se guardará el fichero con los datos ofuscados
$path = 'c:\temp\Ofuscado.ps1'
New-Item -ItemType File $path -Force -ErrorAction SilentlyContinue
$user = Read-Host 'Escribe el nombre de usuario'
$pwd = Read-Host 'Escribe la contraseña' -AsSecureString
$key = 1..32 | ForEach-Object { Get-Random -Maximum 256 }
$pwdencrypted = $pwd | ConvertFrom-SecureString -Key $key

$private:ofs = ' ' ('$password = "{0}"' -f $pwdencrypted) | Out-File $path
('$key = "{0}"' -f "$key") | Out-File $path -Append

'$passwordSecure = ConvertTo-SecureString -String $password -Key ([Byte[]]$key.Split(" "))' |
Out-File $path -Append
('$cred = New-Object system.Management.Automation.PSCredential("{0}", $passwordSecure)' -f $user) |
Out-File $path -Append
'$cred' | Out-File $path -Append

ise $path

EJEMPLO DE CÓDIGO -------------------------
En este ejemplo simplemente se conecta a un Filer. Es simplemente para ver dónde se podría pegar el código generado anteriormente y qué aspecto tendría.

$Controller="MiFiler001.lab.local"
########################################################################################################################
$password = "76492d1116743f0423413b16050a5345MgB8AEwAKwA4AGwATQBXAC8AOQBZAGEAYwBjAG4AZgBJAGsATwB0AGYAOQBFAFEAPQA9AHwAZAA5AGQANwA4ADQAZAAzADQAYgA3AGUANwA4AGMANQA5ADAAZQA3AGYAMQBhADkAZgBmADUAZgA1AGQAOABmAGMAMQBkADEAYQAwAGMANAA0ADYAMQBmADAAYgAyADkAZABmADkANgBkAGMAZABmAGEANQA2AGUAOQA3ADIAYQA=" $key = "105 145 37 32 163 64 245 82 109 74 48 173 214 181 126 204 158 112 230 15 57 124 104 138 207 57 162 140 7 171 186 223" $passwordSecure = ConvertTo-SecureString -String $password -Key ([Byte[]]$key.Split(" ")) $cred = New-Object system.Management.Automation.PSCredential("root", $passwordSecure) ########################################################################################################################
Import-module DataONTAP
Connect-NaController $Controller -Credential $cred | Out-Null

En el ejemplo se puede ver que la contraseña es completamente ilegible y que el usuario que he empleado para generarlo ha sido 'root'. Por cierto, si alguien consigue descubrir la contraseña que escriba un post indicando los pasos seguidos para conseguirlo. Como pista os diré que es una palabra anglosajona que significa 'contraseña', seguida de un número binario de una sola cifra y que no es '0'

Crear credenciales encriptada en un fichero con PowerShell

Hola,

Hoy voy a empezar a publicar los scripts basados en PowerShell para Netapp, que también publico en Netapperos.com, web dedicada a los locos de Netapp. 

Lo primero aclarar que no es lo mismo una credencial ofuscada que una credencial encriptada. Si se quieren ejecutar los scripts siempre con la misma máquina y siempre con el mismo usuario, la forma más segura es almacenar las credenciales en un fichero encriptado. Si se va a ejecutar el script desde varias máquinas y con varios usuarios, la única forma que se me ocurre es ofuscar las credenciales, o lo que es lo mismo, darles un aspecto de encriptado, pero en realidad se podría revertir y llegar a sacar la información. Este último caso lo veremos en otro post.

Este es el caso primero, el de crear un fichero de texto encriptado para guardar las credenciales y que éstas sean seguras. Es un proceso muy sencillo, pero tiene como limitación que utiliza nuestros IDs para hacer la encriptación de la contraseña. Es decir, que si lo utiliza otra persona le pedirá introducir las credenciales.

CREAR EL FICHERO DE TEXTO
-------------------------------------
Este script va a mostar una pantalla de login, donde meteremos las credenciales que queremos utilizar y automáticamente nos generará un fichero llamado CRED.TXT, donde las almacena de forma encriptada. Para que funcione es tan simple como copiar estas dos líneas de código en un nuevo PS1 y ejecutarlo.
$Credential = Get-Credential
$credential.Password | ConvertFrom-SecureString | Set-Content CRED.TXT

ASOCIAR EL FICHERO A UN SCRIPT
-------------------------------------------
Este trozo de script se pegará en nuestro PS1 para 'rescatar' las credenciales que tenemos encriptadas en CRED.TXT. Hay que fijarse que es necesario incluir el usuario asociado a las credenciales. En nuestro caso he utilizado 'root'. En fichero CRED.TXT se encuentra en el mismo path que el script, pero se podría centralizar y apuntar hacia esa ruta.
$password = Get-Content CRED.TXT | ConvertTo-SecureString
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "root",$password

Espero que os sea útil. Es una forma de poder ejecutar scritps sin tener que recordar las credenciales o tener que incluirlas en texto plano dentro del código.
Un saludo,

martes, 26 de febrero de 2013

IE 10 para Windows 7

Pues sí, finalmente Microsoft se ha dado cuenta de que empezaban a tener éxito los proyectos de portar IE 10 para Windows 7 y ha decidido liberar la versión de su último navegador. También parece un poco estratégico ante el aumento de la competecia. Sea como fuere, se puede descargar desde:

http://windows.microsoft.com/es-ES/internet-explorer/download-ie

Si lo que buscas es la versión en Inglés americano puede ir a:

http://windows.microsoft.com/en-US/internet-explorer/download-ie

Por supuesto yo ya lo tengo instalado y lo estoy utilizando para escribir estas líneas. De momento no tengo nada que comentar. No he tenido tiempo de disfrutarlo o sufrirlo ;-)

Un saludo,

Añadir aplicaciones a "Enviar a" en Win7/8


Hoy he tenido un problema con algo que parece muy sencillo, pero que me ha costado un rato encontrar. ¿Cómo meter más aplicaciones al menú "Enviar a" en Windows 7?. En el pasado lo he utilizado mucho, pero hacía tiempo que no lo necesitaba y lo tenía olvidado. La teoría es sencilla, simplemente hay que dejar el acceso directo de la aplicación en la carpeta "SenTo". El problema es encontrarla de forma sencilla.

Bueno esta es la solución. Bien desde la ventana de búsqueda de Windows, bien con con 'Ejecutar', ponemos:

Shell:sendto

Estas son las capturas:

1.- ejecutamos 


2.- Añadimos el acceso directo.



Es sencillo, ¿no?. Bueno, espero que os sirva igual que me está sirviendo a mi ;-)