JQueryMobile: Introducción al desarrollo web para móviles

 

jquery-mobile-devices-transiciones

JQueryMobile es un Framework javaScript para el desarrollo rápido y fácil de sitios webs optimizados para teléfonos móviles. Con este framework, aceleramos la velocidad de desarrollo de aplicaciones, encapsulando muchas tareas comunes que se realizan cuando usamos el lenguaje JavaScript. Agrega una capa más a JQuery e intenta suplir algunas necesidades que los programadores de dispositivos móviles padecen.
En el pasado, un desarrollador tenía que programar según para qué dispositivo concreto, lo que alargaba los tiempos de desarrollo y mantenimiento de los sitios webs. Ahora con JQueryMobile, evitamos conocer la lógica específica de cada dispositivo y nos centramos en la programación para un solo fin, el navegador de un teléfono móvil.
JQueryMobile, es un framework bastante jóven, desde el 13 de Agosto de 2010, aunque promete bastante como framework de desarrollo para web para móviles.

 

Características de JQueryMobile

  • Themes personalizados: El framework permite el uso de themes ya creados y da la posibilidad de crear nuevos themes y trabajar con ellos.
  • Tamaño reducido: Toda la librería comprimida pesa menos de 12K.
  • Facilidad de uso: Destaca la facilidad para el desarrollo de interfaces de usuario de dispositivos móviles.
  • Múltiples plataformas: IOS, Android, Blackberry, Palm WebOS, Symbian, Windows Mobile, etc.
  • Soporte HTML5: Como su nombre indica, soporta las nuevas etiquetas HTML5.

Sigue leyendo

Introducción al Diseño Web Adaptable o Responsive Web Design

 

01_Responsive_web_design

Hoy en día los usuarios de nuestras páginas web o tiendas online pueden acceder a las mismas desde diferentes medios: un ordenador de sobremesa con pantalla panorámica, un móvil, una tableta… Partiendo de la base de que el diseño de una web, para que funcione, tiene que estar centrada en el usuario (y no en el diseñador, en el programador o en el dueño de la web), es importante que la experiencia que tiene el usuario con nuestra web sea lo más placentera posible con independencia de qué medio esté usando para verla. Es por ello que últimamente tantos sitios webs están utilizando lo que se llama Responsive Web Design o Diseño Web adaptable.

¿Qué es el Responsive Web Design o Diseño Web Adaptable?

Son una serie de técnicas que permiten a nuestra página web adaptarse al medio a través del cual un usuario está accediendo a la misma. Los tamaños de pantalla cambian según el medio con el que se accede (no es lo mismo una pantalla de un iPhone que la de un monitor panorámico de sobremesa) pero el usuario cada vez más exige que su experiencia usando nuestra web sea la óptima en cada caso concreto. Utilizando HTML y principalmente CSS podemos servir al usuario una versión de nuestra web en función del ancho de pantalla utilizado. Es decir, nuestra web se adapta al ancho de pantalla, responde ante los cambios del tamaño la misma. Además podemos pensar en mejorar el acceso a formularios, botones, etc… Eso es Responsive Web Design o Diseño Web Adaptable.

¿Por qué es importante el Diseño Web Adaptable?

La web a través del móvil en muchos casos está defraudando a los usuarios. ¿La razón? Los sitios no están optimizados, no están pensados para verse a través de una pantalla tan pequeña como la del móvil. Como decíamos antes, si el usuario es lo más importante no podemos permitir que esto suceda con nuestra web.

Además, la experiencia de usuario debe ser prioritaria a la hora de pensar en tu estrategia SEO. Las webs con mejor experiencia de usuario gustarán más, serán más compartidas, mejor valoradas, más populares. Y eso en SEO es muy importante.

Dado el gran número de medios y navegadores existentes no es factible crear una versión de nuestra web para cada uno de ellos, por lo que necesitamos un sistema para que nuestra web se adapte al contexto en el que está siendo vista, optimizándose de manera automática.

Sigue leyendo

LG prepara un smartphone con pantalla curva

lgz

 

 

El dispositivo, bautizado como G Flex, tendrá una pantalla OLED de plástico de 6 pulgadas, que se adaptará a la cara del usuario. Podría llegar en noviembre.

 

 

 

El fabricante coreano LG se suma a la moda de los smartphones con pantalla flexible. Tras el anuncio de Samsung de un teléfono con pantalla curva para este mes, LG ha respondido con la preparación de otro dispositivo con una pantalla curvada, para el que está trabajando con una tecnología de pantalla OLED de plástico.

