miércoles, 14 de diciembre de 2011

Como rootear el Kindle Fire en linux

Buenas, ya he encontrado como se rootea el Kindle Fire, en rootkindlefire.com. Salvo que tiene un lapsus, no hay que desconectarlo como dicen.


  • Paso 1. Ir a Settings->More->Device y activar “Allow Installation of Applications”.
  • Paso 2. Conectar el Kindle Fire al ordenador con un cable micro-USB, vale el de Nokia. Y aquí está el fallo, no hay que desconectarlo.
  • Paso 4. Abrir un terminal. 
  • Paso 5. Navegar hasta el directorio extraído KindleFireRootMacLinux por ejemplo: 
          cd Downloads/KindleFireRootLinux
  • Paso 6. Copiar el fichero adb_usb.ini en el directorio android. 
  • Paso 7 Ejecutar desde el terminal, si fuera necesario con SUDO:
           ./adb-linux kill-server
           ./adb-linux devices
  • Paso 8 El rooteo en sí es ejecutar:
          sh runmelinux.sh
  • Paso 9 Reiniciar el Kindle.
Se puede verificar que ha ido correctamente yendo a Settings->More->Applications->All Applications, donde aparecerá el androide parcheado.

Yo ya lo he hecho, ¿a qué esperas?

martes, 13 de diciembre de 2011

Lo que le falta al Kindle Fire

Buenas, voy a opinar sobre lo que le falta al Kindle Fire:


  • Lo primero es el idioma, ¿en EEUU no hay nadie que hable castellano?, porque no se puede cambiar el idioma.
  • No se solicita ninguna clave al encenderlo. Si se perdiera, o alguien accediera al Kindle, tendría a su disposición todos los libros, fotos, historial de navegación, correos, etc.
  • No he visto la navegación privada, si me conectara al banco, estaría mi cuenta accesible para cualquiera, o alguien podría repetir una transferencia o...
  • Eso de no poder instalar nada por no estar físicamente en los EEUU, aunque pronto lo arreglaré, cuando averigüe cómo hacerlo desde linux, porque en mi SDK de Android no tengo el fichero ADB_USB.ini.
Aunque también tiene sus cosas positivas, para enviar algo basta con mandarlo a usuario@kindle.com, y luego sincronizándolo se accede al documento, vídeo, etc.. La navegación con Silk va fluida, muy fluida.
El conector USB es estándar, he podido cargarlo con el de mi Nokia, aunque ya tengo el adaptador de enchufe americano a europeo.

Y he aquí la prueba gráfica de que dispongo de mi Kindle Fire:


jueves, 24 de noviembre de 2011

miércoles, 20 de abril de 2011

Mi segunda aplicación Cocoa Capítulo 3 y útimo

Nos queda la parte que lleva el cálculo, se puede usar, pero no sacar beneficios de él:


#import "PrimitivaAppDelegate.h"

@implementation PrimitivaAppDelegate

@synthesize window;
@synthesize numeros,num1,num2,num3,num4,num5,num6;
@synthesize aordenar;

NSInteger shuffleSort(id n1, id n2, void *context){
int resultado = arc4random()%3;
if (resultado==0) {
return NSOrderedAscending;
}
if (resultado==1) {
return NSOrderedDescending;
}
return NSOrderedSame;
}

