S’apropa el dia!

No m’en faig a la idea però em queda poc per marxar. Setmana per fer la maleta i les despedides.

Ufff costa una mica de fer una maleta per anar a un lloc on fa molt fred a l’hivern i molta calor a l’estiu pero intento pensar tot el que em farà falta sabent que em deixo algo segur, però es igual el que em falti já ho trobaré allí. Poc a dir del tema maleta a part que m’emporto una bandera de Vallfogona, segur que li trobo algun lloc a casa.

IMG_20150111_115702699

Despedides!!! Com molen les despedides quan són abans d’una història com aquesta, sobretot si ets tú el que marxes. El dia abans de reis copeta de vi al Xirricló amb l’Ivan i la Laura i cubates a Balaguer, paraaaaa.

IMG-20150106-WA0001

Dia de reis dinar de despedida al Xirriclo una altre cop amb pares, germanes i cunyats i a la sobretaula s’apunten la Teresita i el Josep. Passo el dinar amb bastanta ressaca pero amb un menjar espectacular, m’ha caigut com a regal una estelada. Tot i que a USA son bastant de banderes no se si aquesta la penjaré al balcó.

IMG-20150106-WA0007

Encara em falten tres dies treballant a la oficina de Barcelona abans de marxar, però no puc fer cap celebració amb la gent de la feina. Tampoc he pogut fer les birres de rigor amb el Marc ni els Gins amb l’Arnau, ja celebrarem la tornada, jusjus.

IMG_20150111_210409487

Divendres a la nit despedida a Sant Cugat bastant emotiva i un altre cop amb ressaca cap a Vallfogona a dinar. Hem quedat a Sant Llorenç amb la colla pessigolla i com no arribo tard. El Narcís, l’Anna i el Biel, l’Anna, la Merce, el Clari, l’Ivan i la Laura, i el Parrot i l’altra Laura. També m’emporto una sorpresa i m’hi trobo al Jordi, a la Keiko i a l’Aiko. Merci a tots per venir!!

IMG-20150110-WA0002IMG-20150111-WA0010

Després de dinar fem una sobretaula que dura fins a les molt tard, jajajajaja. Amb regal d’una maleta inclòs. Tot molt correcte!

IMG-20150111-WA0016

A l’undemà dinar a Vallfogona amb els tiets i el Joan. L’Oriol no ha pogut venir que està malalt a Barcelona. I un altre regal!!! Aquesta ja és la última abans de marxar.
Us trobaré a faltar a tots!! I mentre no acabi l’hivern als meus esquís també. Em sap greu Ivan i Parrot però espero que aquest any no caigui ni mig pam de neu.

google maps sdk as a subview

First follow getting started steps at google maps sdk developer guide.

Add a new UIView to your project and set its class to GMSMapView. Drag it to your code to set IBOutlet.

MapView.h

[code language=”objc”]

@interface GeoPosicionarViewController : UIViewController{
IBOutlet GMSMapView *MapView;
}

[/code]

MapView.m

[code language=”objc”]

@implementation GeoPosicionarViewController{
GMSMapView *mapView_;
}

– (void)viewDidLoad {

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
longitude:151.20
zoom:6];

mapView_ = [GMSMapView mapWithFrame:MapView.bounds camera:camera];
mapView_.myLocationEnabled = YES;
[MapView addSubview:mapView_];

GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake(-33.86, 151.20);
marker.title = @"Sydney";
marker.snippet = @"Australia";
marker.map = mapView_;
[super viewDidLoad];

}

[/code]

jersey and ios basic authentication

Main goal is to authenticate an ios client against a REST service build with jersey and http basic authentication (rfc2617).

As I wanted authentication to be done by jersey and not tomcat, I needed to add WWW-Authentication header field. This is handled at unauthorized custom exception (found at this post, thanks!!!).

Client

[sourcecode language=”objc”]

– (IBAction)loginPush:(id)sender {
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http:url.kom"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];

NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
}

– (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
}

– (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}

– (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
return YES;
}

– (void)connectionDidFinishLoading:(NSURLConnection *)connection {

}

– (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
NSURLCredential *newCredential = [NSURLCredential credentialWithUser:@"user"
password:@"password"
persistence:NSURLCredentialPersistenceForSession];
[[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge];
}

[/sourcecode]

Server

Jersey resource

[sourcecode language=”java”]
@Path("/hello")
public class HelloResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayHello() {
return "Hello Jersey";
}
}
[/sourcecode]

Jersey filter

[sourcecode language=”java”]
public class AuthFilter implements ContainerRequestFilter {

private final static WebApplicationException unauthorized =
new WebApplicationException(
Response.status(Status.UNAUTHORIZED)
.header(HttpHeaders.WWW_AUTHENTICATE, "Basic realm="realm"")
.entity("Page requires login.").build());
@Override
public ContainerRequest filter(ContainerRequest containerRequest) throws WebApplicationException {

String auth = containerRequest.getHeaderValue("authorization");

if(auth == null){
throw unauthorized;
}

String[] lap = BasicAuth.decode(auth);

if(lap == null || lap.length != 2){
throw unauthorized;
}

if(!lap[0].equals("user") || !lap[1].equals("password")){
throw unauthorized;
}

return containerRequest;
}
}
[/sourcecode]

web.xml
[sourcecode language=”xml”]
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>Hello jersey REST Service</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>sample.hello.resources</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>sample.hello.resources.AuthFilter</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Hello jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
[/sourcecode]