LG tiene planeado introducir el dispositivo en noviembre, según ha podido conocer CNET, aunque esa fecha podría cambiar. Los planes de lanzamiento aún no son definitivos, pero probablemente el dispositivo lleve el nombre “G Flex”, de acuerdo con una persona familiarizada con los planes de lanzamiento de la empresa.

Los detalles del G Flex están surgiendo poco a poco. CNET aclara que una pantalla flexible no significa que el teléfono se pueda doblar. Más bien la pantalla se ajustará a una posición curva. Esta curva es lo suficientemente pronunciada como para rodear cómodamente la cara del usuario, pero no tiene un ángulo tan amplio que haga que se vea como algo raro.

La pantalla OLED curva tendrá un tamaño de 6 pulgadas, lo que sitúa al G Flex dentro del segmento de los phablets. La introducción de una pantalla curva resultará “ideal para hablar por teléfono”, según la compañía. De momento no se conocen más detalles, así que habrá que esperar a noviembre, a medida que se acerque la presentación del terminal, para conocer más detalles de sus especificaciones técnicas.

Con el lanzamiento del G Flex, da comienzo una nueva batalla en el universo de los gadgets, en este caso entre Samsung y LG por ser los primeros en lanzar dispositivos con pantallas curvadas y/o flexibles. Samsung planea lanzar al mercado de Corea del Sur a lo largo de este mes de octubre un nuevo teléfono inteligente con pantalla curva. Y Apple ha mostrado últimamente importantes avances en materiales flexibles para posibles nuevos productos.

Servidor Apache Portátil, llevalo en tu USB – Server2Go



server2go

Un servidor Apache es algo que seguro siempre querrás tener a mano si te dedicas al desarrollo web, si trabajamos a nivel local podemos usar Wamp, Xamp, pero que sucede si no queremos cargar con nuestra laptop o no estamos en casa para usar nuestra computadora de escritorio, entonces sería bueno contar con una versión portátil de un servidor web.

Server2Go es una buena opción para llevar Apache en el bolsillo, este increíble proyecto (gratuito) nos permitirá tener un servidor Apache, con PHP y MySQL, en un CD o USB, listo para funcionar sin necesidad de instalar nada en nuestra máquina.

Server2Go se instala a partir de un fichero ejecutable, que al ser descomprimido, crea una carpeta donde quedan instaladas las aplicaciones que habíamos seleccionado en la configuración.

Además de su facilidad de instalación, Server2Go, soporta PHP 5MySQL 5,SQLite Pearl 5.8. Su sistema está basado en Apache y está disponible paraWindows (98, XPVista y 7), Mac OS X y GNU/Linux.

Características principales de Server2Go:

  • Es un servidor web basado en Apache, y esto da bastante confianza, ya que Apache nunca defrauda.
  • Soporta las versiones posteriores de Internet Explorer 6FirefoxSafariCamino y algunos otros navegadores.
  • Soporta la base de datos SQLite.
  • Detecta automáticamente el nombre del host y el puerto cuando iniciamos el navegador.
  • Se apaga automáticamente cuando se cierra el navegador.
  • Soporta PHP 5 con multiples extensiones instaladas.
  • Soporta Windows 98 y versiones posteriores de éste, Mac OS X yGNU/Linux.

Puedes descargar este completo servidor web portable desde la página del creador.

CSS Sprites, qué es y ejemplo

 
35-social-icons-sprites

¿Qué es un CSS Sprites?

Es una técnica con la que agrupamos todas (o lo que consideremos) nuestras imágenes en un solo archivo de mayor tamaño que incluye a todas las imágenes, para luego «separarlas» mediante CSS. De esta forma reducimos el numero de peticiones y hacemos nuestro sitio mucho mas ligero. Si tenemos 45 iconos a mostrar, estos serán 45 peticiones, pero una vez utilizada la técnica CSS Sprites, estaremos logrando una solo petición.

Ventaja

Además de la ya comentada ventaja de no tener que hacer tantas peticiones al servidor será más fácil tener organizados nuestros iconos en un sólo archivo por temática o utilidades (redes sociales, iconos de reproducción, enlaces…). Y por otra parte es otra manera de tener precargadas nuestras imágenes, por lo que si vamos a realizar un rollover no vamos a tener un efecto raro la primera vez que cargue (evitamos el retardo por la carga).

