Category Archive: Informatica

Cosas sobre Linux, PC, programación y demas

Dec 24

Npgsql. Conectarse a BD PostGreSQL sin usar ODBC

Como sabrán .NET es un Framework de programación que en teoría pretende ser independiente de la plataforma y facilitar el desarrollo aunque en la practica esa portabilidad es un tanto cuanto artificial y depende del proyecto Mono para funcionar en más plataformas además de Windows, pero al menos esta estandarizado y permite crear aplicaciones multiplataforma aunque con algunas restricciones.

Npgsql es un .Net Data Provider (Proveedor de Datos) independiente de NET o Mono que permite a estos establecer conexiones a bases de datos PostGreSQL que son tan comunes. Así Npgsql es una alternativa a los ODBC para cuando no tenemos el control de estos o no nos dan los resultados esperados, y Npgsql para el desarrollador resulta muy similar en uso a ODBC.

¿Cómo utilizarlo?

Podemos descargar la ultima versión desde la página oficial y agregarlas a nuestro proyecto con facilidad copiando la libreria Npgsql.dll en el directorio de la aplicación (o en otro directorio si ha configurado Path to Private Components).

En aplicaciones web ASP.NET y Web Services se debe alojar Npgsql.dll y Mono.Security.dll en la carpeta bin de la aplicación.

Luego agregamos a nuestro sistema como referencia las .dll antes mencionadas y ya podremos usarlas en nuestro código.

Donde las usemos hay que agregar los espacios de nombres Data y Npgsql. Aquí dejo un mínimo ejemplo de la sintaxis.

using System.Data;
using Npgsql;

// Establecer la conexión a base de datos
NpgsqlConnection conn = new NpgsqlConnection("[cadena de conexion]");
// Abrir la conexion
conn.Open();
// Indicar una instrucción a la base de datos
NpgsqlCommand Command = new NpgsqlCommand("[instruccion SQL]", conn);
// Ejecutar la instrucción SQL
Command.ExecuteNonQuery();
// Cerrar la conexión
conn.Close();

Cómo pueden ver es idéntico al uso de conexiones por ODBC, pero ya no dependemos del ODBC instalado en la PC donde nuestra aplicación sea ejecutada. Prácticamente es cambiar todo donde diga ODBC por Npgsql, por ejemplo un OBDCDataReader se reemplaza por NpgsqlDataReader.

La cadena de conexión que usaremos para Npgsql es estandar. Yo la utilizo así:

Server=[IP];Port=[Puerto];Database=[DB];User Id=[Usuario];Password=[Contraseña];

En las versiones más recientes de Npgsql la codificación es siempre UNICODE por lo que el atributo encoding ha quedado obsoleto, pero en caso necesario, las versiones más antiguas si manejan encoding SQL_ASCII o UNICODE según se indique en la cadena de conexión.

Y así es como logramos conectarnos a una base de datos PostGreSQL desde Mono sin depender de ODBC.

Dec 13

JavaScript: Cerrar un popup desde la página madre

Típico, que estas programando una página web y necesitas una ventana popup para apoyar alguna función de la página principal, poner alguna advertencia o que el usuario seleccione algún dato que será pasado a la página principal… cosas comunes.

Pero esta vez me tope con un caso un poco diferente, resulta que necesitaba que fuese la página madre la que después de terminar un proceso propio cerrara al popup y… pues instrucciones para manipular a la página madre desde el popup hay muchas pero en sentido inverso no tantas. La forma más sencilla es apoyándose en una variable para poder mantener el control del popup y manipularlo de la siguiente manera usando JavaScript.

Si quieren probar un ejemplo sencillo con un par de páginas simples en su computadora bajen este ejemplo antes de continuar: DESCARGAR EJEMPLO.

Dentro del archivo, La página principal es javascript.html así que ábrala en su navegador porque será la pagina donde probaremos abrir y cerrar un popup y a leer un dato en la página principal desde un popup para lograr un efecto en esta página hija. Se verá algo parecido a la imagen de al lado.

La otra, javascript2.html será un popup llamado desde la primera página y lo usaremos para que lea un dato en que escribamos en la página madre.

