Nada que ver con los anteriores móviles 😛
Rootear Sony ericsson Xperia Pro MK16i/a (gingerbread)
Antes de empezar debemos de saber que es ser root y que conseguimos con ello, ya que no es imprescindible que lo seamos en la mayoría de los casos.
Ser root es disponer de todos los privilegios del sistema para hacer lo que queramos. Ya que normalmente cuando usamos el dispositivo lo hacemos con una cuenta de usuario con ciertos privilegios, en general esos privilegios nos permiten hacer la gran mayoría de tareas. Sin embargo hay algunas de ellas que solo las podemos realizar si contamos con los permisos suficientes y puesto que con nuestra cuenta de usuario no los tenemos… debemos de recurrir a la cuenta de administrador o superusuario.
Un ejemplo claro y del que seguro la mayoría nos hemos dado cuenta, es cuando usamos Windows y al instalar un programa se advierte y se nos pide permisos de administrador para poder instalar dicha aplicación.
Algunos ejemplos en los que necesitamos seer root:
El principal motivo es poder deshacernos de las aplicaciones de serie que no nos interesen, estas aplicaciones están instaladas como del sistema y por lo tanto una cuenta normal no tiene permisos para desinstalarlas, solo una cuenta de superusuario puede hacerlo.
Otro motivo muy importante también es para poder realizar copias de seguridad de las aplicaciones y de sus configuraciones. También de los SMS, historial de llamadas, etc.
O para poder controlar el móvil remotamente y poder recuperarlo ante un robo, por ejemplo.
Leer másSony Ericsson Xperia Pro MK16i
Casi dos años después, de la HTC Desire, vuelve a tocar cambiarse de móvil. En esta ocasión el móvil elegido es un Sony Ericsson Xperia en su versión Pro con teclado qwerty físico. Mi segundo móvil con teclado, el primero fue un Qtek 9100.
Leer más9×03: Bicola generica usando un Vector o Referencias
Código para Bicolas genéricas usando Vectores:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
/** * Proyecto: 9x03-Bicola - Vector * Fichero: Bicola.java * Fecha: 17/05/2012 * * Licencia (CC) BY-NC-SA: giltesa.com * * http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html * http://mundogeek.net/archivos/2009/03/11/generics-en-java/ */ import java.util.Vector; public class Bicola<G> { // PROPIEDADES: private Vector<Nodo<G>> vNodos; // CONSTRUCTOR: // Se instancia un Vector de Nodos Genericos. (Del tipo con el que instanciamos la Bicola). public Bicola() { vNodos = new Vector<Nodo<G>>(5, 2); } // METODOS: // Se devuelve el numero de elementos usados en el Vector. public int getNumDeNodos() { return vNodos.size(); } // Se añade un Nodo a la izquierda y se desplazan los demas una posicion a la derecha en el indice. public void addNodoIzquierda( G dato ) { vNodos.add(0, new Nodo<G>(dato)); } // Se añade al final del Vector un nuevo Nodo: public void addNodoDerecha( G dato ) { vNodos.addElement(new Nodo<G>(dato)); } // Se copia el primer elemento en temp, despues se elimina del Vector. public G getNodoIzquierda() { G temp = vNodos.firstElement().getDatoNodo(); vNodos.removeElementAt(0); return temp; } // Se copia el ultimo elemento en temp, despues se elimina del Vector. public G getNodoDerecha() { G temp = vNodos.lastElement().getDatoNodo(); vNodos.removeElementAt(vNodos.size() - 1); return temp; } // Se concatenan todos los elementos del Vector en cadena y luego se devuelve. public String toString() { String cadena = ""; for( int i = 0; i < vNodos.size(); i++ ) cadena += vNodos.get(i).getDatoNodo() + ", "; return cadena; } } |
Leer más
Panel de 42 LED Piranha a 12V
Estoy haciendo pruebas con un panel de 42 leds Piranha para sustituir la bombilla fluorescente del flexo y la verdad es que no queda nada mal, por el momento es una instalación temporal, me he pedido otro panel de la mitad de tamaño para cubrir toda la superficie : )
2×03: Función múltiple consulta (Fin MySQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/* Pregunta 3 Realizar una función pregunta3 que calcule y devuelva el importe total de un pedido que se le pase como parámetro. La función devolverá -1 si no existe el pedido pasado como argumento. */ delimiter $$ drop function if exists 2x03 $$ create function 2x03(ped int) returns double begin if (select true from pedidos where num_pedido = ped) then return ( select sum(a.precio_unidad * d.unidades) from articulos a, detalle_pedidos d where a.cod_articulo = d.cod_articulo and d.cod_pedido = ped )- ( select descuento from pedidos where num_pedido = ped ); else return -1; end if; end $$ delimiter ; -- select 2x03(43) as 'Total'; |
2×02: Trigger de borrado y actualización en cascada
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/* Pregunta 2 Realiza un trigger de base de datos pregunta2 que se ejecute automáticamente en el momento de borrar pedidos no enviados. Dicho trigger se encargará de: - Reponer las existencias de cada artículo en la tabla artículos en la cantidad que figura en los detalles del pedido que van a ser borrados. - Borrar los detalles de ese pedido no enviado. */ -- show triggers; -- drop trigger t_2x02; delimiter $$ create trigger t_2x02 before delete on pedidos for each row begin update articulos a, detalle_pedidos d set a.existencias = a.existencias + d.unidades where a.cod_articulo = d.cod_articulo and d.cod_pedido = old.num_pedido; delete from detalle_pedidos where cod_pedido = old.num_pedido; end $$ delimiter ; -- delete from pedidos where enviado = 'N' and num_pedido = 42; |
2×01: Transacción con método optimista
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
/* Examen de prueba: Pregunta 1 Realiza un procedimiento pregunta1 que a partir de un código de artículo y una cantidad disminuya las existencias de la tabla artículos de ese artículo en esa cantidad. Utiliza un tercer argumento de tipo out para indicar el resultado del procedimiento Ten en cuenta: - Si el artículo no existe entonces el tercer argumento devolverá -1. - Si el artículo existe pero no hay suficientes unidades del mismo, el tercer argumento devolverá -2 En los 2 casos anteriores no se llevará a cabo ninguna modificación de las existencias. Si el artículo existe y dispone de existencias suficientes, realizar la operación y validar los cambios. Utiliza transacciones. Durante el tiempo que dure el proceso de modificación, se reservará (bloqueará) la fila implicada hasta que se validen los cambios. El tercer argumento devolverá 1. Para cualquier situación de error que se pueda producir se actuará deshaciendo la operación y devolviendo un 0 en el tercer argumento del procedimiento. */ delimiter $$ drop procedure if exists 2x01 $$ create procedure 2x01( p_articulo char(4), p_cantidad int(11), out p_resultado int(1) ) begin declare v_cod_articulo char(4); declare v_existencias int(11); declare continue handler for sqlexception begin rollback; set p_resultado = 0; end; -- El articulo existe y hay suficientes existencias: if ( select true from articulos where cod_articulo = p_articulo and existencias >= p_cantidad ) then select cod_articulo, existencias into v_cod_articulo, v_existencias from articulos where cod_articulo = p_articulo for update; START TRANSACTION; update articulos set existencias = existencias - p_cantidad where cod_articulo = v_cod_articulo and existencias = v_existencias; set p_resultado = 1; commit; -- El articulo existe pero no hay existencias suficientes: elseif ( select true from articulos where cod_articulo = p_articulo ) then set p_resultado = -2; -- El articulo no existe: else set p_resultado = -1; end if; end $$ delimiter ; -- call 2x01( 'A001', 3, @resultado ); -- select @resultado as 'Resultado'; |