-(IBAction)boton {
numeros =[NSMutableArray arrayWithObjects:@" 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",nil];
srand(time(nil));
//agitar al agitador, si no se repiten
NSArray *numerosAgitados;
numerosAgitados = [numeros sortedArrayUsingFunction:shuffleSort context:NULL];  //agitar los numeros
// primer numero
int i1 = rand() % 49;   //el que diga random a elegir entre 49
num1 = [numerosAgitados objectAtIndex:i1];
[num1 retain];
NSMutableArray *numerosAgitados1;
numerosAgitados1 =[[NSMutableArray alloc] initWithArray:numerosAgitados];  
//para quitar un numero
  [numerosAgitados1 removeObjectAtIndex:i1];              //quita el que salio
srand(time(nil));
NSArray *numeros2Agitados;
numeros2Agitados = [numerosAgitados1 sortedArrayUsingFunction:shuffleSort context:NULL]; //agitamos
// segundo numero
    int i2 = rand() % 48;
num2 = [numeros2Agitados objectAtIndex:i2];
[num2 retain];
NSMutableArray *numerosAgitados2;
numerosAgitados2 =[[NSMutableArray alloc] initWithArray:numeros2Agitados];   
//para quitar otro numero
[numerosAgitados2 removeObjectAtIndex:i2];               //quita el que salio
srand(time(nil));
NSArray *numeros3Agitados;
numeros3Agitados = [numerosAgitados2 sortedArrayUsingFunction:shuffleSort context:NULL]; 
// tercer numero
int i3 = rand() % 47;
num3 = [numeros3Agitados objectAtIndex:i3];
[num3 retain];
NSMutableArray *numerosAgitados3;
numerosAgitados3 =[[NSMutableArray alloc] initWithArray:numeros3Agitados];
[numerosAgitados3 removeObjectAtIndex:i3];
srand(time(nil));
NSArray *numeros4Agitados;
numeros4Agitados = [numerosAgitados3 sortedArrayUsingFunction:shuffleSort context:NULL]; 
// cuarto numero
int i4 = rand() % 46;
num4 = [numeros4Agitados objectAtIndex:i4];
[num4 retain];
NSMutableArray *numerosAgitados4;
numerosAgitados4 =[[NSMutableArray alloc] initWithArray:numeros4Agitados];
[numerosAgitados4 removeObjectAtIndex:i4];
srand(time(nil));
NSArray *numeros5Agitados;
numeros5Agitados = [numerosAgitados4 sortedArrayUsingFunction:shuffleSort context:NULL]; 
// quinto numero
int i5 = rand() % 45;
num5 = [numeros5Agitados objectAtIndex:i5];
[num5 retain];
NSMutableArray *numerosAgitados5;
numerosAgitados5 =[[NSMutableArray alloc] initWithArray:numeros5Agitados];
[numerosAgitados5 removeObjectAtIndex:i5];
srand(time(nil));
NSArray *numeros6Agitados;
numeros6Agitados = [numerosAgitados5 sortedArrayUsingFunction:shuffleSort context:NULL]; 

// sexto numero
int i6 = rand() % 44;
num6 = [numeros6Agitados objectAtIndex:i6];
[num6 retain];
aordenar = [NSMutableArray arrayWithObjects:num1,num2,num3,num4,num5,num6,nil];
[aordenar sortUsingSelector:@selector(compare:)];
    [eti1 setText:[NSString stringWithFormat:@"%@",[aordenar objectAtIndex:0]]];
[eti2 setText:[NSString stringWithFormat:@"%@",[aordenar objectAtIndex:1]]];
[eti3 setText:[NSString stringWithFormat:@"%@",[aordenar objectAtIndex:2]]];
[eti4 setText:[NSString stringWithFormat:@"%@",[aordenar objectAtIndex:3]]];
[eti5 setText:[NSString stringWithFormat:@"%@",[aordenar objectAtIndex:4]]];
[eti6 setText:[NSString stringWithFormat:@"%@",[aordenar objectAtIndex:5]]];
}

-(void)applicationDidFinishLaunching:(UIApplication *)application{
[window makeKeyAndVisible];
}


@end

Y ejecutando:
Lo que falta se puede obtener con google. Ahora ando viendo como lo hago con Android.

Cordiales

miércoles, 6 de abril de 2011

Mi segunda aplicación Cocoa Capítulo 2

Hoy vamos con los enganches, hay que utilizar el Interface Builder: doble click en MainWindow.xib.
Cuando estén pintados las etiquetas y el botón quedará así:
Es bastante tosco pero el caso es que funcione.
El arrastrar es fácil, tecla control, primero desde el botón hasta PrimitivaAppDelegate, que habremos incluido antes en MainView:
Y cada una de las etiquetas:
Hasta aquí lo bonito, lo que mola, para el próximo y último capítulo el código que gererará los números aleatorios.