Así vemos como un evento puede abrir el popup y el otro lo cierra, todo desde la misma ventana madre. Este es solo un ejemplo para que usted estimado lector tenga total control del proceso pero en cuestiones más practicas como la que yo comentaba, al poder cerrar el popup desde una función en la ventana madre puede invocarse desde algún otro método automático en el momento preciso para mi sin necesidad de intervención humana.

El código para las funciones de abrir y cerrar popup usadas en estos botones -y para obtener la resolución del monitor y centrar el popup en la pantalla como bonus- de ejemplo es el siguiente:

var popup = null; // Variable compartida entre las funciones

function abrir()
{
	var height = (screen.height-66)/2;
	var width = (screen.width-66)/2;
	popup = window.open('loading.gif', 'popup',
		'width=66,height=66,top='+height+',left='
		+width+',resizable=no,scrollbars=no');
}

function cerrar()
{
	popup.close(); // Cerrar la ventana
}

INCONVENIENTES: Pero hay un inconveniente con este método, resulta que solo funciona mientras la página original no se recargue, al hacer un postback se pierde el control del popup y ya no puede cerrarse desde la página madre lo cual reduce los escenarios donde este uso del javascript nos es útil, entonces hay que hacerle un ajuste extra para poder hacer que el popup se cierre cuando lo necesitamos.

Para lidiar con ese efecto podríamos dar alguna instrucción desde la página original… si supiera cual o como, si alguno sabe por favor dígamelo, y como no pude entonces podemos probar el camino inverso accediendo desde el popup a la página madre en busca de alguna señal que indique cuando debe cerrarse mediante window.opener que nos da la posibilidad de leer campos en la ventana principal. El código interesante de ese popup es que manda llamar a una función que lee cierto campo en la ventana principal y si encuentra un dato especifico se cierra así mismo. Si no lo encuentra entonces algunos segundos después va a volver a buscar. El código de la función sigue los principios de este ejemplo:

function timer()
{
	// Leer el campo en la página madre
	var caracter = opener.document.forms[0].texto.value;

	if (caracter.length > 0) // Si hay algo
	{
		alert('En la ventana madre escribio esto: '
		+ caracter);
		window.close(); // Cerrar este popup
	}
	else // Si no hay nada
	{
		alert('Escriba en la ventana antes de 5 segundos.');
		setTimeout(timer, 5000); // buscar en 5 segundos
	}
}

La idea es que setTimeout([nombre de la función], [tiempo en milisegundos]); nos permite buscar algún dato o variable en la página madre que nos va a indicar que ya es momento de que el popup se cierre, y como no lo puedo cerrar desde la página principal simplemente le dejamos una señal para que se cierre a si mismo. Para la versión de producción mía en lugar de usar un botón mejor invoco la función desde el metodo onload del body de la página, cuestión de adaptarse.

Nov 17

Proceso automatizado

Alrededor del año 2500, la humanidad descubrio un problema computacional que “debe” ser resuelto. La única dificultad es que el problema es NP-completo y tomaria cientos de años incluso con la más reciente tecnología opticobiologica disponible. El mejor cientifico de computación se puso a pensar en alguna solución.

Con gran consternación, una mujer parte del personal le conto a su esposo al respecto. Solo hay una solución, el dijo. Recuerda fisica 103, fisica moderna, relatividad general y todo. Ella replico ¿Qué tiene que ver eso con resolver un problema de computo?

¿Recuerdas la paradoja de los gemelos?

Después de unos minutos, ella dijo, podria poner la computadora en una maquina muy rapida y para la computadora solo pasarian unos minutos pero eso es exactamente lo contrario a lo que queremos… ¡Por supuesto! Dejemos la computadora aquí, y ¡Aceleremos la tierra!

El problema fue tan importante como para hacer exactamente eso. Entonces cuando la tierra regreso, ellos se encontraron con la siguiente respuesta:

IEH032 Error in JOB Control Card.

PD: No se la fuente de ese texto, me lo dijo el Fortune al iniciar sesión en un servidor Linux.

Nov 16

Migrando una página web ASP.NET de Windows a Linux

Hola estimad@s lectoras. Aquí esta Gnoblis de nuevo aburriéndolos como ostras con una entrada que se acerca un poco a temas de programación que solo a el interesan como documentación de las cosas que hace y le parece interesante guardar como auto-consulta a futuro. Si a alguien también le sirve y/o interesa es puro daño colateral, así que discúlpenme por no poner un tutorial claro con ejemplos y todos los enlaces.