Principal problema

Esta técnica puede resultar un tanto tediosa para los Amateurs, ya que tenemos que crear un nuevo archivo, colocar todas nuestras imágenes y comenzar a tomar medidas para luego en nuestra hoja de estilo separar cada imagen mediante background-position, lo cual si son 45 imágenes tendremos que definir 45 posiciones en nuestra hoja de estilo, algo molesto.

Atajo

Existen en la red una cantidad importante de generadores de CSS Sprites que realizan el trabajo por nosotros, como pueden ser el Project Fondue o CSS Sprites generator. El principal problema de usar este tipo de servicios es que no tenemos mucho control total sobre el Sprite generado. Pero es una buena forma de comenzar.
Yo personalmente uso un Script para Photoshop que nos permite realizar CSS Sprites sencillos, este Script es AtlasCSS. Una vez instalado el Script generara el Sprite por nosotros junto con el CSS necesario, pero de esto os hablaré en otro post.

Uso

Para este ejemplo he elegido un conjunto de iconos de redes sociales que podéis descargar:

[wpdm_file id=4]

 

De todos estos icono he elegido 14 con sus correspondiente rollover para hacer el ejemplo y tras ejecutar el Script de Photoshop con los icono he generado el siguiente PNG con todos ellos:

AtlasSheet#0

 

Y el CSS resultante es:

.black%20social%20apple%20icon { background-position:  -0px -0px; height: 24px; width: 24px; }
.black%20social%20blogger%20icon { background-position:  -0px -24px; height: 24px; width: 24px; }
.black%20social%20facebook { background-position:  -0px -48px; height: 24px; width: 24px; }
.black%20social%20flickr { background-position:  -0px -72px; height: 24px; width: 24px; }
.black%20social%20google { background-position:  -24px -0px; height: 24px; width: 24px; }
.black%20social%20googleplus { background-position:  -24px -24px; height: 24px; width: 24px; }
.black%20social%20linkedin { background-position:  -24px -48px; height: 24px; width: 24px; }
.black%20social%20myspace { background-position:  -24px -72px; height: 24px; width: 24px; }
.black%20social%20rss { background-position:  -48px -0px; height: 24px; width: 24px; }
.black%20social%20skype { background-position:  -48px -24px; height: 24px; width: 24px; }
.black%20social%20twitter { background-position:  -48px -48px; height: 24px; width: 24px; }
.black%20social%20vimeo { background-position:  -48px -72px; height: 24px; width: 24px; }
.black%20social%20yahoo { background-position:  -72px -0px; height: 24px; width: 24px; }
.black%20social%20youtube { background-position:  -96px -0px; height: 24px; width: 24px; }
.blue%20social%20apple%20icon { background-position:  -120px -0px; height: 24px; width: 24px; }
.blue%20social%20blogger%20icon { background-position:  -144px -0px; height: 24px; width: 24px; }
.blue%20social%20facebook { background-position:  -72px -24px; height: 24px; width: 24px; }
.blue%20social%20flickr { background-position:  -72px -48px; height: 24px; width: 24px; }
.blue%20social%20google { background-position:  -72px -72px; height: 24px; width: 24px; }
.blue%20social%20googleplus { background-position:  -96px -24px; height: 24px; width: 24px; }
.blue%20social%20linkedin { background-position:  -120px -24px; height: 24px; width: 24px; }
.blue%20social%20myspace { background-position:  -144px -24px; height: 24px; width: 24px; }
.blue%20social%20rss { background-position:  -96px -48px; height: 24px; width: 24px; }
.blue%20social%20skype { background-position:  -96px -72px; height: 24px; width: 24px; }
.blue%20social%20twitter { background-position:  -120px -48px; height: 24px; width: 24px; }
.blue%20social%20vimeo { background-position:  -144px -48px; height: 24px; width: 24px; }
.blue%20social%20yahoo { background-position:  -120px -72px; height: 24px; width: 24px; }
.blue%20social%20youtube { background-position:  -144px -72px; height: 24px; width: 24px; }

 

Ahora subiendo la imagen y utilizando los class del CSS tengo todos los iconos necesarios en un sólo archivo (en una sola petición al servidor).

Si necesitáis más ayuda no dudéis en comentar !!

Lista de snippets de Objective C más usados



073915-retro-green-floral-icon-alphanumeric-bracket-curley

 

