tag:blogger.com,1999:blog-40985830246528474022024-03-13T14:41:59.995+01:00InformaticoInglese: sognando il Regno Unito (o Londra)Volontà, chi ce l'ha, è il più forte dei forti, niente lo fermerà!Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.comBlogger38125tag:blogger.com,1999:blog-4098583024652847402.post-3566134970191884502014-01-31T19:00:00.000+01:002014-01-31T19:00:00.867+01:00C# - How to send an email using the socketThe standard .NET library give you an easy and quick way to send an email in C#. But sometimes you need to set some values in the header and it's not possible to do that using System.Net.Mail.MailMessage. An example is the enveloper from and to set it, the only way, is to set the sender. What if do you need a different sender and envelope from? One way is to send the mail using the socket.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6gmLLiYXE1osqe09Y2ABG-_bWzsPt_9c53iB74bVWp6KdIi66QhBq2AfP23LsyG7oQ2J0TFoA3Lc9EUACOWIJMe9x_Tytn1Baixr37VeCs2higi_iD1uMZL4zZyN8gSmJrCG6tN4U4ars/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Net.Sockets;
using Admin.Models;
using System.Net.Mail;
namespace Admin.Services.Implementation
{
/// <summary>
/// <para>Wraps an smtp request</para>
/// </summary>
public class SmtpService : ISmtpService
{
/// <summary>
/// Get / Set the name of the SMTP mail server
/// </summary>
private enum SMTPResponse : int
{
CONNECT_SUCCESS = 220,
GENERIC_SUCCESS = 250,
DATA_SUCCESS = 354,
QUIT_SUCCESS = 221
}
private const int timeOutLimit = 1000;
bool ISmtpService.Send(MailMessage message, string SmtpServer, string returnPath)
{
IPAddress localIPAddress = IPAddress.Parse(SmtpServer);
IPEndPoint endPt = new IPEndPoint(localIPAddress, 25);
using (Socket s = new Socket(endPt.AddressFamily, SocketType.Stream, ProtocolType.Tcp))
{
//set timeout
s.ReceiveTimeout = timeOutLimit;
s.SendTimeout = timeOutLimit;
// try to establish the connection
s.Connect(endPt);
if (!Check_Response(s, SMTPResponse.CONNECT_SUCCESS))
{
s.Close();
return false;
}
// say hello to the server to identify myself
SendData(s, string.Format("HELO {0}\r\n", Dns.GetHostName()));
if (!Check_Response(s, SMTPResponse.GENERIC_SUCCESS))
{
s.Close();
return false;
}
// set the mail from in the envelope
SendData(s, string.Format("MAIL From: {0}\r\n", returnPath));
if (!Check_Response(s, SMTPResponse.GENERIC_SUCCESS))
{
s.Close();
return false;
}
// set the email to in the envelope
if (message.To.Count > 0)
{
foreach (var to in message.To)
{
SendData(s, string.Format("RCPT TO: {0}\r\n", to.Address));
if (!Check_Response(s, SMTPResponse.GENERIC_SUCCESS))
{
s.Close();
return false;
}
}
}
else
return false;
// add bcc to the envelope
if (message.Bcc.Count > 0)
{
foreach (var to in message.Bcc)
{
SendData(s, string.Format("RCPT TO: {0}\r\n", to.Address));
if (!Check_Response(s, SMTPResponse.GENERIC_SUCCESS))
{
s.Close();
return false;
}
}
}
// create the header as string builder
StringBuilder Header = new StringBuilder();
Header.Append("MIME-Version: 1.0\r\n");
// email priority
Header.Append("Importance: " + message.Priority.ToString() + "\r\n");
// set the from
Header.Append("From: " + message.From.DisplayName + " <" + message.From.Address + ">\r\n");
// set the reply to
Header.Append("Reply-To: " + message.ReplyToList.FirstOrDefault() + "\r\n");
// set the email to
Header.Append("To: ");
int i = 0;
foreach (var To in message.To)
{
Header.Append(i > 0 ? "," : "");
Header.Append(To.Address);
i++;
}
Header.Append("\r\n");
// set the cc
if (message.CC.Count > 0)
{
Header.Append("Cc: ");
i = 0;
foreach (MailAddress To in message.CC)
{
Header.Append(i > 0 ? "," : "");
Header.Append(To.Address);
i++;
}
Header.Append("\r\n");
}
// set the email subject
Header.Append("Subject: " + message.Subject + "\r\n");
Header.Append("Date: ");
Header.Append(DateTime.Now.ToString("R"));
Header.Append("\r\n");
string MsgBody = message.Body;
if (!MsgBody.EndsWith("\r\n"))
MsgBody += "\r\n";
//generate a unique boundary for this email
var uniqueBoundary = EncodeTo64("uniqueboundary" + DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz"));
Header.Append("Content-Type: multipart/alternative; boundary=" + uniqueBoundary + "\r\n");
Header.Append("This is a multi-part message in MIME format.\r\n");
// adding message body
SendData(s, ("DATA\r\n"));
if (!Check_Response(s, SMTPResponse.DATA_SUCCESS))
{
s.Close();
return false;
}
if (message.Attachments.Count > 0)
{
StringBuilder sb = new StringBuilder();
foreach (Attachment attachment in message.Attachments)
{
byte[] binaryData;
if (attachment != null)
{
sb.Append("--" + uniqueBoundary + "\r\n");
sb.Append("Content-Type: application/octet-stream; file=" + attachment.Name + "\r\n");
sb.Append("Content-Transfer-Encoding: base64\r\n");
sb.Append("Content-Disposition: attachment; filename=" + attachment.Name + "\r\n");
sb.Append("\r\n");
var fs = attachment.ContentStream;
binaryData = new Byte[fs.Length];
long bytesRead = fs.Read(binaryData, 0, (int)fs.Length);
fs.Close();
string base64String = System.Convert.ToBase64String(binaryData, 0, binaryData.Length);
for (int j = 0; j < base64String.Length; )
{
int nextchunk = 100;
if (base64String.Length - (j + nextchunk) < 0)
nextchunk = base64String.Length - j;
sb.Append(base64String.Substring(j, nextchunk));
sb.Append("\r\n");
j += nextchunk;
}
sb.Append("\r\n");
}
}
Header.Append(sb.ToString());
}
Header.Append("--" + uniqueBoundary + "\r\n");
// is an html email?
if (message.IsBodyHtml)
{
Header.Append("Content-Type: text/html; charset=\"UTF-8\"\r\n");
Header.Append("Content-Transfer-Encoding: 7bit\n");
}
else
Header.Append("Content-Type: text/plain; charset=\"UTF-8\"\r\n");
Header.Append("\r\n");
Header.Append(MsgBody);
Header.Append("--" + uniqueBoundary + "--\r\n");
Header.Append(".\r\n");
// send the email
SendData(s, Header.ToString());
if (!Check_Response(s, SMTPResponse.GENERIC_SUCCESS))
{
s.Close();
return false;
}
// close the connection
SendData(s, "QUIT\r\n");
Check_Response(s, SMTPResponse.QUIT_SUCCESS);
s.Close();
}
return true;
}
// send a message using the socket
private static void SendData(Socket s, string msg)
{
byte[] _msg = Encoding.UTF8.GetBytes(msg);
s.Send(_msg, 0, _msg.Length, SocketFlags.None);
}
// check if the socket response watch the one expected
private static bool Check_Response(Socket s, SMTPResponse response_expected)
{
string sResponse;
int response;
byte[] bytes = new byte[1024];
s.Receive(bytes);
sResponse = Encoding.ASCII.GetString(bytes);
response = Convert.ToInt32(sResponse.Substring(0, 3));
if (response != (int)response_expected)
return false;
return true;
}
private string EncodeTo64(string toEncode)
{
byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
return returnValue;
}
}
}
</code></pre>
<br />
Every time we send some data through the socket using the method SendData, we need to check the response from the server. If the answer is positive we proceed sending the next bunch of data.<br />
<br />
<br />Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-4093400423360038432013-11-25T16:46:00.000+01:002013-11-25T16:50:00.022+01:00C# - How to set the Mail From EnvelopeWhen you send an email using System.Net.Mail you can set the field FROM but you can not set the SMTP MAIL FROM envelope. It is possible to set that value just using the MailMessage.Sender property. Here it is the code:<br />
<br />
<blockquote class="tr_bq">
using (MailMessage mailMsg = new MailMessage())<br />{<br /> mailMsg.Subject = "Hello There";<br /> mailMsg.Body = "This is a test.";<br /> mailMsg.To.Add(new MailAddress("xxxxx@gmail.com"));<br /> mailMsg.ReplyToList.Add("replyhere@gmail.com");<br /> mailMsg.From = new MailAddress("me@gmail.com", "Alessandro");<br /> mailMsg.Sender = new MailAddress("somereturnpath@example.co.uk");<br /> SmtpClient client = new SmtpClient<br /> {<br /> Host = "localhost",<br /> DeliveryMethod = SmtpDeliveryMethod.Network<br /> };<br /> <br /> client.Send(mailMsg);<br />}</blockquote>
<br />
It is important to set the DeliveryMethode to "Network" in order to let the system to set the MAIL FROM envelope from the sender.<br />
<br />
And here is the proof:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv5jjr-Y9JMUF3XUxVT9sLhaxs8EfxHVnR_dUkOogfHccKgwuZ97xlHhh2iLIZ52WRSOlGX6pxaEEYCbF2vD10J01s7aFmwVlcHLoBlRUBtGEFOgGL5T-Hv4jpUPMVgwp75GouI4sxN_K7/s1600/mailfrom.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv5jjr-Y9JMUF3XUxVT9sLhaxs8EfxHVnR_dUkOogfHccKgwuZ97xlHhh2iLIZ52WRSOlGX6pxaEEYCbF2vD10J01s7aFmwVlcHLoBlRUBtGEFOgGL5T-Hv4jpUPMVgwp75GouI4sxN_K7/s400/mailfrom.png" width="400" /></a></div>
<br />
<br />Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-10485630465145370392013-07-08T09:00:00.000+02:002013-10-11T14:44:25.601+02:00Pension scheme: la pensione nel Regno Unito<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="margin-left: 1em; margin-right: 1em;">
</div>
Lo so che magari avete appena iniziato a lavorare ma se avete programmato un futuro a lungo termine nel Regno Unito, sarebbe anche il caso di iniziare a pensare alla pensione.<br />
<div>
Partiamo dalla pensione di stato: vi vengono detratte delle tasse dallo stipendio e parte di queste serviranno a pagare la vostra pensione. Attualmente lo stato paga £110.15 a settimana. Insomma poco piu di 400 pound al mese, un po' pochine per poter pensare di vivere in tranquillita'!</div>
<div>
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i.telegraph.co.uk/multimedia/archive/01237/pension_1237582c.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://i.telegraph.co.uk/multimedia/archive/01237/pension_1237582c.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
<br /></div>
<div>
Occorre quindi che iniziate a pensare a uno schema pensionistico privato! In questo caso parliamo di un "pot" dove voi, il vostro datore di lavoro e lo stato versate una piccola quota ogni mese e che andra' a formare la vostra pensione quando deciderete sia il caso di ritirarvi dalla vita lavorativa. Ovviamente il tutto esentasse.</div>
<div>
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.standard.co.uk/panewsfeeds/article8825947.ece/ALTERNATES/w460/The+Office+of+Fair+Trading+is+seeking+to+ensure+new+savers+do+not+waste+their+money+on+rip-off+pension+schemes" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://www.standard.co.uk/panewsfeeds/article8825947.ece/ALTERNATES/w460/The+Office+of+Fair+Trading+is+seeking+to+ensure+new+savers+do+not+waste+their+money+on+rip-off+pension+schemes" width="318" /></a></div>
<br /></div>
<div>
<br /></div>
<div>
Esistono diversi tipi di pensioni private. Il concetto di base rimane lo stesso ma quello che cambia e' il modo in cui i soldi "messi da parte" sono investiti. </div>
<div>
<br /></div>
<div>
- <b>Standard pension</b>: con questo tipo di pensione il lavoratore e il datore di lavoro versano una cifra mensilmente nel pot e i soldi sono investiti da una "pension company" fino all'eta' di pensionamento</div>
<div>
- <b>Stakeholder pension</b>: simile alla pensione standard ma ha condizioni piu' flessibili. La contribuzione minima e' minore, costi minori e scelte di investimento gia' definite cosi il lavoratore non ha bisogno di decidere dove investire i soldi.</div>
<div>
- <b>Self-invested personal pensions (Sipps)</b>: alternativa alla stakeholder pension. In questo caso potete decidere voi dove investire i vostri soldi. Ci sono servizi finanziari che vi permettono di investire i vostri soldi in aziende come Apple, Amazon ecc. Ovviamente il tutto a vostro rischio e pericolo. Probabilmente investendo pochi soldi in moltissime aziende si dovrebbero quasi azzerare i rischi garantendo un minimo di guadagno.</div>
<br />
Ecco qui una tabella riassuntiva (<a href="http://www.moneysavingexpert.com/">fonte</a>):<br />
<table border="0" cellpadding="0" cellspacing="0" class="dataTable" style="background-color: #fcfcfc; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-collapse: collapse; border-spacing: 0px; border-top-left-radius: 5px; border-top-right-radius: 5px; border: 1px solid rgb(218, 218, 218); color: #333333; font-family: 'Segoe UI', Candara, 'Bitstream Vera Sans', 'DejaVu Sans', 'Bitstream Vera Sans', 'Trebuchet MS', Verdana, 'Verdana Ref', 'sans serif'; font-size: 12px; margin: 30px auto 18px; text-shadow: rgba(255, 255, 255, 0.901961) 0px 1px 0px; width: 521px;"><thead>
<tr><th style="border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px;">Pension</span></th><td style="border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;"><strong style="border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">Can you contribute?</strong></span></td><td style="border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;"><strong style="border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">Can your employer contribute?</strong></span></td><td style="border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-style: none !important; padding: 11px 5px; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;"><strong style="border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">Do you invest the cash?</strong></span></td></tr>
</thead><tbody>
<tr><th style="background-color: #f3f7f7; border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px;">Standard pension</span></th><td style="background-color: #f3f7f7; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px; position: relative; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">Yes</span></td><td style="background-color: #f3f7f7; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px; position: relative; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">Yes</span></td><td style="background-color: #f3f7f7; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-style: none !important; padding: 11px 5px; position: relative; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">Yes</span></td></tr>
<tr><th style="background-color: #f3f7f7; border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px;">Stakeholder pension</span></th><td style="border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">Yes</span></td><td style="border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">Yes</span></td><td style="border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-style: none !important; padding: 11px 5px; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">Yes</span></td></tr>
<tr><th style="background-color: #f3f7f7; border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px;">Sipp</span></th><td style="background-color: #f3f7f7; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px; position: relative; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">Yes</span></td><td style="background-color: #f3f7f7; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px; position: relative; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">Yes</span></td><td style="background-color: #f3f7f7; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-style: none !important; padding: 11px 5px; position: relative; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">Yes</span></td></tr>
<tr><th style="background-color: #f3f7f7; border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px;">Final salary</span></th><td style="border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">Yes</span></td><td style="border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">Yes</span></td><td style="border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-style: none !important; padding: 11px 5px; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">No</span></td></tr>
<tr><th style="background-color: #f3f7f7; border-bottom-style: none !important; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px;">State pension</span></th><td style="background-color: #f3f7f7; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none !important; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px; position: relative; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">Yes, by paying national insurance</span></td><td style="background-color: #f3f7f7; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none !important; border-right-color: rgb(229, 229, 229); border-right-style: solid; border-right-width: 1px; padding: 11px 5px; position: relative; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">No</span></td><td style="background-color: #f3f7f7; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none !important; border-right-style: none !important; padding: 11px 5px; position: relative; text-align: center;"><span style="border: 0px; font-family: inherit; font-size: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px;">No</span></td></tr>
</tbody></table>
<br />
<div>
Io non ho ancora deciso quale schema scegliere ma dovro' farlo presto. Inoltre vi invito a prendere tutte le informazioni che trovate in retecon le pinze e rivolgervi sempre a qualcuno che ha esperienza nel campo perche' con la pensione non si scherza!</div>
Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0London, UK51.511213899999987 -0.1198243999999704151.195100899999986 -0.7652713999999704 51.827326899999989 0.52562260000002958tag:blogger.com,1999:blog-4098583024652847402.post-89813013504849914412013-07-04T11:58:00.000+02:002013-07-04T11:58:57.128+02:00Json.NetJSON e' diventato uno standard molto diffuso nell'ambito delle web application e sta pian piano sostituendo XML come standard per lo scambio di dati in ambito web. Per chi come me lavora con C#, trovera' molto utile la libreria Json.Net. Questa libreria permette la serializzazione e deserializzazione di oggetti JSON in maniera veloce ed intuitiva.<br />
Come mostrato nella figura 1, le performance sono sicuramente un punto di forza di questa libreria.<br />
<br />
<img src="http://james.newtonking.com/images/jsonperformance.png" /><br />
<br />
Diamo ora uno sgurado piu da vicino al codice. Supponiamo di ricevere la seguente stringa e di voler estrarre i dati contenuti al suo interno:<br />
<br />
{<br />
"global": {<br />
"TITLE": "global TITLE",<br />
"FIRSTNAME": "global FIRSTNAME",<br />
"LASTNAME": "global LASTNAME",<br />
"USERNAME": "global USERNAME",<br />
"COMPANYNAME": "global COMPANYNAME"<br />
}<br />
}<br />
<br />
Ecco il codice C#:<br />
<br />
<blockquote class="tr_bq">
using Newtonsoft.Json.Linq;<br />
namespace Test<br />
{<br />
public class SavePlaceholder : Entity<br />
{<br />
public virtual IList<string> Placeholders { get; set; }<br />
public virtual void savePlaceholders(string json)<br />
{<br />
this.Placeholders = new List<string>();<br />
JObject jObject = JObject.Parse(json);<br />
foreach (var item in jObject)<br />
{<br />
foreach (JProperty token in item.Value)<br />
{<br />
var placeholder = token.Name;<br />
Placeholders.Add(placeholder);<br />
}<br />
}<br />
}<br />
}<br />
}</blockquote>
<br />
Il metodo parse della classe <i>JObject </i>ci permette di leggere la stringa in formato JSON e serializzarla in un oggetto. Scorrendo i diversi item che formano <i>jObject</i>, per ogni item andiamo ad estrarre le diverse proprieta' e successivamente salviamo per ogni coppia chiave-valore soltanto la chiave. In alternativa usando <i>token.Value</i> avremmo potuto estrarre il valore della proprieta'. Il risultato e' la seguente lista:<br />
<br />
TITLE<br />
FIRSTNAME<br />
LASTNAME<br />
USERNAME<br />
COMPANYNAME<br />
<br />
Per una documentazione dettagliata e maggiori esempi vi rimando al <a href="http://james.newtonking.com/pages/json-net.aspx">sito ufficiale</a>.<br />
<div>
<br /></div>
Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-50564347963087492642013-07-03T11:53:00.000+02:002013-07-03T11:53:18.019+02:00Regex per numeri telefonici in pythonQualche giorno fa mi sono imbattuto in un problema abbastanza comune quando si lavora con python e i "regex". Prima di tutto: cos'e' un regex? Regex sta per regular expression e serve ad individuare uno specifico pattern nel testo (cifre, indirizzo email, codice postale). Per una lettura approfondita vi rimando a <a href="http://it.wikipedia.org/wiki/Espressione_regolare">wikipedia</a>.<br />
Il mio problema era molto semplice: data la descrizione di un annuncio per proprieta' mobiliari, dovevo creare un regex in python per eliminare i numeri telefonici dalla descrizione.<br />
Ecco qui la soluzione:<br />
<br />
re.sub(r'(\d\.?\s*){8,}', '------', content )<br />
<br />
Breve spiegazione: il metodo sub della libreria re sostituisce tutte le occorrenze di una stringa con un altra stringa all'interno di un testo.La stringa "\d" identifica una qualsiasi cifra decimale; il ? ci dice che l'espressione precedente puo' apparire 0 o 1 volte (in questo caso l'espressione precedente e' un punto); la stringa"\s" identifica un qualsiasi whitespace, cioe' un semplice spazio, e l'asterisco indica che l'espressione precedente puo' essere ripetuta n volte; infine {8,} ci dice che il nostro regex dovra' trovare la struttura precedentemente specificata almeno 8 volte (cioe' il codice definito tra parentesi tonde).<br />
Riassumendo il nostro regex "matchera'" tutte quelle stringhe che contengono una cifra da 0 a 9 seguita o non seguita da un punto e seguita da 0 o piu' spazi bianchi. Il tutto ripetuto per 8 volte. Quindi il nostro regex trovera' un numero telefonico del tipo "07592345678" oppure "02.45.67.78" ma non sostituira' una stringa del tipo "10.000" che potrebbe essere un importo.<br />
<br />
Per ulteriori informazioni vi rimando alla <a href="http://docs.python.org/2/library/re.html">documentazione ufficiale</a> di python per le espressioni regolari.Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-88305968933719498832013-06-09T12:41:00.001+02:002013-06-09T12:41:50.312+02:00Tra Regno Unito e Germania quei paesi dove trovi posto...<span style="background-color: white; color: #333333; font-family: Thaoma, Verdana, Arial, Helvetica; font-size: 11px;">C'è infine anche spazio per gli informatici. Nel Regno Unito, sempre a maggio 2013, i selezionatori delle imprese hanno messo a disposizione 27.290 posti. In Germania, in questo settore, le richieste arrivavano a 11.300 figure mentre in Belgio si è arrivati a 2.500 posti.</span><br />
<span style="background-color: white; color: #333333; font-family: Thaoma, Verdana, Arial, Helvetica; font-size: 11px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: Thaoma, Verdana, Arial, Helvetica; font-size: 11px;">Ecco l'<a href="http://miojob.repubblica.it/notizie-e-servizi/notizie/dettaglio/tra-regno-unito-e-germania-quei-paesi-dove-trovi-posto/4356008?ref=HRSN-4" target="_blank">articolo originale.</a></span>Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-73829193989910583022013-06-06T18:18:00.002+02:002013-06-06T18:18:45.737+02:00Italiani a Londra - Sono uno sviluppatore software..<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; color: #1c1c1c; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Mia breve intervista su Londra news. Link originale <a href="http://www.londranews.com/2013/05/sono-un-sviluppatore-software/" target="_blank">qui</a></span></div>
<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
<br /></div>
<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
<strong style="background-color: transparent; border: 0px; color: #1c1c1c; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Da quanto tempo sei in UK e come ti trovi?</strong></div>
<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
Mi sono trasferito in un freddo Febbraio 2012. A parte le classiche condizioni climatiche che a volte ti mettono tristezza, per il resto sto davvero bene.</div>
<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
<strong style="background-color: transparent; border: 0px; color: #1c1c1c; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Che tipo di lavoro fai e come l’hai trovato?</strong></div>
<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
Sono uno sviluppatore software per una piccola azienda di Londra con ufficio nella centrale Barbican. L’ho trovato su gumtree dopo una ricerca durata 8 mesi. Ho fatto altri lavori nel frattempo (montavo computer da zero i primi mesi lavoravo per EAT servendo i clienti alle casse o facendo panini).</div>
<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
Foto: License<a href="http://creativecommons.org/licenses/by-sa/2.0/" style="background-color: transparent; border: 0px; color: #f01654; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;"><img alt="Attribution" border="0" src="http://l.yimg.com/g/images/cc_icon_attribution_small.gif" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;" title="Attribution" /><img alt="Share Alike" border="0" src="http://l.yimg.com/g/images/cc_icon_sharealike_small.gif" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;" title="Share Alike" /></a> <a href="http://creativecommons.org/licenses/by-sa/2.0/" style="background-color: transparent; border: 0px; color: #f01654; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;" title="Attribution-ShareAlike License">Some rights reserved</a> by <a href="http://www.flickr.com/photos/fsse-info/" style="background-color: transparent; border: 0px; color: #f01654; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">fsse8info</a></div>
<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
<strong style="background-color: transparent; border: 0px; color: #1c1c1c; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Secondo te quali sono i principali lati negativi di Londra/UK?</strong></div>
<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
Il clima in assoluto. Non vedo l’ora di andare in vacanza questa estate in sardegna e stare tutto il giorno al sole! E ovviamente i costi di affitti e trasporti!</div>
<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
<strong style="background-color: transparent; border: 0px; color: #1c1c1c; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">E quali sono i lati positivi?</strong></div>
<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
Tutto il resto ovviamente! Salari migliori, persone piu’ aperte mentalmente, diverse culture che si fondono, maggior senso civico delle persone, innovazione in tutto, possibilita’ di crescite professionali infinite e molto altro</div>
<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
<strong style="background-color: transparent; border: 0px; color: #1c1c1c; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Se dovessi rifare tutto verresti ancora a Londra/UK?</strong></div>
<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
Assolutamente senza dubbio si.</div>
<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
<strong style="background-color: transparent; border: 0px; color: #1c1c1c; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Ritorneresti in Italia?</strong></div>
<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
Sono tornato a Foggia, mia citta’ natale, per le feste pasquali. La situazione in generale sta peggiorando al sud ma non solo. Disoccupazione alle stelle, negozi che chiudono uno dopo l’altro, citta’ lasciate allo sbaraglio per mancanza di fondi. No non penso di tornare se non per magari godermi la vecchiaia in qualche posto di mare.</div>
<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
<strong style="background-color: transparent; border: 0px; color: #1c1c1c; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Che consigli daresti a chi sta pensando di trasferirsi a Londra/UK?</strong></div>
<div dir="ltr" style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
Di informarsi tanto(ho pubblicato alcune info sul mio blog). Di avere un bel po’ di soldi almeno all’inzio e di armarsi di tanta forza di volonta’. Londra da’ sempre un opportunita’ a tutti!</div>
<div style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.londranews.com/wp-content/uploads/et_temp/barbican-31061_238x238.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.londranews.com/wp-content/uploads/et_temp/barbican-31061_238x238.jpg" /></a></div>
<div style="background-color: white; border: 0px; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 24px; outline: 0px; padding: 0px 0px 10px; vertical-align: baseline;">
<br /></div>
Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com2London, UK51.511213899999987 -0.1198243999999704151.195100899999986 -0.7652713999999704 51.827326899999989 0.52562260000002958tag:blogger.com,1999:blog-4098583024652847402.post-26545770158639067322013-05-24T17:22:00.000+02:002013-05-24T17:22:20.512+02:00Voglio fare l'informatico (o qualsiasi altro lavoro) a Londra (o in Uk)! Part 3Good. Sembrerebbe che abbiate ottenuto un colloquio. Bravi! Evidentemente il vostro curriculum sembra rilevante per la posizione aperta presso quella azienda. Di solito se l'offerta e' per un graduate (cioe' una persona laureata da meno di un anno e senza esperienza) non e' richiesta nessuna esperienza lavorativa ma conteranno molto i <b>vostri progetti personali.</b><br />
Solitamente il primo colloquio e' telefonico. Si tratta di una conversazione informale per sapere di piu' su di voi, accompagnata quasi sempre da domande tecniche. Ma quali domande?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXDU5ZwQ4xU8PfhkkQvtE-fzZqRfinFPhuCSad6S8YzbsR9YDS-VpL-REgd2FFG8_j-VYbhsZawGHuMiGqvDamP86bzORc0CfZwSy3qpBNRc0DYLCClYaY55qHjrWukIsPehCG__ya20lr/s1600/draft_lens6177222module48965552photo_1248988204phoneinterview1-235x300.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXDU5ZwQ4xU8PfhkkQvtE-fzZqRfinFPhuCSad6S8YzbsR9YDS-VpL-REgd2FFG8_j-VYbhsZawGHuMiGqvDamP86bzORc0CfZwSy3qpBNRc0DYLCClYaY55qHjrWukIsPehCG__ya20lr/s200/draft_lens6177222module48965552photo_1248988204phoneinterview1-235x300.jpg" width="156" /></a></div>
<br />
<br />
Di solito dipendono dal ruolo. Se cercano uno sviluppatore java ovviamente le domande saranno incentrate su quel linguaggio. In quel caso basta fare una ricerca su google del tipo "java interview questions and answers" per essere preparati. In altri casi si tratta di domande davvero banali per capire se siete capaci di risolvere problemi di tipo generale. Potrebbere essere una domanda del tipo: "Spiegami come implementeresti un programma che debba stampare la tabellina del 7". E voi a spiegare a voce il codice che avreste usato in quel caso...<br />
Se passate questo colloquio telefonico ci sono due possibilita': chiamarvi per il colloquio face-to-face oppure implementare algoritmi per risolvere dei problemi su specifiche piattaforme (vedi <a href="http://www.topcoder.com/" target="_blank">topcoder</a>).<br />
Ora, ricevete la chiamata per il colloquio in sede. Cosa fare? Agitazione, paura, felicita'. Questi sono i sentimenti piu' comune che si provano in questi casi. Calmatevi e mettetevi a lavoro. La preparazione deve essere simile a quella del colloquio telefonico, le domande saranno simili. Fate una ricerca sull'azienda e cercate di sapere il piu' possibile sui loro prodotti e sui loro concorrenti.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdjrpug3V3e7tAhbaVxrFayiSRW0Tdx5gCyt9U17DQi_e0BzckscYXwYLHlcwoWwSc1mGmFXbZsVQzCMigjf2G584PF8e0HyTe8d9KKO6BidyF_k9TMkCZDBT4OhM9aEHwdvX2ywE33mDX/s1600/Interview-Cartoon.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdjrpug3V3e7tAhbaVxrFayiSRW0Tdx5gCyt9U17DQi_e0BzckscYXwYLHlcwoWwSc1mGmFXbZsVQzCMigjf2G584PF8e0HyTe8d9KKO6BidyF_k9TMkCZDBT4OhM9aEHwdvX2ywE33mDX/s320/Interview-Cartoon.jpg" width="320" /></a></div>
<br />
Il giorno del colloquio vestitevi bene (giacca e camicia) e...buona fortuna! Puo' succedere di tutto durante il colloquio. Cercate di essere rilassati, molto positivi e non dimenticate di essere chiari nelle vostre risposte. Infine preparatevi delle domande da fare a chi vi fara' il colloquio perche' vi chiederanno sicuramente se ne avete (farete vedere cosi che siete interessati).<br />
Se il colloquio andra' bene il vostro agente (o chi vi ha fatto il colloquio) vi richiamera' per chiedervi un nuovo colloquio per decidere l'aspetto economico e definire altri dettagli. A volte (a me e' capitato) potrebbero farvi un secondo colloquio su altri argomenti tecnici (magari in presenza di un manager).<br />
Questo e' tutto! Se avete domande non esitate a commentare. Ci sono molte posizioni aperte qui a Londra, anche per aziende davvero importanti. Non fatevi intimidire, siamo comunque italiani e la storia dimostra che siamo tra i migliori (se non i migliori).<br />
<br />
Buona fortuna!Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0London, UK51.511213899999987 -0.1198243999999704151.195100899999986 -0.7652713999999704 51.827326899999989 0.52562260000002958tag:blogger.com,1999:blog-4098583024652847402.post-4785485727738139312013-05-01T00:00:00.000+02:002013-05-24T16:58:29.227+02:00Voglio fare l'informatico (o qualsiasi altro lavoro) a Londra (o in Uk)! Part 2<br />
Bene siete atterrati! Avete paura? Siete affascinati, stupiti? Tutto normale. Ora vi siete sistemati in ostello (o altro se non avete voluto seguire il mio suggerimento :P). Cosa fare? Bene, iniziamo a mandare il nostro curriculum versione inglese facendo tante application online. Su quali siti? Ecco qui un <a href="http://informaticoinglese.blogspot.com/2013/04/trovare-lavoro-londra-siti-web.htm" target="_blank">post specifico</a>.<br />
Ora quello che accadra' e' che vi chiameranno (sulla vostra bella scheda inglese che potete ordinare gratuitamente ad esempio su giffgaff.com) e non una sola volta. Tanti recruiter, che avranno trovato il vostro profilo interessante, vi contatteranno per conoscervi. Cosa fare? Cercate di conoscere ogni singola virgola del vostro CV; concentratevi perche' probabilmente avranno un accento difficile e cercate di essere chiari quando parlate; preparatevi alla domanda "cosa stai cercando?" perche' se non lo sapete vi scaricheranno dopo 30 secondi; siate felici di dare disponibilita' al recruiter di cercavi un lavoro. E' tutto gratuito perche' e' il datore di lavoro alla ricerca di un impiegato che paghera' il recruiter una volta che sarete assunti (eh si funziona cosi qui).<br />
<br />
Nel frattempo che inviate email e che qualche recruiter si metta in contatto con voi pensiamo ad altri due problemi che dovrete affrontare: alloggio e spese.<br />
Questione alloggio: e' piu' facile trovare lavoro che non una stanza decente e a costi contenuti a Londra (diverso e' per altre citta' dove pero' l'offerta lavorativa e' minore). Evitate le agenzie come la peste sia italiane che inglesi. In particolare evitate questa http://www.londonplaces.org/. Il motivo e' semplice: vi proporanno stanze in centro a prezzi contenuti con 1 solo mese di minimum stay (per legge e' almeno 3) e per chi come voi e' appena arrivato sembrera' un occasione ghiotta. La truffa sta nel fatto che vi piazzeranno in topaie con altre 10 persone e vi abbandoneranno al vostro infimo destino...<br />
Per sicurezza vi allego anche un'immagine dell'agenzia cosi appena la vedete scappate! Ed occhio ai loro annunci su gumtree; se vi portano a questa agenzia..scappate!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsrs2gTb0xz_Q-RBtHyIvq3s0qJ-us3UGKBESf7pHOarGBsBjYfe1mnoQ03AmYX6yP7bU3THlXXB1WwVAlNM0y5c3y2zNANwd3ZuLGnnraeoshbQxwitHth0lns8ImMywWfekzmGiXmBsS/s1600/London+Places+Camden.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsrs2gTb0xz_Q-RBtHyIvq3s0qJ-us3UGKBESf7pHOarGBsBjYfe1mnoQ03AmYX6yP7bU3THlXXB1WwVAlNM0y5c3y2zNANwd3ZuLGnnraeoshbQxwitHth0lns8ImMywWfekzmGiXmBsS/s320/London+Places+Camden.jpg" width="320" /></a></div>
<br />
<br />
Come trovare casa allora? Usate gumtree e spareroom. Chiamate, guardate con i vostri occhi e poi decidete. Il problema di prendere casa e' sicuramente il minimum stay e la caparra. Di solito si paga un mese di caparra e si paga anche un mese in anticipo. Ma voi cercate e ricercate e qualcosa di buono salta fuori. I costi? In zona centrale (zona 1-2) una singola va sui 400 pound al mese, dalla zona 3 in poi i prezzi calano (250 pound) e le case sono anche piu' decenti. Ovviamente sale il costo dei trasporti ma questa e' un'altra storia...<br />
<br />
Ora le spese. Ovviamente sono soggettive e nei primi tempi si tende a risparmiare. Cercate un Lidle o un Asda per fare la spesa principale (cibo, bevande, ecc.) e un Poundland o 99p per comprare tutto il resto a pochi spicci. Cercatevi un lavoretto. Lo so, non e' facile ma e' un modo per avere un ricavo che ti permetta di rimanere a galla per un po' in attesa del lavoro dei tuoi sogni. Portate i curriculum a mano per negozi (ovunque) e fate application online per le grandi catene (sturbucks, costa, cafe nero, EAT, Loaf o in generale tutte quelle grandi catene che trovate per la citta'). Alla fine qualcosa uscira' anche se dovrete stringere i denti e la cinghia e farvi tanto coraggio.<br />
<br />
Perfetto. Probabilmente uno dei recruiter che vi aveva gia' contattato vi richiamera' per proporvi qualcosa. Bene! Qualcosa inizia a muoversi! Ora vi parleranno della proposta e se voi concordate manderanno il vostro CV all'azienda. Se tutto va bene riceverete una risposta e vi chiederanno per quale giorno siete disponibili per un colloquio...ma di questo parleremo nella <a href="http://informaticoinglese.blogspot.com/2013/05/voglio-fare-linformatico-o-qualsiasi_25.html" target="_blank">terza parte</a>.Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0London, UK51.511213899999987 -0.1198243999999704151.195090399999984 -0.7652713999999704 51.82733739999999 0.52562260000002958tag:blogger.com,1999:blog-4098583024652847402.post-60981944418052592302013-04-26T00:00:00.000+02:002013-04-26T00:00:09.455+02:00Trovare lavoro a Londra: siti web<br />
Ecco una lista di siti in cui iniziare a cercare un lavoro. Di solito sono recruiter che mettono annunci ma questo non deve spaventarvi perche' il tutto continua ad essere gratuito<br />
<br />
www.jobserve.com<br />
www.londonjobs.co.uk<br />
www.jobsite.co.uk<br />
www.indeed.co.uk<br />
www.reed.co.uk<br />
www.cwjobs.co.uk<br />
www.londonjobs.co.uk<br />
www.cv-library.co.uk<br />
www.cwjobs.co.uk<br />
www.totaljobs.com<br />
www.jobsearch.direct.gov.uk<br />
<br />
<br />
Oppure potete cercarlo direttamente su Gumtree dove ho trovato il mio lavoro attuale :)<br />
<br />
Spero ovviamente che qualcuno possa allungare la lista commentando questo posto!<br />
Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0London, UK51.511213899999987 -0.1198243999999704151.511213899999987 -0.11982439999997041 51.511213899999987 -0.11982439999997041tag:blogger.com,1999:blog-4098583024652847402.post-45582408038052562692013-04-24T20:00:00.000+02:002013-04-24T20:00:01.256+02:00Voglio fare l'informatico (o qualsiasi altro lavoro) a Londra (o in Uk)! Part 1<br />
Si lo voglio fare! Iniziamo oggi una rassegna di post che raccogliera' una serie di suggerimenti su chi vuole fare il software developer nel regno unito. Molti di questi suggerimenti sono ovviamente validi anche per chi vuole fare altri lavori.<br />
<br />
Ora vi chiederete: ci sono milioni di post su "trasferirsi a Londra", "vivere nel Regno Unito", "trovare lavoro in Inghilterra"; per quale motivo dovremmo prendere per buone le tue info? cosa ti differenzia dagli altri?<br />
Bene quello che ho notato e' che tutti i post sono abbastanza vecchiotti e non aggiornati e sicuramente le cose sono cambiate rispetto a qualche anno fa'. Inoltre la mia e' un'esperienza specifica e...vabbe' dai io sono piu' bravo! (muahahah)<br />
<br />
Partiamo dal primo punto, il piu' importante, quello da non dimenticare mai: perche' parto? Perfetto, ci sono diverse motivazioni: lavoro, soldi, stimoli, curiosita', amore. Non vi suggerisco un motivo ma fate in modo che <b>il vostro sia bello forte perche' sara la chiave del vostro successo</b>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGnmjZEklKxovBXQGD6CVuJNriwfArbHjfKyw4DvCDAXXSqaGb-RVaysdhnCXbZCy7WNYzsNVv4tOOFDKNSm1QxsVUO1C-_1UFSEvYb_uEEQ1mTwycgSRpzWzEBOBQ-KSiZ7mdq-ZjcB8x/s1600/determination.stone.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGnmjZEklKxovBXQGD6CVuJNriwfArbHjfKyw4DvCDAXXSqaGb-RVaysdhnCXbZCy7WNYzsNVv4tOOFDKNSm1QxsVUO1C-_1UFSEvYb_uEEQ1mTwycgSRpzWzEBOBQ-KSiZ7mdq-ZjcB8x/s200/determination.stone.jpg" width="200" /></a></div>
<br />
<br />
Secondo punto. Cosa avete da offrire e cosa volete? Non ci giriamo intorno, una laurea e' altamente consigliata quasi indispensabile. L'alternativa e' una lunga esperienza nel settore (che sia esso informatico o di ristorazione). Per il campo informatico e' oggettivamente piu' facile trovare lavoro. <b>La lingua: bisogna saperla! </b>non va bene il livello scolastico, non va bene il livello universitario. Ci vuole di piu'! Dovete riuscire almeno a parlare e capire. Ma come faccio a capire se il mio inglese e' sufficiente? Andate sul sito della bbc e guardate il telegiornale. Quanto avete capito? Se la risposta e' almeno il 50% allora con un po' di studio prima di partire siete a cavallo. Il Regno Unito (e Londra) hanno molto da offrire a chi ha molto da dare.<br />
<br />
Terzo punto. I soldi. Si servono per vivere qui all'inizio in attesa dei colloqui e del lavoro. Non dico sia impossibile ma e' difficile trovare lavoro appena atterrati. Per questo iniziate a considerare l'idea di fare un qualsiasi lavoro per mantenervi, imparare la lingua ed entrare in contatto con il mondo del lavoro inglese. Consiglio personale:<b> almeno 1500 euri in saccoccia prima di partire sono necessari</b>.<br />
<br />
Se vi ritrovate in questi 3 punti, allora e' il momento di fare il biglietto. Prenotate l'aereo e vi consiglio di andare i primi 10 giorni/2 settimane in ostello. Io l'ho fatto, ho conosciuto alcune persone che mi hanno dato consigli utili, che vivono la stessa vostra esperienza e inoltre vi fa risparmiare.<br />
Fatevi un curriculum. Non vi do indicazioni su come farlo perche' esistono miliardi di siti da cui prendere spunto o potete prendere spunto dal mio CV che trovate in questo blog (in alto c'e' il link). L'importante e' sapere che il formato europeo non lo vuole nessuno qui!<br />
<br />
Perfetto ora salutate i vostri parenti, prendete la valigia e partite. Il resto ve lo diro' nella <a href="http://informaticoinglese.blogspot.com/2013/05/voglio-fare-linformatico-o-qualsiasi.html" target="_blank">seconda parte</a> del post.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTYc2v4RARBamOj2VR_YoIcZzcalOkQNnO_3QQcCEpPd4Mm8u8_7GWDO2GSnCZuMe84yuAD-did2RgvGlcse0_-SNzqnY4JJO712-yIFQ8259DF8F_tW1k87b8w6K4npKKsiUTzG02vVdd/s1600/departures.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTYc2v4RARBamOj2VR_YoIcZzcalOkQNnO_3QQcCEpPd4Mm8u8_7GWDO2GSnCZuMe84yuAD-did2RgvGlcse0_-SNzqnY4JJO712-yIFQ8259DF8F_tW1k87b8w6K4npKKsiUTzG02vVdd/s320/departures.jpeg" width="320" /></a></div>
<br />
<div>
<br /></div>
Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0London, UK51.511213899999987 -0.1198243999999704151.195090399999984 -0.7652713999999704 51.82733739999999 0.52562260000002958tag:blogger.com,1999:blog-4098583024652847402.post-34167845938410058952013-04-12T16:46:00.000+02:002013-04-12T16:46:39.218+02:00La fortuna aiuta gli audaci...<br />
Si e' da parecchio che non posto un nuovo articolo sul blog. Mmmm come mai? Ah si! Ho trovato finalmente lavoro come informatico! Si lavoro in una piccola azienda nel cuore di Londra a Barbican come junior software developer.<br />
<br />
Come ho fatto? Ne parlero' nei prossimi post. E' il compito di questo blog. Raccontare la mia storia al mondo e magari dare qualche consiglio per aiutare chi vorra' fare lo stesso!<br />
<br />
Inoltre e' passato un'anno dall'inizio della mia avventura e quindi aspettatevi un bel post con delle considerazioni su questa prima annata.<br />
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBHCXgNnjSkJlX1bKhh0w8pKyE4Hkt3Gx8N-1SrJ06mi9YLRczzG83LDLOTboDLIwAzX93btLXsn8ppo84l8H5zglYeF_rcNcfUHbK0S4qLTlBox6INfghWJCnbDz7YvYoo4q1S-NfnqN4/s1600/succeed.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="214" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBHCXgNnjSkJlX1bKhh0w8pKyE4Hkt3Gx8N-1SrJ06mi9YLRczzG83LDLOTboDLIwAzX93btLXsn8ppo84l8H5zglYeF_rcNcfUHbK0S4qLTlBox6INfghWJCnbDz7YvYoo4q1S-NfnqN4/s320/succeed.jpg" width="320" /></a></div>
<div>
<br /></div>
Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-30359017924292309662012-08-19T18:57:00.001+02:002012-08-19T19:00:10.198+02:00Thread...che passione!Oggi parliamo di questi benedetti Thread e di come si implementano in Java. Per prima cosa vediamo la definizione data da Wikipedia: "un thread o thread di esecuzione è una suddivisione di un processo in due o più filoni, che vengono eseguiti concorrentemente dal processore". In sostanza il thread non è altro che un pezzo di processo. Come si implementa il multi-threading
in Java? ossia come gestire più thread in Java? Esisto<span style="font-family: inherit;">no due vie, tecnicamente entrambe valide, per implementare il multi-threading e cioè attraverso l'implementazione dell'interfaccia</span> <i>Runnable </i>o creando una classe che estenda la classe <i>Thread</i>.<br />
<div>
Nel primo caso scriviamo una nuova classe che implementi l'interfaccia Runnable e assegniamo un istanza di questa classe ad un nuovo oggetto Thread. Ecco un esempio:</div>
<div>
<br /></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">public class SayHello implements Runnable {</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">private String greeting;</span></div>
<div>
<br /></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">public SayHello(String greeting) {</span></div>
</div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> this.greeting = greeting;</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">}</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">public void run() {</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> for(int i = 1; i < = 10; i++) {</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> System.out.print(greeting);</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> }</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> System.out.println(“End of run”);</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> }</span></div>
<div>
<span style="font-family: 'Courier New', Courier, monospace;">}</span></div>
</div>
<div>
<span style="font-family: inherit; font-size: x-small;"><br /></span></div>
<div>
<span style="font-family: inherit;">è necessario implementare il metodo run in cui inseriremo il codice che dovrà essere eseguito dal Thread. Tutto questo però non rende un oggetto di classe SayHello un oggetto Thread. Occorre associare l'istanza della classe Say Hello con un nuovo oggetto Thread:</span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">public class CountToTen {</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">public static void main(String [] args) {</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> SayHello hello = new SayHello(“Hi”);</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> Thread t = new Thread(hello);</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> t.start();</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> for(int k = 1; k < = 10; k++) {</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> System.out.print(k);</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> }</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> System.out.println(“End of main”);</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> }</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">}</span></div>
</div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<span style="font-family: inherit;">Nel secondo caso creiamo una nuova classe che estende la classe Thread e in cui sovrascriviamo il metodo run:</span><br />
<span style="font-family: inherit;"><br /></span>
<br />
<span style="font-family: Courier New, Courier, monospace;">public class MyThread extends Thread {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> private String message;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> private boolean keepGoing;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> public MyThread(String m) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> message = m;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> keepGoing = true;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;"> public void setKeepGoing(boolean b) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> keepGoing = b;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> public void run() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> while(keepGoing) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> System.out.print(message + “ “);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> try {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> Thread.sleep(1000);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }catch(InterruptedException e) {}</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> System.out.println(“gone!”);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;">}</span><br />
<br /></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<span style="font-family: inherit;">Ora non sarà più necessario istanziare due oggetti come avveniva con il precedente pezzo di codice:</span><br />
<span style="font-family: inherit;"><br /></span>
<br />
<span style="font-family: Courier New, Courier, monospace;">public class Main {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> public static void main(String [] args) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> MyThread myThread = new MyThread(“going”);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> myThread.start();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> try {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> Thread.sleep(6000);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }catch(InterruptedException e) {}</span><br />
<span style="font-family: Courier New, Courier, monospace;"> myThread.setKeepGoing(false);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> System.out.println(“End of main”);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> } </span><br />
<span style="font-family: Courier New, Courier, monospace;">}</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<span style="font-family: inherit;">Ma quale dei due metodi conviene usare? Da un punto di vista object-oriented, l'opzione da preferire per scrivere un thread è implementare Runnable. Infatti cosi facendo si crea una giusta separazione tra l'oggetto thread (che sarà schedulato, sincronizzato ecc.) e l'oggetto runnable che contiene il codice eseguito quando il thread è schedulato.</span></div>
Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-78607215198682206712012-07-08T14:53:00.000+02:002012-07-08T15:02:31.559+02:00Question and answer: pre-intervewMa come si svolge un colloquio a Londra presso un azienda informatica? Il processo completo lo spiegherò in dettaglio in un post successivo ma in questo vi fornisco un piccolo suggerimento. L'azienda appena approccia un potenziale candidato, effettua un primo test ponendo diversi quesiti. Questi servono a capire se il candidato ha le basi e se può partecipare ad una interview face to face.Ad esempio per un ruolo come java developer le domande potrebbero essere queste:<br />
<span lang="EN-GB" style="background-color: white; text-indent: -0.25in;"><br /></span><br />
<span lang="EN-GB" style="background-color: white; text-indent: -0.25in;">1)<span style="font-size: 7pt;">
</span></span><span lang="EN-GB" style="background-color: white; text-indent: -0.25in;">What blogs, publications, and
websites do regularly you use to keep up to date with the latest technologies?
Do you actively contribute to any of them?</span><br />
<span lang="EN-GB" style="background-color: white; text-indent: -0.25in;"><br /></span><br />
<span lang="EN-GB" style="background-color: white; text-indent: -0.25in;"></span><br />
<div class="MsoListParagraph" style="margin-bottom: 10.0pt; margin-left: .25in; margin-right: 0in; margin-top: 24.0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in; text-indent: -.25in;">
<span lang="EN-GB" style="background-color: white; text-indent: -0.25in;">2)<span style="font-size: 7pt;"> </span></span><span lang="EN-GB">In the following example, which features of the Java language are
illustrated in (a) methodOne’s parameter list, and (b) the ‘for’ loop?</span></div>
<table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-table-layout-alt: fixed;">
<tbody>
<tr>
<td style="background: #D9D9D9; border: solid black 1.0pt; mso-border-alt: solid black .25pt; mso-border-bottom-alt: solid black .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 462.05pt;" valign="top" width="616"><div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in;">
<span lang="EN-GB" style="font-family: 'Courier New'; font-size: 9pt; line-height: 115%;"> class MyNewClass {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in;">
<span lang="EN-GB" style="font-family: 'Courier New'; font-size: 9pt; line-height: 115%;"> public
static void methodOne(String s, String t, Integer ... ii) {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in;">
<span lang="EN-GB" style="font-family: 'Courier New'; font-size: 9pt; line-height: 115%;"> for(int
jj : ii) {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in;">
<span lang="EN-GB" style="font-family: 'Courier New'; font-size: 9pt; line-height: 115%;"> System.out.print(jj
+ <b>"</b> <b>"</b> + s + <b>"</b> <b>" + </b>t);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in;">
<span lang="EN-GB" style="font-family: 'Courier New'; font-size: 9pt; line-height: 115%;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in;">
<span lang="EN-GB" style="font-family: 'Courier New'; font-size: 9pt; line-height: 115%;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in; mso-line-height-alt: 5.0pt;">
<span lang="EN-GB" style="font-family: 'Courier New'; font-size: 9pt;"> }<o:p></o:p></span></div>
</td>
</tr>
</tbody></table>
<br />
<br />
<span lang="EN-GB" style="background-color: white; text-indent: -0.25in;"></span><br />
<div class="MsoListParagraph" style="margin-top: 24.0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in; text-indent: -.25in;">
<span lang="EN-GB" style="background-color: white; text-indent: -0.25in;"> 3)<span style="font-size: 7pt;">
</span></span><span lang="EN-GB">Our clients operate in a global
market, therefore our applications must operate in many different
countries. Name two basic data types
whose format varies between countries, that software must account for.</span></div>
<div class="MsoListParagraph" style="margin-top: 24.0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in; text-indent: -.25in;">
<span lang="EN-GB"></span></div>
<div class="MsoListParagraph" style="margin-top: 24.0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in; text-indent: -.25in;">
<span lang="EN-GB" style="background-color: white; text-indent: -0.25in;"> 4)<span style="font-size: 7pt;">
</span></span><span lang="EN-GB">Simplify the following section
of code.</span></div>
<table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-table-layout-alt: fixed;">
<tbody>
<tr>
<td style="background: #D9D9D9; border: solid black 1.0pt; mso-border-alt: solid black .25pt; mso-border-bottom-alt: solid black .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 462.05pt;" valign="top" width="616"><pre><span lang="EN-GB" style="font-size: 9pt;"> public void showCollection (Collection collection) {<o:p></o:p></span></pre>
<pre><span lang="EN-GB" style="font-size: 9pt;"> Iterator ii = collection.iterator();<o:p></o:p></span></pre>
<pre><span lang="EN-GB" style="font-size: 9pt;"> for(int kk = 0; kk < collection.size(); kk++) {<o:p></o:p></span></pre>
<pre><span lang="EN-GB" style="font-size: 9pt;"> MyClass one = (MyClass) ii.next();<o:p></o:p></span></pre>
<pre><span lang="EN-GB" style="font-size: 9pt;"> one.printResult();<o:p></o:p></span></pre>
<pre><span lang="EN-GB" style="font-size: 9pt;"> }<o:p></o:p></span></pre>
<pre><span lang="EN-GB" style="font-size: 9pt;"> }</span></pre>
</td>
</tr>
</tbody></table>
<br />
<br />
<div class="MsoListParagraph" style="margin-top: 24.0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in; text-indent: -.25in;">
<span lang="EN-GB"></span></div>
<div class="MsoListParagraph" style="margin-top: 24.0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in; text-indent: -.25in;">
<span lang="EN-GB" style="background-color: white; text-indent: -0.25in;"> 5)<span style="font-size: 7pt;">
</span></span><span lang="EN-GB">What feature of the Java
programming language is the following code an example of? If you’ve used the
feature to solve a problem, please give an example.</span></div>
<table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-table-layout-alt: fixed;">
<tbody>
<tr>
<td style="background: #D9D9D9; border: solid black 1.0pt; mso-border-alt: solid black .25pt; padding: 0in 5.4pt 0in 5.4pt; width: 462.05pt;" valign="top" width="616"><pre><span lang="EN-GB" style="font-size: 9pt;"> Class c = Class.forName("java.lang.String");<o:p></o:p></span></pre>
<pre><span lang="EN-GB" style="font-size: 9pt;"> Method m[] = c.getDeclaredMethods();<o:p></o:p></span></pre>
</td>
</tr>
</tbody></table>
<div class="MsoListParagraph" style="margin-top: 24.0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in; text-indent: -.25in;">
<span lang="EN-GB" style="background-color: white; text-indent: -0.25in;"> 6)<span style="font-size: 7pt;">
</span></span><span lang="EN-GB">What type of design pattern is
this? Can you name one or more potential issues with this pattern?</span></div>
<table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; margin-left: -1.7pt; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-table-layout-alt: fixed;">
<tbody>
<tr>
<td style="background: #D9D9D9; border: solid black 1.0pt; mso-border-alt: solid black .25pt; padding: 0in 5.4pt 0in 5.4pt; width: 463.75pt;" valign="top" width="618"><div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in;">
<span lang="EN-GB" style="font-family: 'Courier New'; font-size: 9pt; line-height: 115%;"> public class MyObject {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in;">
<span lang="EN-GB" style="font-family: 'Courier New'; font-size: 9pt; line-height: 115%;"> private
static final MyObject INSTANCE = new MyObject();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; text-indent: .25in;">
<span lang="EN-GB" style="font-family: 'Courier New'; font-size: 9pt; line-height: 115%;">private MyObject () {}<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in; text-indent: .5in;">
<span lang="EN-GB" style="font-family: 'Courier New'; font-size: 9pt; line-height: 115%;">public static MyObject
getInstance() {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in; text-indent: .5in;">
<span lang="EN-GB" style="font-family: 'Courier New'; font-size: 9pt; line-height: 115%;">return INSTANCE;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in;">
<span lang="EN-GB" style="font-family: 'Courier New'; font-size: 9pt; line-height: 115%;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in; mso-line-height-alt: 5.0pt;">
<span lang="EN-GB" style="font-family: 'Courier New'; font-size: 9pt;"> }<o:p></o:p></span></div>
</td>
</tr>
</tbody></table>
<br />
<br />
<div class="MsoListParagraph" style="margin-top: 24.0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in; text-indent: -.25in;">
<span lang="EN-GB"> Sei pronto per questo tipo di domande?</span></div>Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-40832101935938913322012-06-30T00:58:00.000+02:002012-06-30T00:59:31.528+02:00Volatile: cosa vuol dire in Java?Spesso accade durante una interview che venga chiesto cosa sia e cosa voglia dire la keyword "volatile" in Java. Questa parola è usata per indicare ad un Thread di non memorizzare il valore di una variabile nella cache ma direttamente nella memoria principale. Perché? Ora immaginiamo che il Thread A modifichi il valore della variabile "pippo". Se il Thread B deve leggere il valore di tale variabile potrebbe accadere che il suo valore non sia stato ancora aggiornato con le modifiche di A. Con la parola chiave <i>volatile </i>si forza il Thread A a rendere visibili gli aggiornamenti fatti immediatamente.<br />
Ora proviamo a vedere un esempio.<br />
<br />
<br />
<span style="font-family: 'Courier New', Courier, monospace;"><b>public class Singleton{</b>private static volatile Singleton _instance;<br />public static Singleton getInstance(){<br /> if(_instance == null){<br /> <b>synchronized(Singleton.class){</b> </span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> if(_instance == null)<br /> _instance = new Singleton();<br /> }<br /> }<br /> return _instance;<br />}</span><br />
<span style="text-align: left;"></span><br />
<div style="text-align: left;">
<span style="text-align: left;"><span style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: x-small;"><br /></span></span></div>
<span style="text-align: left;">
<div style="text-align: left;">
<span style="font-family: inherit;">Se non rendiamo la variabile _instance volatile allora il Thread che sta creando l'istanza di "SIngleton", non è in grado di comunicare a gli altri Thread che l'istanza è stata creata fino a che non finirà l'esecuzione del blocco singleton; quindi se il A sta creando un istanza di Singleton e appena dopo la creazione perde la CPU allora tutti gli altri Thread non saranno in grado di vedere il valore della variabile _instance come non nullo e crederanno che il suo valore sia ancora null.</span></div>
<div style="text-align: left;">
<span style="font-family: inherit;">Infine da ricordare che la parola chiave volatile è valida solo per le variabili. Questa differenzia la parola chiave volatile dalla parola chiave synchronized. </span></div>
<div style="text-align: left;">
<span style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: x-small;"><br /></span></div>
</span>Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-40511525135466179042012-06-15T14:16:00.000+02:002012-06-15T14:16:00.966+02:00Java ecologico: le variabili d'ambiente e il CLASSPATH<br />
Quando si parla di compilazione di codice Java sicuramente vi sarà capitato di sentir parlare di variabili d'ambiente e CLASSPATH. Il classpath si riferisce al percorso sul tuo file system dove i tuo file .class sono salvati. Il classpath è definito dalla variabile d'ambiente CLASSPATH. Il CLASSPATH specifica le directory e i file JAR dove il compilatore e la JVM troveranno il bytecode. Attraverso l'utilizzo del CLASSPATH si permette di memorizzare il bytecode in directory a nostra scelta o in archivi Java (JAR File).<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://www.stampa24.it/wp-content/uploads/2011/04/pc_verde.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="185" src="http://www.stampa24.it/wp-content/uploads/2011/04/pc_verde.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Rendi ecologico il tuo pc con le variabili d'ambiente..</td></tr>
</tbody></table>
<br />
<br />
Per esempio supponiamo di avere la classe com.bustapaga.Impiegato. Il compilatore e la JVM cercheranno la directory \com\bustapaga basandosi sulla variabile d'ambiente CLASSPATH. Quindi se per esempio il file Impiegato.class si trova nella directory<br />
<br />
<i>c:\Documents and Settings\Alex\workspaces\build\com\bustapaga</i><br />
<br />
allora la variabile CLASSPATH deve includere la directory<br />
<br />
<i>c:\Documents and Settings\Alex\workspaces\build</i><br />
<br />
La variabile CLASSPATH può contenere un qualsiasi numero di directory e file JAR.<br />
<br />
Ma come settare questa variabile d'ambiente? Dipende ovviamente dal sistema operativo.<br />
<br />
Sotto un sistema Windows: aprire il prompt dei comandi e settare la variabile classpath con questa istruzione (separando i multi valori con il punto e virgola)<br />
<br />
<i>set CLASSPATH=”c:\Documents and Settings\Alex\workspaces\build”;</i><br />
<i>c:\myproject\build;c:\tomcat\lib\servlet.jar;.;</i><br />
<br />
Sotto un sitema Unix: usare il comando setenv per separare valori multipli<br />
<br />
<i>setenv CLASSPATH /usr/build:/myproject/build:/tomcat/lib/servlet.jar</i><br />
<br />
Attenzione! Un errore comune da evitare è quello di includere parte del nome del percorso del package nella variabile CLASSPATH. Da evitare ad esempio un errore simile:<br />
<br />
<i>set CLASSPATH=c:\myproject\build\com\bustapaga;</i><br />Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-12551451432209260842012-06-13T14:13:00.000+02:002012-06-13T14:13:11.368+02:00Che tipi! Primitive Types vs. Reference Types<br />
Le applicazioni Java prevedono due tipi di dati: primitivi e referenziati. I tipi primitivi sono i classici tipi di dati che si imparano sin dalle prime lezioni di programmazione e sono riassunti nella tabella qui sotto.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8DvEv-vl9mPNVZOYEtAfCKyX0yn7wl5Poqno0AFZgd02u_ObNXOZr53Ei3Qmjt0-uXdAAdMA3C-cw846DRoc2W12AxKG36SLP8ubokiUU2DbQizcTxA3QTl2KKv4J_tnschFwK3QF0F_Q/s1600/i3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8DvEv-vl9mPNVZOYEtAfCKyX0yn7wl5Poqno0AFZgd02u_ObNXOZr53Ei3Qmjt0-uXdAAdMA3C-cw846DRoc2W12AxKG36SLP8ubokiUU2DbQizcTxA3QTl2KKv4J_tnschFwK3QF0F_Q/s320/i3.png" width="320" /></a></div>
<br />
<br />
La tabella mostra anche i diversi range di valori permessi per ogni tipo. Difficile ricordare ogni singolo range mentre può essere molto utile ricordare la dimensione in bits prevista per ogni tipo.<br />
<br />
Un Reference type invece, sono variabili che sono tipi di classe, tipi di interfacce o tipi di array. Una "reference" fa riferimento a un oggeto (un istanza di una classe). A differenza dei tipi primitivi che mantengono i loro valori im memoria dove la variabile è allocata, le referenze non mantengono il valore dell'oggetto a cui si riferiscono. Una referenza "punta" ad un oggetto memorizzando l'indirizzo dove l'oggetto è collocato. Tutto questo può essere ricondotto al conetto di "puntatore". Tuttavia Java non permette al programmatore di accedere direttamente ad un indirizzo fisico di memoria. Quindi anche se le referenze sono simili ai puntatori, è possibile solo usare una referenza per accedere ad un campo o un metodo dell'oggetto a cui fa riferimento. Risulta impossibile quindi determinare il reale indirizzo di memoria della variabile referenziata.<br />
Vediamo un esempio ora. Dichiariamo due referenze:<br />
<br />
java.util.Date today;<br />
String greeting;<br />
<br />
La variabile today è una refernza di tipo Date e può puntare solo a un oggetto di tipo Date. La variabile greeting invece è una referenza che può puntare solo ad un oggetto di tipo String. Un valore può essere assegnato ad una referenza in due modi:<br />
- Una referenza può essere assegnata ad una referenza dello stesso tipo<br />
- Una referenza può essere assegnata ad un nuovo oggetto usando la parola chiave "new"<br />
<br />
Ad esempio assegnamo le due precedenti referenze a due nuovi oggetti:<br />
<br />
today = new java.util.Date();<br />
greeting = “How are you?”;<br />
<br />
Ecco come queste due referenze sono rappresentate in memoria:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghC_R4ohCOqosUrCcu-8f-ye7ZZ94sEy-Q08HA37P40VNBqaiQTqOBzu2AsyCZQBDBU-84TjmbPRd_tdd_P9jdrD2p0Z5pE7R-rLEIiP7Lr9Ay68v65gthBKyVragDt2sF6GjYQqWeiBMZ/s1600/i2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghC_R4ohCOqosUrCcu-8f-ye7ZZ94sEy-Q08HA37P40VNBqaiQTqOBzu2AsyCZQBDBU-84TjmbPRd_tdd_P9jdrD2p0Z5pE7R-rLEIiP7Lr9Ay68v65gthBKyVragDt2sF6GjYQqWeiBMZ/s320/i2.png" width="320" /></a></div>Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-90245315153263074242012-05-08T18:51:00.000+02:002012-05-08T18:51:24.049+02:00Sviluppo "guidato": il Test Driven DevelopmentIl test driven development (TDD) è una pratica agile che richiede la creazione di test prima della scrittura del codice sorgente stesso da testare. In realtà è una metodologia utilizzata non per testare il codice, bensì per individuare con precisione le specifiche del software stesso. Ma come avviene questa tipologia di sviluppo? Come mostrato nella figura 1 la prima cosa da fare è quella di creare un test. Il secondo passo consiste nell'eseguire il test. Ovviamente non essendo ancora stato scritto codice per quel test, l'esecuzione del test comporta un fallimento. Occorre quindi apportare delle modifiche al codice in modo che il test sia superato e una volta che ciò avviene si continua con lo sviluppo.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.agiledata.org/images/tddSteps.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://www.agiledata.org/images/tddSteps.jpg" width="166" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Figura 1. Diagramma sviluppo TDD</div>
<br />
Vediamo ora un esempio semplice di codice:<br />
<br />
<br />
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in; mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span lang="EN-GB">-<span style="font-size: 7pt;">
</span></span><span lang="EN-GB">Aggiungiamo il test</span></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in;">
<br /></div>
<div style="background: #FBEDBB; border: solid #FBEDBB 1.0pt; mso-border-alt: solid #FBEDBB .75pt; mso-element: para-border-div; padding: 5.0pt 5.0pt 5.0pt 5.0pt;">
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">public</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> </span><span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">void</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> NumberToEnglishShouldReturnOne()<o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">{<o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">
</span><span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">string</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> actual =
English.NumberToEnglish(</span><span lang="CS" style="color: navy; font-family: 'Courier New'; font-size: 9pt;">1</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">);<o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">
Assert.AreEqual(</span><span lang="CS" style="color: purple; font-family: 'Courier New'; font-size: 9pt;">"one"</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">,
actual, </span><span lang="CS" style="color: purple; font-family: 'Courier New'; font-size: 9pt;">"Expected the result to be
\"one\""</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">);<o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">}<o:p></o:p></span></div>
</div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in; mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span lang="EN-GB">-<span style="font-size: 7pt;">
</span></span><span lang="EN-GB">Eseguiamo il test. Il test fallisce in quanto il codice non è stato ancora implementato</span></div>
<div style="background: #FBEDBB; border: solid #FBEDBB 1.0pt; mso-border-alt: solid #FBEDBB .75pt; mso-element: para-border-div; padding: 5.0pt 5.0pt 5.0pt 5.0pt;">
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span style="color: purple; font-family: 'Courier New'; font-size: 9pt;">"NumbersInWords.Test.EnglishTest.NumberToEnglishShouldReturnOne
: <o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span style="color: purple; font-family: 'Courier New'; font-size: 9pt;"> System.Exception : <o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span style="color: purple; font-family: 'Courier New'; font-size: 9pt;">The
method or operation is not implemented."</span><span style="font-family: 'Courier New'; font-size: 9pt;">.<o:p></o:p></span></div>
</div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in; mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span lang="EN-GB">-<span style="font-size: 7pt;"> </span></span><span lang="EN-GB">Scriviamo il codice in modo che il test sia superato</span></div>
<div style="background: #FBEDBB; border: solid #FBEDBB 1.0pt; mso-border-alt: solid #FBEDBB .75pt; mso-element: para-border-div; padding: 5.0pt 5.0pt 5.0pt 5.0pt;">
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">public</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> </span><span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">static</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> </span><span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">string</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> NumberToEnglish(</span><span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">int</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> number)<o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">{<o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">
</span><span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">return</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> </span><span lang="CS" style="color: purple; font-family: 'Courier New'; font-size: 9pt;">"one"</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">;<o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">}<o:p></o:p></span></div>
</div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in; mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span lang="EN-GB">-<span style="font-size: 7pt;">
</span></span><span lang="EN-GB">Eseguiamo di nuovo il test</span></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in; mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span lang="EN-GB">-<span style="font-size: 7pt;">
</span></span><span lang="EN-GB">Una volta che il test è passato il prossimo passo è iniziare di nuovo il processo (code refactoring)</span></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in;">
<span lang="EN-GB">Ad esempio il nuovo test sarà:</span></div>
<div style="background: #FBEDBB; border: solid #FBEDBB 1.0pt; mso-border-alt: solid #FBEDBB .75pt; mso-element: para-border-div; padding: 5.0pt 5.0pt 5.0pt 5.0pt;">
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">public</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> </span><span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">void</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> NumberToEnglishShouldReturnTwo()<o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">{<o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">
</span><span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">string</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> actual =
English.NumberToEnglish(</span><span lang="CS" style="color: navy; font-family: 'Courier New'; font-size: 9pt;">2</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">);<o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">
Assert.AreEqual(</span><span lang="CS" style="color: purple; font-family: 'Courier New'; font-size: 9pt;">"two"</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">,
actual, </span><span lang="CS" style="color: purple; font-family: 'Courier New'; font-size: 9pt;">"Expected the result to be
\"two\""</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">);<o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">}<o:p></o:p></span></div>
</div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in;">
<span lang="EN-GB">Quindi modifichiamo il codice in modo che il test sia passato:</span></div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0in;">
<br /></div>
<div style="background: #FBEDBB; border: solid #FBEDBB 1.0pt; mso-border-alt: solid #FBEDBB .75pt; mso-element: para-border-div; padding: 5.0pt 5.0pt 5.0pt 5.0pt;">
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">public</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> </span><span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">static</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> </span><span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">string</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> NumberToEnglish(</span><span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">int</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> number)<o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">{<o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">
</span><span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">if</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> (number == </span><span lang="CS" style="color: navy; font-family: 'Courier New'; font-size: 9pt;">1</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">)<o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> </span><span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">return</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> </span><span lang="CS" style="color: purple; font-family: 'Courier New'; font-size: 9pt;">"one"</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">;<o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">
</span><span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">else</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"><o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0.0001pt; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in;">
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> </span><span lang="CS" style="color: blue; font-family: 'Courier New'; font-size: 9pt;">return</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;"> </span><span lang="CS" style="color: purple; font-family: 'Courier New'; font-size: 9pt;">"two"</span><span lang="CS" style="font-family: 'Courier New'; font-size: 9pt;">;<o:p></o:p></span></div>
</div>
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt; line-height: 115%;">}</span><br />
<span lang="CS" style="font-family: 'Courier New'; font-size: 9pt; line-height: 115%;"><br /></span><br />
<div style="text-align: justify;">
<span style="line-height: 13px;"><br /></span></div>
Ma quali sono i vantaggi di questa metodologia? Il codice<span style="line-height: 13px;">.</span><span style="line-height: 13px;"> può essere testato singolarmente, sono individuate con precisione le specifiche del codice e sicuramente permette di individuare con facilità lo stato di avanzamento del progetto. Per ulteriori informazioni sul TDD date un'occhiata a questa </span><a href="http://www.agiledata.org/essays/tdd.html" style="line-height: 13px;" target="_blank">pagina</a>.Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-56350080070560324852012-04-25T00:46:00.000+02:002013-06-21T10:29:11.749+02:00Android e i grafici: GraphViewMi è capitato l'altro giorno, lavorando a un progetto personale, di dover mostrare dei grafici su alcuni dati memorizzati in un database sqlite. Android non offre nativamente la possibilità di usare i grafici ma esistono diverse librerie Java utilizzabili in Android. Molto interessante ho trovato la libreria <i>GraphView </i>di Jonas Gehring, facile da usare e abbastanza funzionale. Permette la creazione di grafici semplici come line chart e bar chart ma anche qualcosa di complesso come le serie multiple.<br />
Vediamo ora un pezzo di codice che utilizza questa libreria.<br />
<br />
<b>Codice Java:</b><br />
<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="font-family: 'Courier New', Courier, monospace;">GraphViewData[] data = </span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> new GraphViewData[data_from_db.size()];</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> double v=0;</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> for (int i=0; i<data_from_db.size(); i++) {</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>data[i] = new GraphViewData(i, data_from_db.get(i));</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> }</span><br />
<blockquote class="tr_bq">
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;">GraphViewSeries exampleSeries= new GraphViewSeries("Sinus curve", Color.rgb(200, 50, 00), data);</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;">GraphView graphView = new LineGraphView(this, "GraphViewDemo");</span></blockquote>
</blockquote>
<blockquote class="tr_bq">
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;">graphView.addSeries(exampleSeries); // data</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;">graphView.setScrollable(true);</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;">graphView.setHorizontalLabels(regioni);</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;">graphView.setScalable(true); </span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;">LinearLayout layout = (LinearLayout) findViewById(R.id.graph1);</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;">layout.addView(graphView);</span></blockquote>
</blockquote>
<b>File Xml: </b><br />
<blockquote class="tr_bq">
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><?xml version="1.0" encoding="utf-8"?></span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><ScrollView android:id="@+id/ScrollView02" </span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"> android:layout_width="wrap_content" </span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"> android:layout_height="wrap_content"</span> </blockquote>
</blockquote>
<blockquote class="tr_bq">
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"> xmlns:android="http://schemas.android.com/apk/res/android"></span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span><HorizontalScrollView </span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>android:layout_width="fill_parent"</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>android:layout_height="fill_parent"></span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span><LinearLayout</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>android:orientation="vertical"</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>android:layout_width="fill_parent"</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>android:layout_height="fill_parent"></span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span><LinearLayout</span> </blockquote>
</blockquote>
<blockquote class="tr_bq">
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;">xmlns:android="http://schemas.android.com/apk/res/android"</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>android:layout_width="2000dip"</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>android:layout_height="500dip"</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>android:id="@+id/graph1" /></span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span><TextView </span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> android:id="@+id/legend"</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> android:layout_width="wrap_content" </span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> android:layout_height="wrap_content" </span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>android:textColor="#ffffff"</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>android:textSize="17sp" </span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"> <span class="Apple-tab-span" style="white-space: pre;"> </span>/></span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> </LinearLayout></span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"> </HorizontalScrollView></span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"></ScrollView></span></blockquote>
</blockquote>
<br />
Il codice crea un serie a partire dal vettore data_from_db contenente i dati che vogliamo mostrare nel nostro grafico. Successivamente crea un oggetto di tipo GraphView che rappresenterà il nostro grafico e assegna a tale oggetto la serie creata in precedenza. Infine aggiunge il grafico al LinearLayout definito nel file xml.<br />
Questo è il risultato ottenuto.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZRhgkr567IRo5YNa581kOk9lGRHybXeM-vCWi7D4dlQfI0KP40EX2PM1b3I25Whk7nq2ZN5cEUPVgcUEUsntgWJGc37WXGkapbA5jvDIycy9SjQcEUL6KWNqhZfTbuDLZu-OGWbnhCpUG/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZRhgkr567IRo5YNa581kOk9lGRHybXeM-vCWi7D4dlQfI0KP40EX2PM1b3I25Whk7nq2ZN5cEUPVgcUEUsntgWJGc37WXGkapbA5jvDIycy9SjQcEUL6KWNqhZfTbuDLZu-OGWbnhCpUG/s320/Untitled.png" width="199" /></a></div>
<br />
<br />
Una libreria facile da usare che offre diverse opzioni per rendere più gradevoli ed espliciti i propri grafici su Android. Per maggiori informazioni consultare il <a href="http://www.jjoe64.com/p/graphview-library.html" target="_blank">blog</a> ufficiale della libreria.Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-38179094180374834342012-04-24T01:09:00.000+02:002012-04-24T01:10:47.648+02:00Il plurale di Http? Https!<div style="text-align: justify;">
Ecco un'altra classica domanda che ti capita, cosi per caso, ad un colloquio di lavoro. Che differenza c'è tra http e https? Diamo per scontato che sappiamo di cosa parliamo (protocolli) e che già siamo al corrente dell'esistenza del protocollo http. Che differenza c'è con il protocollo Https? la differenza la fa la S finale che sta per "secure". Si, il protocollo https è un'evoluzione di Http per renderlo più sicuro. In particolare è una combinazione del protocollo Http e il protocollo SSL/TLS. Il problema principale del protocollo Http è la possibilità di subire attacchi del tipo <i>Man in the middle </i> (un tipo di attacco dove l'attaccante è in grado di intercettare le comunicazioni tra i due partecipanti).
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://blog.blacknight.ie/images/padlock-ethernet.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="295" src="http://blog.blacknight.ie/images/padlock-ethernet.jpg" width="407" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Https agisce sempre al livello più alto del modello ISO/OSI. Tutti i dati sono criptati compresi gli header. Un webserver per accettare connessioni di tipo Https deve creare un certificato digitale una sorta di carta di identità che associa l'identità di una persona ad una chiave pubblica. Una volta che il sito web ha fornito questo certificato che prova la sua bontà, il protocollo SSL/TLS è più che sufficiente a criptare il canale di comunicazione tra utente e sito web.
I certificati sono approvati da specifiche <i>certificate authorities</i> (ad esempio VeriSign/Microsoft/etc.).</div>Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-88357405325489385722012-04-09T17:43:00.000+02:002012-04-09T22:50:48.848+02:00Riflettiamo con la Java ReflectionL'idea di questo post nasce da un test preselezione che ho fatto per un'azienda inglese. Dato un pezzo di codice veniva chiesto quale caratteristica del linguaggio Java era utilizzata. Si trattava della <i>reflection</i>.<br />
<br />
La reflection è quella caratteristica del linguaggio Java che permette ad un programma in esecuzione di accedere a proprietà interne del programma stesso. Tutto ciò ovviamente in contro tendenza con il paradigma orientato agli oggetti. Ad esempio con questa caratteristica è possibile per un classe Java ottenere e accedere al nome di tutti i suoi metodi e attributi ed eventualmente mostrarli.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://img.viralpatel.net/2009/07/java-reflection-api-dynamic-class-loading.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://img.viralpatel.net/2009/07/java-reflection-api-dynamic-class-loading.png" /></a></div>
Perché la reflection?<br />
<br />
La violazione del principio di incapsulamento dei linguaggi object oriented può essere pericoloso ma se trattato con le giuste accortezze diventa uno strumento potentissimo. In particolare può essere utile nei framework e in casi in cui si necessità di un forte riutilizzo di codice. Consideriamo ora un esempio di codice Java (fonte sito ufficiale della Oracle):<br />
<br />
<br />
<pre style="background-color: #e7e7e7; color: #444444; font-family: Monaco, Courier, 'Courier New', monospace; font-size: 11px;"> import java.lang.reflect.*;
public class DumpMethods {
public static void main(String args[])
{
try {
Class c = Class.forName(args[0]);
Method m[] = c.getDeclaredMethods();
for (int i = 0; i < m.length; i++)
System.out.println(m[i].toString());
}
catch (Throwable e) {
System.err.println(e);
}
}
}</pre>
<br />
<br />
Per usare la reflection occore effettuare l'import del package java.lang.reflect.Ora richiamando la classe DumpMethods e passando come input la stringa<span style="font-family: inherit;"> "<span style="background-color: white;">java.util.Stack</span><span style="background-color: white; color: #444444;">"</span></span> l'output che otteniamo è il seguente:<br />
<br />
<br />
<pre style="background-color: #e7e7e7; color: #444444; font-family: Monaco, Courier, 'Courier New', monospace; font-size: 11px;"> public java.lang.Object java.util.Stack.push(
java.lang.Object)
public synchronized
java.lang.Object java.util.Stack.pop()
public synchronized
java.lang.Object java.util.Stack.peek()
public boolean java.util.Stack.empty()
public synchronized
int java.util.Stack.search(java.lang.Object)</pre>
<pre style="background-color: #e7e7e7; color: #444444; font-family: Monaco, Courier, 'Courier New', monospace; font-size: 11px;"></pre>
<br />
<br />
otteniamo quindi l'elenco dei metodi della classe Stack compreso di parametri e il tipo restituito da ogni metodo.<br />
<br />
Un ottimo esempio di come sia utile la reflection è nella conversioni di documenti XML in oggetti Java (più facilmente manipolabili all'interno di un applicazione scritta in linguaggio Java). Trovate un ottimo esempio di codice <a href="http://java.html.it/articoli/leggi/2414/reflection-in-java/" target="_blank">qui</a>.<br />
<br />
Infine per una illustrazione completa dei diversi usi della reflection date anche un'occhiata <a href="http://java.sun.com/developer/technicalArticles/ALT/Reflection/" target="_blank">qui</a>.<br />
<br />Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-27597925170356490472012-04-09T15:58:00.000+02:002012-04-09T15:58:43.075+02:00Eccomi di nuovo: qui London!Eccomi di nuovo online! Ok la connessione internet ce l'ho da un pezzo qui a Londra ma era il tempo che mi mancava! Ora torno a scrivere nuovi post sul mio blog direttamente live from London!<br />
<br />
Sono alla ricerca di un lavoro come informatico qui a Londra e devo dire che la vita è abbastanza dura. Ho fatto già un paio di colloqui e devo dire che sono abbastanza duri! Però spero di farcela il prima possibile. Per questo nel fra tempo mi sono trovato un lavoretto part-time anche per migliorare il mio inglese. Lavoro da <a href="http://www.eat.co.uk/" target="_blank">Eat.</a> Se passate qui da Londra vi consiglio di pranzare in uno di questi deliziosi negozietti.<br />
<br />
Ora provvedo a pubblicare nuovi post e magari prossimamente pubblicherò qualche aggiornamento sui miei colloqui di lavoro e su come si svolgono qui a Londra.<br />
<br />
See you soon!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://farm8.staticflickr.com/7044/6893869775_63e23bc1f2_z.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="http://farm8.staticflickr.com/7044/6893869775_63e23bc1f2_z.jpg" width="320" /></a></div>
<br />Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0Londra, Regno Unito51.5081289 -0.12800551.350006900000004 -0.443862 51.6662509 0.187852tag:blogger.com,1999:blog-4098583024652847402.post-84933802024392136192012-02-08T21:12:00.001+01:002012-02-08T21:12:26.500+01:00Interview question: Repository Pattern e Factory PatternOggi parleremo di Repository Pattern e Factory Pattern. Entrambi fanno parte della categoria dei Design pattern ossia quell'insieme di schemi di progettazione che permettono di risolvere problemi riccorrenti. Esistono diversi tipi di pattern che sono classificati in base a diversi criteri. Solitamente si sceglie di classificare i pattern a seconda del problema che trattano.<br />
In questo post tratteremo due pattern in particolare: il Factory Pattern e il Repository Pattern. Il Factory Pattern rientra nella categoria dei "pattern creazionali" ossia tutti quei pattern che si nascondono i costruttori delle classi "camuffandoli" con metodi in modo che si possano utilizzare gli oggetti senza sapere come siano utilizzati (un po' come fanno le interfacce). Questo pattern aiuta a modellare un interfaccia per la creazione di un oggetto il quale nel momento in cui viene creato può permettere alle sue sottoclassi di decidere quale classe instanziare. <br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a3/FactoryMethod.svg/300px-FactoryMethod.svg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a3/FactoryMethod.svg/300px-FactoryMethod.svg.png" /></a></div>
<br />
Questo pattern, come mostrato in figura, è usato quando la classe Creato non conosce in anticipo tutte le sue sottoclassi che andrà a creare. Invce è lasciata ad ogni sottoclasse, la ConcreteCreator, la responsabilità della creazione dell'istanza dell'oggetto corrente.<br />
<br />
Il Repository Pattern fa parte dell'insieme dei pattern architetturali che non operano a livello di design e quindi non sono considerati veri e propri pattern. Questo pattern vuole evitare l'accesso diretto alle fonti dati come database, servizi web, liste sharepoint ecc. in quanto questo comperterebbe diversi problemi come codice duplicato, alto rischio di errori di programmazione, tipizzazione debole dei dati di business e cosi via. Cosa propone questo pattern? L'utilizzo di un repository per separare la logica di ritrovamento dei dati dalla logica di bussiness.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i.msdn.microsoft.com/dynimg/IC340233.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="138" src="http://i.msdn.microsoft.com/dynimg/IC340233.png" width="400" /></a></div>
<br />
In questo modo la logica di bussiness e il data source non comunicano direttamente ma lo fanno solo attraverso i repository come mostrato in precedenza nella figura.<br />
<br />
<br />Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-79349494671760335352012-02-08T20:35:00.001+01:002012-02-08T20:35:50.658+01:00Si parte! Destinazione London!Finalmente si parte. Il 22 febbraio sbarcherò a Londra (anche conosciuta come L'ondra) per dare inizio alla mia avventura. Avventura, di questo si tratta. Partirò per andare a cercare lì un lavoro nel mondo nell'informatica e realizzare il mio sogno: informatico inglese :-)<br />Sicuramente sarà un'avventura difficile e speriamo lunga. Sicuramente nei prossimi mesi l'esperienza mi cambierà. Speriamo in bene. Ho bisogno di una nuova sfida. Ho bisogno di stimoli. Ho bisogno di migliorare. Quale città meglio di Londra per iniziare! <br />
Mi fermo qui e magari successivamente farò un post sulle emozioni che si provano nel pensare, organizzare ed iniziare questa avventura (magari appena arrivato a Londra).<br />
<br />
Se mai un giorno qualcuno leggerà questo post, vedendo dove mi troverò in quel momento, capirà che io ci ho davvero creduto dall'inizio!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://lnx.ginevra2000.it/Disney/spadanellaroccia/d541.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://lnx.ginevra2000.it/Disney/spadanellaroccia/d541.gif" /></a></div>
<br />Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0tag:blogger.com,1999:blog-4098583024652847402.post-88030433588176841552012-01-27T22:00:00.000+01:002012-01-27T22:00:20.233+01:00Fai socializzare la tua app!Ho scoperto di recente lavorando su una mia applicazione android un servizio davvero interessante. Il suo nome è <b>socialize</b> e permette di rendere la tua applicazione android o iOS più "sociale". In pratica è resa disponibile un Api gratuita che permette di aggiungere una barra contente diverse opzioni che rendono social l'app. Queste opzioni sono il classico "I like" stile facebook, un contatore delle visualizzazioni, la possibilità di condivisione del contenuto via facebook, email o sms e la possibilità di lasciare un commento anonimamente o loggandosi con il proprio account facebook. Ovviamente è possibile utilizzare anche il proprio account twitter invece dell'account di facebook.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://socialize.github.com/socialize-sdk-android/images/action_bar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://socialize.github.com/socialize-sdk-android/images/action_bar.png" width="211" /></a></div>
<br />
Il servizio è gratuito se il traffico coinvolge meno di 100.000 utenti. Superate tale soglia occore comprare uno dei vari account premium proposti. <br />
Ho inserito tale servizio nella mia applicazioni in quanto mi ha permesso in pochissimi passi di dare un aspetto social, che è tanto in voga oggi e comunque utile, alla mia applicazione.<br />
<br />
<a href="http://www.getsocialize.com/" target="_blank">Get Socialize!</a>Alessandrohttp://www.blogger.com/profile/09335378530795428903noreply@blogger.com0