¿Recuerdan que les dije que la semana pasada fue pesada? Si, pero al menos hubo una cosa interesante. Pasar páginas construidas hace años a servidores Linux. En su tiempo Mono estaba muy verde y se hicieron en Windows pero les llego su hora. Una de las ventajas que se dicen de .NET es su portabilidad semi-artificial porque es dependiente del Proyecto Mono, y sin entrar en detalles sobre las ventajas de otras tecnologías como PHP o JAVA -qué indudablemente se que tienen y he aprovechado en algunos desarrollos, como todo lo que ya esta hecho en PHP y lo combinable que es cuando necesitas controles personalizados- por ejemplo o mantenerse puro e incontaminado de todo contacto con Microsoft y cosas así. Esas son otras historias y aquí solo me dispongo a hablar de una experiencia pasando algo hecho y funcional en lugar de empezar de cero algo nativo o mejor, aunque también me parece justo reconocer que con .NET hicieron algo bastante mejor que con las tecnologías sueltas que tenían antes como ASP o Visual Basic pero eso también es otra historia.

Centrándome en el tema, tenemos sitios web construidos con ASP.NET y C# como base aderezada de JavaScript y hasta algún ActiveX (que solo funcionan en el terrible IE, lo se, pero en un ambiente cerrado, interno y sin Internet puede resultar menos riesgoso) por ahí ¿Cómo habría de comportarse eso corriendo en Linux? Esa era la pregunta de una migración teóricamente posible pero de esas que podemos imaginar que nunca fluyen sin obstáculos pero el caso es que no sean irrazonablemente difíciles.

En Windows el entorno funciona nativamente combinando IIS + NetFramework. En Linux tenemos como opciones a Mono en lugar del NetFramework y en lugar de IIS tenemos a XSP como opción más sencilla pero de menor capacidad así que para probar estuvo bien pero no para confiar en eso para un ambiente productivo real así que la opción fue el siempre confiable servidor Apache complementado con Mod mono.

De Mono ya habré hablado antes en algunas entradas, y mod_mono es un módulo para que Apache pueda servir páginas ASP.NET usando a Mono, y funcional en Linux. No voy a explicar aquí como montar un servidor Apache, supongo que a quien le interese el tema debe manejarse lo suficiente para hacerlo o saber donde buscar… creo. Y además del Apache hay que instalar el módulo de Mono libapache2-mod-mono y la interfaz entre Mono y servidor mono-apache-server.

La página oficial de Mod mono es www.mono-project.com/Mod_mono, hay le buscan en la sección de descargas del sitio.

Bueno, una vez que tenemos montado nuestro server Linux con Apache y Mod mono podemos pasarle nuestra aplicación y empezar a probar, usando de preferencia la versión 2 de ASP.NET.

Antes de pasar la versión de la página compile y revise el código usando SharpDevelop y Mono 2.0 para asegurarme de ajustar lo que necesitara ajustar para mayor seguridad, pues en mi caso encontre que dice que la instrucción “ConfigurationSettings.AppSettings.Get” esta obsoleta. Actualizar eso fue fácil.

Invalid postback or callback argument

Lo que si requirió un poco más de investigación fue este error.

Invalid postback or callback argument. Event validation is enabled using in configuration or in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

Lo que en lengua común significa que hay una validación de seguridad en el Framework 2 que en 1.1 no existía y que revisa cuando se carga la página y si hubo un cambio sospecha que algo malicioso ocurrió del lado del cliente como un intento de ataque de inyección de código y que por eso los datos estan alterados, y por motivos de seguridad detiene todo y da ese aviso. Lo mejor es corregir el problema en lugar de desactivarlo como esta la alternativa pero en mi caso lo que ocurre es que tengo unos scripts del lado del cliente que cambian el valor de los controles en base a ciertas cosas y eso es lo que disparaba la validación. Así que mi solución paso por poner en la cabecera de la página afectada EnableEventValidation=”false” para que solo en esa página no hiciera la validación.

 <%@ Page EnableEventValidation="false" ... %>

En mi caso lo hice así porque este sistema trabaja en un ambiento interno y cerrado, con scripts controlados por nosotros y en un par de páginas bien identificadas. En caso de requerir que toda la aplicación funciones así es mejor ponerlo en el web.config para todo el proyecto.