Buscando código que me hacía falta he recopilado una pequeña lista de snippets de Objective C que nos pueden venir bien a cualquiera en algún momento y siempre viene bien tenerlos a mano.

 

 

Abrir una URL en Safari

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.google.com/"]];

Ocultar la barra de estado

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];

Marcar un número de teléfono (sólo para iPhone)

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://9662256888"]];

Abrir la aplicacion Apple Mail

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://mymail@myserver.com"]];

Dejar de responder a los eventos touch

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];

Activar los eventos touch

[[UIApplication sharedApplication] endIgnoringInteractionEvents];

Mostrar el indicador de actividad de red

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

Ocultar el indicador de actividad de red

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

Evita el modo de suspensión en el iPhone

[UIApplication sharedApplication].idleTimerDisabled = YES;

Espero que os sean de ayuda como me lo han sido a mi.

Subir una imagen del iPhone al servidor con Objective C



Learn-Objective-C
Después de buscar bastante por Google conseguí encontrar la forma de subir una imagen (cualquier archivo para el caso) desde el iPhone a un servidor remoto. Es una función simple que puede ser incluida y utilizada en todos los proyectos. En mi caso, el servidor tiene un script PHP.

Así es cómo se utiliza la función:

// campos de formulario, campos y valores
NSArray *formfields = [NSArray arrayWithObjects:@"nombre", @"fecha", @"titulo", @"comentarios", nil];
NSArray *formvalues = [NSArray arrayWithObjects:@"NecsaL Blog", @"23-03-2013", @"Foto de prueba", @"Comentario de la foto", nil];
NSDictionary *textos = [NSDictionary dictionaryWithObjects:formvalues forKeys:formfields];

// si hay varias imagenes en el formulario
NSArray *imagenes = [NSArray arrayWithObjects:@"image1.png", @"image2.png", nil];

// enviar el formulario
[self doPostWithText:textos andImage:imagenes];

Esta es la función definida como doPostWithText:andImage:

