domenica 31 agosto 2014

Ottenere unici item da una lista tipizzata in c#

A volte può capitare di avere una lista tipizzata popolata List<T> con molti valori, nell'esempio seguente la lista di "People", e si vuole escludere i valori duplicati.
In questo caso arriva in aiuto il metodo "Distinct()" del framework .Net che restituisce i valori univoci.
public class People
{
 public string Name;
 public string Surname;
 ...
}

List<People> listPeople = new List<People>();
People people = new People();
people.Name="A";
people.Surname="AAA";
listPeople.Add(people);
...
people = new People();
people.Name="A";
people.Surname="AAA";
listPeople.Add(people);
...
people = new People();
people.Name="B";
people.Surname="BBB";
listPeople.Add(people);
...
var uniquePeople = listPeople.Distinct();

venerdì 22 agosto 2014

Ricerca con Google Api e c# da una pagina aspx

Con queste semplici righe è possibile connettersi alle Google Api tramite c# ed eseguire una ricerca con Google.
Si può creare ad esempio un pulsante che punti sul metodo e restituisca i risultati su di una listBox, una textBox per inserire la ricerca.
Per curiosità ho inserito nel webConfig l'inidirizzo di Google, ma ciò non toglie che si può facilmente inserire nel sorgente c#.
Non dimenticarsi di scaricare la libreria Newtonsoft.Json.dll e inserirla nella directory "bin" dell'applicazione insieme con il file Newtonsoft.Json.xml

//Nel WebConfig inserire l'url delle Google Api
<configuration>
  <appSettings>
  <add key="GoogleUrl" value="http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=2&q={0}&hl={1}&start={2}"/>

  
//Creare ad esempio il Model
public class SearchResultData
{
 public string url;
 public string title;
 public string content;
 public FindingEngine engine;

 public enum FindingEngine { google };

 public SearchResultData(string url, string title, string content, FindingEngine engine)
 {
  this.url = url;
  this.title = title;
  this.content = content;
  this.engine = engine;
 }
}

//Nel sorgente della pagina aspx.cs inserire le seguenti righe 
public string googleUrl = ConfigurationManager.AppSettings["GoogleUrl"].ToString();
 
public List<SearchResultData> GoogleSearch(string search_expression, string lang)
    {
 var url_template = googleUrl;
 if (lang.Equals(""))
  lang = SpiderObj.Languages.Code.codeEN;
 Uri search_url;
 var results_list = new List<SearchResultData>();
 int[] offsets = { 0, 8, 16, 24, 32 };
 try{
  foreach (var offset in offsets)
  {
   search_url = new Uri(string.Format(url_template, search_expression, lang, offset));
   var page = new WebClient().DownloadString(search_url);
   JObject objJson = (JObject)JsonConvert.DeserializeObject(page);

   var results_query =
     from result in objJson["responseData"]["results"].Children()
     select new SearchResultData(
      url: result.Value<string>("url").ToString(),
      title: result.Value<string>("title").ToString(),
      content: result.Value<string>("content").ToString(),
      engine: SearchResultData.FindingEngine.google
      );

   foreach (var result in results_query)
    results_list.Add(result);
  }
 }
 catch (Exception ex)
 {
  log.Error(ex);
  throw new Exception("");
 }
 return results_list;
    }

mercoledì 2 luglio 2014

Nota su copyright: linguaggi di programmazione, esempi e non solo

Mi è capitato di ricevere email su aggiunta di linguaggi di programmazione ed esempi non solo sul blog, ma anche su di una mia app "Code" presente sul market Android.
Purtroppo non tutti i creatori di linguaggi di programmazione rilasciano codice ed esempi in libera diffusione, ma applicano delle regole di copyright.
Ovviamente non posso leggere tutte le regole perchè sono numerosissime, ma credo sempre di agire in buon senso e fare il possibile.
Se però, come scrivo normalmente nelle app, venissero violate delle norme su contenuti o proprietà di alcuni linguaggi o imperfezioni di scrittura, posso provvedere alla rimozione o risoluzione dell'anomalia.
Mi è capitato anche di ricevere un'email doveva veniva richiesta la rimozione di alcune mie app in alcune nazioni perchè avevo utilizzato una parola o meglio l'associazione di più parole che violavano la proprietà intellettuale di chi aveva utilizzato le stesse per altri scopi (il tutto documentato ovviamente).
Che dire, a me è sembrata una po' esagerata la storia, giusta richiesta ma un po' esagerata.
Comunque ho provveduto alla rimozione delle app in alcune nazioni e rinominate le stesse app riutilizzandole in altri paesi.
Saggio consiglio: occhio ai nomi che usate!