<system.web>
	<pages enableEventValidation="false"/>
</system.web>

Bueno, con eso funciono la página excepto por los acentos que en lugar de poner la letra acentuada ponía un cuadrito, pero revisando las configuraciones regionales se arregla.

Oct 06

Saber el número de serie de disco duro SATA con C#

Esto resulto un poco más difícil que la entrada anterior sobre la dirección MAC de la PC, pues hay múltiples ejemplos de código para obtener el número de serie del disco duro pero solo funcionan con IDE y no para SATA y ¿Quien tiene un PC con disco duro IDE en estos días? Yo tengo uno pero no me considero un estándar representativo de la sociedad.

La verdad, aquí hice trampa. Por que parece ser que WMI por si mismo no tiene la capacidad de obtener el número de serie de un disco SATA y al menos yo no encontré una alternativa viable así que utilice un código en C++ para llegar a un nivel más bajo de lo que pude con C# y así obtener la información, unmanaged code o código no administrado le llaman al uso de códigos así.

WMI significa Windows Management Instrumentation y sirve también para obtener otras cosas como el número de serie de la tarjeta madre por ejemplo, trabajando mediante una instancia de ManagementObjectSearcher y consultas tipo SQL para obtener una colección de los objetos Win32_BaseBoard. Para eso necesitamos el espacio de nombres System.Management.

Aquí no vamos a ver este método pero creo que ya le di suficientes palabras clave para que busquen en el Google si les interesa saber más.

Regresando a este código que les decía, la parte de C++ que comento no lo programe yo, si no que lo encontré en The Code Project y lo adapte a mis necesidades. Empecemos con esta parte.

Pueden descargar el código fuente y el programa ejemplo original de aquí para tener la dll DriveInfoEx.dll que vamos a necesitar. En esta dll se tienen los métodos necesarios para obtener la información del disco duro que queremos. Hay que agregarla como referencia a nuestro sistema en C# así como también la dll System.Management.dll, que si no la tienes por default para poder usar el espacio de nombres puedes buscarla en C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ si tienes al menos .NET framework 2.

Les dejo aquí una función de muestra de como aprovechar a DriveInfoEx.dll para obtener el número de serie hasta de discos SATA.

public static string getHardDiscInfo()
{
    #region Variables de uso local

    DriveListEx listado = null;
    string informacion = string.Empty;
    ulong capacidad = 0;
    ulong capacidadReal = 0;

    #endregion

    listado = new DriveListEx(); // Inicializar la lista
    // Obtener la informacion de los discos duros
    listado.Load();

    // Revisar si hay informacion de los discos duros
    if (listado != null && listado.Count > 0)
    {
        // Recorrer la lista de discos duros
        foreach (DriveInfoEx disco in listado)
        {
            // Capacidad del disco redondeada a miles
            capacidad = disco.DriveSize/1000000000;
            // Capacidad del disco calculada a 1024
            capacidadReal = disco.DriveSize/1073741824;

            informacion += "Modelo: " + disco.ModelNumber + "\r\n";
            informacion += "N° Revisión: " + disco.RevisionNumber + "\r\n";
            informacion += "N° de Serie: " + disco.SerialNumber + "\r\n";
            informacion += "Capacidad: " + capacidad + "GB\r\n";
            informacion += "Capacidad Real: " + capacidadReal + "GB\r\n";
            informacion += "Tamaño del Buffer: " + disco.BufferSize + "\r\n";
            informacion += "Tipo: " + disco.DriveType + "\r\n\r\n";
        }
    }
    else
    {
        informacion = "No se encontro información de discos duros";
    }

    return informacion;
}

Oct 06

Obtener la dirección MAC con C#

mac addressHace mucho que no hacia una entrada sobre códigos fuente pero últimamente muy de vez en cuando me piden algunas cosas un poco curiosas para sacar alguna información rápida y en este caso ocupamos sacar el número de serie del disco duro de un montón de PCs y su dirección MAC en la red así que pidieron una aplicación que lo sacará. Dado que son computadoras con Windows use .NET para lograrlo y como me pareció interesante y posiblemente algún día futuro querré explicar como lo hice y se me va a olvidar, procedo a documentar el asunto. Empecemos por el asunto de la MAC address que es el más sencillo de los dos casos.

