Friday, June 6, 2014

Exportar base de datos heroku e importarla a base de datos local


Sacado del link oficial de heroku.

Exportar base de datos de heroku, primero la capturamos en un backup (deben agregar el addon pgbackups de heroku) y luego la pasamos a un archivo, en este caso lo llamaremos latest.dump
$ heroku pgbackups:capture
$ curl -o latest.dump `heroku pgbackups:url`
Si al correr la primera linea les aparece que deben eliminar un backup, dado que ya generaron varios, tienen dos opciones:

heroku pgbackups:capture --expire
lo que hace una captura eliminando el backup más viejo u obtener los backups generados y eliminar alguno en particular:

heroku pgbackups
heroku pgbackups:destroy b003

donde b003 en uno de los backups que mostró el primer comando.

Para importar a la base de datos local:

$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump
donde deben remplazar myuser por el usuario de base de datos que tienen, mydb por el nombre de la base de datos donde deseas importar y latest.dump el nombre del archivo que desean importar.



Bookmark and Share

Friday, March 28, 2014

Boostrap Glyphicon y Rails 4

Tratando de usar la versión gratuita de Glyphicon, disponible para bootstrap,  y rails 4 tuve problemas, pero encontrés la solución en stackoverflow.

Aquí la solución:

Se debe agregar el siguiente código a application.css:

@font-face { font-family: 'Glyphicons Halflings'; src: url(asset_path('glyphicons-halflings-regular.eot')); src: url(asset_path('glyphicons-halflings-regular.eot?#iefix')) format('embedded-opentype'), url(asset_path('glyphicons-halflings-regular.woff')) format('woff'), url(asset_path('glyphicons-halflings-regular.ttf')) format('truetype'), url(asset_path('glyphicons-halflings-regular.svg#glyphicons_halflingsregular')) format('svg'); }
y agregar lo siguiente a application.rb
config.assets.paths << "#{Rails}/vendor/assets/fonts"

y listo!

Bookmark and Share

Wednesday, January 29, 2014

Android: Ajustar pantalla cuando aparece el teclado

Android permite ajustar la pantalla cuando se aparece el teclado, existen dos opciones que se pueden resumir en una sola linea:

android:windowSoftInputMode="stateUnchanged|adjustResize"

Esta línea se debe usar en el Manifest.xml dentro de los tags de la actividad donde se desee aplicar. Dependiendo del resultado que se quiera obtener se puede jugar con las opciones.  Además de estas opciones mencionadas existen otras para lograr otros efectos.

Bookmark and Share

Monday, June 3, 2013

Validar el formato de un E-mail en Android

Se puede hacer con el siguiente método:

public static boolean isEmailValid(String email) {
    boolean isValid = false;

    String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
    CharSequence inputStr = email;

    Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(inputStr);
    if (matcher.matches()) {
        isValid = true;
    }
    return isValid;
}

Gracias a la expresión regular indicada arriba, el método devolverá true si el formato es válido y false en caso contrario.

fuente

Bookmark and Share

Thursday, May 30, 2013

Android: Mostrar un mensaje cuando el ListView está vacío

Si se está usando el ListView, existe un método que se llama setEmptyView el cual recibe un view y se muestra cuando la lista está vacía. Aquí un ejemplo:

Primero se debe agregar un View (como un botón o un texto) al Layout de la actividad donde tienen el ListView. Aquí un ejemplo con un texto:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/myListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
    <TextView
        android:id="@+id/emptyListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"
        android:text="@string/emptyList" >
    </TextView>

</LinearLayout>
Es importante que tenga el atributo android:visibility="gone" para que no se muestre cuando la lista si tenga contenido.

Luego en la clase donde utlizan el ListView, deberán llamar al método setEmptyView y entregarle el TextView que creamos en el xml

ListView lv = getListView();
lv.setEmptyView(findViewById(R.id.emptyListView));
o bien

ListView lv = (ListView)findViewById(R.id.myListView);
lv.setEmptyView(findViewById(R.id.emptyListView));


Bookmark and Share

Tuesday, May 28, 2013

Cambiar la zona horaria del servidor Heroku

Es muy fácil cambiar la zona horaria de Heroku:


  1. Deben obtener la zona horaria que quieren configurar de este link. Ahí deben escoger el texto bajo la columna "TZ"
  2. En su consola local, deben correr el comando: heroku config:add TZ=America/Santiago

Y listo, su servidor se reiniciará una vez finalizada la configuración.

Para revisar que el cambio se haya realizado de forma satisfactoria deben iniciar la consola de heroku desde su consola local (heroku run console) y luego escribir el comando Time.now  ahí se les imprimirá la hora.


Bookmark and Share

Tuesday, May 21, 2013

AFNetworking: Leer una respuesta XML en una aplicación para iPhone, con XCode

Con AFNetworking es muy fácil leer respuestas en XML o JSON que entregue un servidor.
Aquí un ejemplo con XML:

Primero deben bajar el AFNetworking a su computador desde el link:

https://github.com/AFNetworking/AFNetworking

Una vez descargada, descomprime la carpeta. Ahora contaras con una carpeta con un nombre similar (o igual) a: AFNetworking-AFNetworking-211cdfc

Ahora anda a XCode, selecciona tu proyecto, anda a Archivo y haz clic en la opción "Agregar archivo a <nombre_de_tu_proyecto>". Ahi busquen la carpeta AFNetworking-AFNetworking-211cdfc, ábranla y seleccionen la carpeta AFNetworking que está adentro.

Ya estás listo para empezar a conectarte con tu servidor.

Para empezar debes agregar los archivos al encabezado:

#import "AFXMLRequestOperation.h"
#import "AFHTTPClient.h"

Luego debes iniciar la comunicación con el servidor y obtener el XML.


        //Supongamos que deseamos enviar el mail y contraseña a nuestro servidor para obtener una respuesta cuando un usuario intenta iniciar sesión.
NSString *email = [self.txtUsername text];
        NSString *contrasena = [self.txtPassword text];
//Crea un NSDictonary con los parámetros
        NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                                email, @"email",
                                contrasena, @"contrasena",
                                nil];
        
//Indica la url de tu servidor
        NSURL *url = [[NSURL alloc] initWithString:@"http://www.miservidor.com"];
        AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
        [httpClient registerHTTPOperationClass:[AFXMLRequestOperation class]];
        [httpClient setDefaultHeader:@"Accept" value:@"application/xml"];
        //Indica donde se debe hacer la petición
NSMutableURLRequest *request1 = [httpClient requestWithMethod:@"POST" path:@"/iniciar_sesion" parameters:params];
        AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request1 success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
            
            XMLParser.delegate = self;

//Aquí leemos la respuesta del XML
            [XMLParser parse];
        } failure:nil];

//Aquí iniciamos la llamada
        [operation start];

Ahora falta crear las funciones para parsear el archivo XML, esto se puede lograr de diferentes maneras. Aquí muestro una:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{
    self.currentElement = [elementName copy];
    self.ElementValue = [[NSMutableString alloc] init];
    
//Ejemplo de lectura
    if ([elementName isEqualToString:@"algun-campo"]) {    
       // hacer algo, ejemplo imprimir un mensaje...
    }
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    [self.ElementValue appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if([elementName isEqualToString:@"algun-campo"]){
    //hacer alguna acción, por ejemplo:
    NSLog(self.ElementValue);   
    }
}

Cualquier cosa dejen un comentario!



Bookmark and Share

Related Posts Plugin for WordPress, Blogger...