- (void) doPostWithText:(NSDictionary *)textos andImage:(NSArray *)imagenes 
{
    NSString *urlString = @"http://misitio.com/miscript.php";
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"POST"];

    NSMutableData *body = [NSMutableData data];

    NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
    [request addValue:contentType forHTTPHeaderField:@"Content-Type"];

	// añadimos las imagenes
	for (int i=0; i<[imagenes count]; i++) {
		[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
		[body appendData:[[NSString stringWithFormat:@"Content-Disposition: attachment; name=\"imagen%d\"; filename=\"%@\"\r\n", i, [imagenes objectAtIndex:i]] dataUsingEncoding:NSUTF8StringEncoding]];
		[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
		[body appendData:[NSData dataWithData:UIImageJPEGRepresentation([UIImage imageNamed:[imagenes objectAtIndex:i]], 90)]];
		[body appendData:[[NSString stringWithString:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];

	}

	// añadimos los campos y los valores
	for (id key in textos) {
		[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
		[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]];
		[body appendData:[[NSString stringWithString:[textos objectForKey:key]] dataUsingEncoding:NSUTF8StringEncoding]];
		[body appendData:[[NSString stringWithString:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
	}

    // cerramos el formulario
    [body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

    // seteamos el body en el request
    [request setHTTPBody:body];

    // envía la request (envia el formulario) and obtiene la respuesta de script PHP en este caso
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

    NSLog(@"%@", returnString);
}

Por el lado de PHP que recibirá los datos de esta manera:

– Tendremos los campos y sus valores en el $_POST

Array
(
    [nombre] => NecsaL Blog
    [fecha] => 23-03-2013
    [titulo] => Foto de prueba
    [comentario] => Comentario de la foto
)

– Y las imágenes en el $_FILES

Array
(
    [imagen0] => Array
        (
            [name] => imagen1.png
            [type] => application/octet-stream
            [tmp_name] => /junk/temp/phpsKiVxx
            [error] => 0
            [size] => 21602
        )

    [imagen1] => Array
        (
            [name] => imagen2.png
            [type] => application/octet-stream
            [tmp_name] => /junk/temp/phpNVGDoB
            [error] => 0
            [size] => 4520
        )

)

Espero que este snippet os sea de ayuda. Para cualquier pregunta no dudéis en comentar.

Filtradas algunas especificaciones oficiales del Samsung Galaxy S4

 

Samsung-Galaxy-S4-

Tras el lanzamiento del HTC One, con una gran presencia y reconocimiento en el pasado Mobile World Congress de Barcelona, y la salida ya al mercado del Sony Xperia Z de los japoneses de Sony, ya sólo queda por salir al mercado el que conformará la tercera pata del tridente que luchará por hacerse con el primer puesto en la carrera por ser el mejor smartphone del presente 2013. El Samsung Galaxy S4, que se presentará dentro de 11 días, está levantando tan altas expectativas que quizá su competencia esté arrepintiéndose de lanzar sus modelos antes y no después del mismo, por las posibles mejoras de última hora para competir en la misma división. Ahora se han desvelado algunas de las características oficiales del nuevo Samsung Galaxy S4 por medio de AnTuTu, un conocido benchmark que ha dejado una huella digital de lo que será el siguiente buque insignia de Samsung.

AnTuTu-Benchmark-Samsung-Galaxy-S4-e1362317098151

Como vemos, el benchmark desvelado revela un procesador Exynos 5410, un Exynos 5 Octa, con 8 núcleos (4+4) a 1,8 Ghz con una GPU ARM PowerVR SGX 544MP.

El sistema es Android 4.2, aunque esto estaba ya prácticamente confirmado, y portará una pantalla de 4,99 pulgadas con resolución Full HD. La cámara no se muestra en la captura pero se confirma que será de 13 megapíxeles con grabación de vídeo en FullHD.

Hasta el momento es la filtración más fiable de todas las que se han publicado en torno al futuro Samsung Galaxy S4 que, como decimos, se presentará en sociedad dentro de 11 días. ¿Qué dejará Samsung para esta presentación si las especificaciones salen todas a la luz con esta claridad?  Esperemos que el Project J y sus Galaxy S4 mini y Galaxy Altius smartwatch.

 

Fuente Twitter Faryaab

Cómo usar un PenDrive como Memoria RAM

 

1. Inserte tu USB

2. Entra a E (como se muestra en la imagen)

Imagen 1

3. Ahora le damos clic derecho en la  USB y seguidamente das clic en propiedades

Imagen 2

4. Cuando ya estemos en propiedades buscamos una pestaña donde dice ReadyBoost y le damos clic

Imagen 3

5. Cuando entramos a esa pestaña nos dice que el dispositivo no esta siendo usado, entonces tenemos que cambiarlo y le damos clic en usar este dispositivo y luego en aceptar

Imagen 4

Y esperamos………….

Imagen 5

Y listo !!!

Imagen 6

 

Y listo tu USB esta siendo Utilizada como memoria RAM

NOTA: esto solo funciona con w7 w8 y no estoy muy seguro si con Wvista. Con XP no funciona necesitas un Programa, si tienes un PC malo notarás mucha diferencia, si es medio bueno no sera mucho y si es bueno casi no sentirás diferencia en la velocidad del sistema.

Espero que os haya servido y consigáis trabajar un poco mejor 😉

Facebook presenta: Graph Search, un buscador para la red social

 

facebook-graph-search-icon
Facebook lanzó este martes un motor de búsqueda que permitirá encontrar de manera más eficaz contenidos en la red social para saber más de los «amigos» que tenga el usuario, en lo que se ha considerado como un potente desafío a Google y a otras firmas de internet.

«Consideramos Facebook como una gran base de datos sociales» y «como cualquier base de datos, deberíamos poder realizar búsquedas dentro de ella», indicó el presidente y cofundador de la compañía, Mark Zuckerberg, al lanzar la nueva función en un evento organizado en el campus del grupo en Menlo Park, California (oeste de Estados Unidos).
El nuevo motor de búsqueda trata de ayudar a los usuarios a navegar mejor entre la gran cantidad de información existente en Facebook, la cual no está disponible en otros buscadores web como Google.

A diferencia de los buscadores tradicionales, como el de Google, el de Facebook, bautizado como «Graph Search», no realizará búsquedas en todo internet, subrayó el fundador de la red social, pero podrá ayudar a encontrar cierta información archivada en la red y en los contenidos de los «amigos» del usuario.

«Cada parte de contenido en Facebook tiene su propia audiencia, y la mayoría del contenido no es público», remarcó un comunicado de la empresa californiana.

«Construimos Graph Search desde el principio con la privacidad en mente, y respeta la privacidad y la audiencia de cada porción de contenido en Facebook. Hace que se encuentren las cosas de una manera mucho más fácil, pero usted sólo podrá ver lo que ya haya podido ver en otro lugar de Facebook».