Para obtener la información de las tarjetas de red necesitamos el espacio de nombres System.Net.NetworkInformation para poder utilizar los métodos GetAllNetworkInterfaces y GetPhysicalAddress para averiguar la información que necesitamos.

A modo de ejemplo dejo la siguiente clase, es muy sencilla pero no se olviden de agregar los espacios de nombres System.Collections y System.Net.NetworkInformation para que funcione.

public static ArrayList getMacAddress()
{
	// Contador para un ciclo
	int i = 0;
	// Colección de direcciones MAC
	ArrayList DireccionesMAC = new ArrayList();
	// Información de las tarjetas de red
	NetworkInterface[] interfaces = null;

	// Obtener todas las interfaces de red de la PC
	interfaces = NetworkInterface.GetAllNetworkInterfaces();

	// Validar la cantidad de tarjetas de red que tiene
	if (interfaces != null && interfaces.Length > 0)
	{
		// Recorrer todas las interfaces de red
		foreach (NetworkInterface adaptador in interfaces)
		{
			// Obtener la dirección fisica
			PhysicalAddress direccion = adaptador.GetPhysicalAddress();
			// Obtener en modo de arreglo de bytes la dirección
			byte[] bytes = direccion.GetAddressBytes();
			// Variable que tendra la dirección visible
			string mac_address = string.Empty;

			// Recorrer todos los bytes de la direccion
			for (i = 0; i < bytes.Length; i++)
			{
				// Pasar el byte a un formato legible para el usuario
				mac_address += bytes[i].ToString("X2");

				if (i != bytes.Length-1)
				{
					// Agregar un separador, por formato
					mac_address += "-";
				}
			}

			// Agregar la direccion MAC a la lista
			DireccionesMAC.Add(mac_address);
		}
	}

	// Valor de retorno, la lista de direcciones MAC
	return DireccionesMAC;
}

Si además de la MAC necesitamos más datos porque la PC tenga más de una tarjeta de red y queremos diferenciarlas fácilmente podemos recurrir a propiedades extra como Description o NetworkInterfaceType entre otras. En esta entrada mostre una pantalla de mi pequeño ejemplo mostrando información en pantalla. La MAC esta censurada porque ¿Y ustedes para que quieren saber la MAC de esa PC?

Aug 29

Router Keygen

Un smartphone sin internet es un gadget desaprovechado, y para usar internet en ellos tenemos las opciones de usar 3G o conectarnos a redes WiFi. La primera opción nos da más libertad pero a un costo que no todos están dispuestos a pagar ya sea por no atarse a un plan forzoso por meses, por no pagar el servicio en pre-pago o por ignorancia de como contratarlo y que no vamos a explicar aquí.

La segunda opción es entre barata y gratis aunque nos limite a permanecer a un distancia restringida del punto donde se encuentra la red, aunque podemos ir saltando de red en red y buscando redes a donde vamos, lo cual mientras encuentras redes abiertas o el dueño te da la contraseña esta genial pero aquí la gente no suele dejar sus redes sin contraseñas… y te quedas tan lejos y tan cerca del Internet, sin remedio.

Si la duda te corroe, si la curiosidad te consume y mueres de ganas de saber cual es esa contraseña que te impide conectarte al anhelado Internet… ah, recalco a todos ustedes mis estimad@s lector@s que esto es solo para saciar curiosidad, para analizar la seguridad del password de tu propia red, y para advertir a tus vecinos que su red es vulnerable… claro que no es para robar Internet, no no no, claro que no desconfió de mis lector@s porque ustedes son totalmente honestos y de fiar ¿Verdad?

He probado tres aplicaciones que prometían averiguar la clave WEP de redes WiFi pero la que me ha dado resultados es la siguiente:

Router Keygen

Esta es una aplicación para Android que scannea las redes WiFi a tu alrededor y las lista para ti, divididas en dos grupos: uno marcado en rojo que te indica que esas redes de plano están muy protegidas para nuestra aplicación juzgando principalmente por el tipo de Router y el tipo de seguridad que tiene la red, pues solo puede sacar contraseñas para claves WEP que son el tipo de cifrado más débil; y el otro grupo marcando en verde donde lista las redes a donde podrías entrar, selecciona una y la aplicación buscara en un diccionario de contraseñas una o más claves que pudieran servir para esa red y que hagas la prueba.