Bye



lunes, 28 de marzo de 2011

Mi segunda aplicación Cocoa Capítulo 1

Para empezar el nuevo proyecto elegimos "Windows-Based" dentro de IOS:




Cuando estémos en Xcode la clase creada "Primitiva" la podemos borrar, ya que con las primitivas no vamos más que mostrarlas, si se hiciera algo con ellas, como imprimir, o sacar estadísticas si que la necesitaríamos.


Queda así:







Y a codificar: añádanse un botón y 6 etiquetas



@interface PrimitivaAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
IBOutlet UIButton *boton;
IBOutlet UILabel *eti1;
IBOutlet UILabel *eti2;
IBOutlet UILabel *eti3;
IBOutlet UILabel *eti4;
IBOutlet UILabel *eti5;
IBOutlet UILabel *eti6;
}

Los campos de trabajo, cada número generado y un par de ARRAYS con la colección de números, que al final saldrán en la ventana ordenados de menor a mayor:

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) NSMutableArray *numeros;
@property (nonatomic, retain) NSMutableArray *aordenar;
@property (nonatomic, retain) NSString *num1;
@property (nonatomic, retain) NSString *num2;
@property (nonatomic, retain) NSString *num3;
@property (nonatomic, retain) NSString *num4;
@property (nonatomic, retain) NSString *num5;
@property (nonatomic, retain) NSString *num6;


El total del código de PrimitivaAppDelegate:
//  PrimitivaAppDelegate.h
//  Created by JBZ on 25/03/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.

#import <UIKit/UIKit.h>

@interface PrimitivaAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
IBOutlet UIButton *boton;
IBOutlet UILabel *eti1;
IBOutlet UILabel *eti2;
IBOutlet UILabel *eti3;
IBOutlet UILabel *eti4;
IBOutlet UILabel *eti5;
IBOutlet UILabel *eti6;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) NSMutableArray *numeros;
@property (nonatomic, retain) NSMutableArray *aordenar;
@property (nonatomic, retain) NSString *num1;
@property (nonatomic, retain) NSString *num2;
@property (nonatomic, retain) NSString *num3;
@property (nonatomic, retain) NSString *num4;
@property (nonatomic, retain) NSString *num5;
@property (nonatomic, retain) NSString *num6;

-(IBAction)boton;

@end

En la próxima entrega engancharemos las etiquetas y el botón.

Bye



viernes, 25 de marzo de 2011

Mi segunda aplicación COCOA capítulo 0

Bien, mis intenciones son hacer mi segunda aplicación en Cocoa, además de dejar escritos los pasos en la nube.
La aplicación va a ser muy sencilla, pero útil: va a generar primitivas, que no son más que combinaciones de 6 números elegidos entre 49 posibles.

El programa se encargará de generar la combinación de 6 números, que por supuesto no está garantizado que nos toque.

Vamos al lio:

CUADERNO DE CARGA

Modelo
Como Cocoa es un lenguaje orientado a objetos, hay que tener presente qué objetos vamos a utilizar; sencillo vamos a tener una clase que será Primitiva, que tendrá como atributos 6 números.

Vista
La pantalla tendrá un NSLabel donde se mostrará la combinación generada. Y un botón tal que al pulsarlo se genere la combinación aleatoria.

Controlador
Se encargará de crear el objeto apuesta de la clase Primitiva; será el encargado de hacer que la apuesta generada sea aleatoria. Como añadido ha de elegir 6 números de 49, pero no puede repetirlos, la invocación a la función random() podría repetir los números, y es aquí donde está la dificultad.

miércoles, 26 de enero de 2011

¿Voy en contra de la nueva ley SINDE?

Pues si voy en contra de la ley, que me lo digan y borro este post:


Sí, he quitado los 7000 enlaces, si alguien iba a usarlos, google lo puede resolver.

A seguir bien