Aclaro desde ya que esta aplicación solo sirve para claves WEP y que NO crackea contraseñas, eso tomaría demasiado tiempo con el limitado poder de calculo de un teléfono, así que lo que hace es encontrar o calcular la contraseña por default de fabrica, porque muchos dueños de redes no saben o no les interesa configurar la seguridad de su red y son las presas favoritas de esta aplicación.

Para descargar la aplicación desde su página oficial da click aquí.

Para instalar la aplicación simplemente hay que copiar el archivo .apk a nuestro teléfono con Android y ejecutarlo. De preferencia luego hay que ponerle el diccionario para mejorar su efectividad ya sea que lo instalemos desde la misma aplicación si tenemos acceso a 3G u otra red WiFi de confianza. Si eso no es posible puede descargar los diccionarios (click aquí o aquí) y copiarlos manualmente al teléfono y ponlos en una carpeta llamada thomson en la raiz de la memoria del dispositivo.

Routers soportados en la versión 2.8.1:

  1. Thomson y router basados en Thomson (Thomson, SpeedTouch, Orange, Infinitum, BBox, DMax, BigPond, O2Wireless, Otenet, Cyta , TN_private)
  2. DLink (algunos modelos)
  3. Pirelli Discus
  4. Eircom
  5. Verizon FiOS (algunos modelos)
  6. Alice AGPF
  7. FASTWEB Pirelli and Telsey
  8. Huawei (Algunos Infinitum)
  9. Wlan_XXXX or Jazztel_XXXX (Comtrend y Zyxel)
  10. Wlan_XX (algunos modelos)
  11. Ono ( P1XXXXXX0000X )
  12. WlanXXXXXX, YacomXXXXXX and WifiXXXXXX (wlan4xx)
  13. Sky V1 routers
  14. Clubinternet.box v1 and v2 (TECOM)
  15. InfostradaWifi
Úsenla con responsabilidad. No me hago responsable de problemas con el vecino o secuelas varias que se puedan buscar.

Aug 24

Intercambiando CAPTCHAs: CAPTCHA TRADER

Hola mis estimados cuatro lector@s, ya estoy de vuelta. Verán, tenia planeado escribir esta entrada el lunes pero la semana empezó ruda, el lunes se tomo muy en serio su papel de ser lunes y hasta horas extra me aventé y pues ya llegue tarde a mi madriguera física con hambre y molestia y ya se me quitaron los ánimos de escribir y simplemente me plante en mi sofá a videojugar, y el martes también… ahora entremos en materia y empecemos a ponernos al día con las entradas que procrastine, empezando con la entrada sobre los CAPTCHAs.

El CAPTCHA es esa imagen con caracteres que debemos ver y escribir los caracteres incluidos en la imagen que algunas páginas ponen para que compruebes que eres un usuario humano y evitar a los boots.

Lectores, levante la mano el que descargue archivos grandes de servidores tipo Megaupload y similares. ¿Y usan gestores como JDownloader para automatizar la descarga de muchos archivos? Si contestaron que si a ambas cosas seguramente se han encontrado con casos en que los CAPTCHA de algunos servidores son muy difíciles y los plugins automáticos ya no pueden resolverlos.

Es frustrante tener que estar al pendiente de capturar los CAPTCHAs por mucho tiempo y muchas veces, se pierde el objetivo de darle una lista y esperar que haga el trabajo en forma desatendida.

Aquí comentare una solución que probé el fin de semana y me pareció muy ingeniosa.

CAPTCHA TRADER

Este es un plugin para Fritz!Load, Mipony, pyLoad, Jdownloader y Chrome así que tenemos opciones para usarlo tanto en Windows, Linux o Mac, y además del plugin tenemos que hacernos una cuenta en el sitio del programa captchatrader.com e instalarlo en nuestra aplicación para descargas, en mi caso JDownloader para Ubuntu.

¿Y para qué necesitamos la cuenta? ¿Por qué no basta con el plugin? Porque al hacer tu cuenta te dan 100 puntos y cada CAPTCHA que te “resuelva” el plugin te cuesta 10 puntos y para ganar más puntos debes entrar en un apartado de la página donde te dan a resolver CAPTCHAs y ganaras 7 puntos por cada uno que resuelvas, y esos CAPTCHAs son los que le están apareciendo en tiempo real a otros usuarios del plugin y tu se los estas resolviendo y así ganas crédito para que luego otro usuario te resuelva los tuyos, todo así comunitario.

Lo probé y funciono muy bien, según la página la efectividad del método es de más de 97% aunque yo ayude a bajarlo porque me equivoque dos veces cuando estaba ganando créditos para mis descargas. Así que le doy a esta solución el Gnoblis’ Seal of Approval.

Aug 18

Android 2.3.4 Gingerbread oficial para Galaxy Ace

Mi telefono oficialmente actualizado

Mi telefono oficialmente actualizado

Hola mis estimados lectores. La semana pasada, el lunes justo cuando estaba en la sala de espera del aeropuerto puesto y dispuesto para iniciar mis vacaciones me entere que Telcel libero la actualización oficial a 2.3.4 Gingerbread para Samsung Galaxy Ace mediante Kies pero no lo pude actualizar hasta ayer y he aquí mis impresiones.

#1 Tiene casi las mismas fallas que las actualizaciones no oficiales.

¿Recuerdan que les comente cuando actualice a Gingerbreads rusos y brasileños? En resumen con la versión de firmware rusa tenia problemas con la pantalla se apagaba random porque si y con el 3G. Y la versión brasileña intentaba asesinar a mi router pues lo reiniciaba cada que intentaba conectarme por WiFi a mi red domestica y si insistía mucho lo dejaba trabado al grado de tener que desconectarlo manualmente de la corriente un rato para que volviera a funcionar.

Yo pensé que estos problemas eran por usar software de otras compañías y regiones pero con el update oficial de Telcel mi teléfono otra vez trata de matar a mi router como la ROM brasileña. No me lo explico ¿Incompatibilidad? Mi router es un 2wire Gateway 2700 de los que dan con Infinitum, si alguien sabe algo al respecto díganme. Con 2.2 Froyo no tengo ningún problema.

En otros aspectos, la cámara de vídeo ahora si graba a 640×480 que ya es una resolución estándar y minimamente aceptable, y algunas mejoras de fluidez e iconitos por aquí y por allá menos notables… hasta que te regresas a Froyo y entonces ya vez que Gingerbread si era mejor.

Me quedare con Gingerbread a pesar de lo del WiFi, tengo internet por 3G y en casa mejor uso la computadora que el teléfono para estos menesteres del internet.

#2 Actualizar mediante Kies es un infierno.

Así es. Tres días estuve haciendo intentos varios a distintas horas y no hubo poder humano hasta el tercer día que en un enésimo intento por fin se le antojo al Kies terminar el proceso de actulización.

Kies es  la herramienta oficial de Samsung para actualizar sus smartphones y la verdad no es muy smart que digamos porque cada intento que hace lo empieza desde cero en lugar de bajar el firmware a la PC y respaldarlo para continuar la descarga o cualquier otra técnica común para reducir el tiempo y recursos utilizados.

Para empezar Kies no funciona en Gnu/Linux a menos que hagas algunos procesos medio engorrosos con unas dlls ya sea emulando Windows con Wine o en una maquina virtual. Solo esta disponible para Windows y Mac, y eso me parece muy raro siendo para aparatos Android que deciende de Linux y según es el OS libre entre los smartphones y todo ese posicionamiento ideológico que según Google hay detrás de Android… como que no cuadra.

Decía, Kies no siempre reconoce al teléfono, cuando lo reconoce no siempre te da la opción de actualizar pues a veces no te lo menciona y los menús aparece inhabilitada. Cuando te ofrece actualizar, su servidor a veces te manda a freir esparragos… y cuando si te atiende falla de la nada cuando llevas 99% y te obliga a iniciar todo desde el principio otra vez. Al menos no me brickeo el teléfono. Bueno, pero una imagen vale más que mil palabras y como me desesperaba mucho esa situación tome screenshots… vean:

Y así estuve a merced de Kies y del servidor de Samsung unos días… y de momento esas son mis impresiones con el Gingerbread oficial. Cya!

Aug 07

Android en una imagen

Older posts «

» Newer posts