C++11 - Qualche esperimento

Con l'introduzione del nuovo standard il C++ è diventanto effettivamente un nuovo linguaggio di programmazione. Sono stati introdotti molti nuovi concetti come: std::move (Rvalue), Lambda, auto keyword, Uniform initialization, Future (e async call), Callable entities e molte altre ancora precedentemente introdotte nelle boost e adesso inglobate nello standard e nello standard library. Vi presento un piccolo esempio di codice che ho compilato con il gcc 4.7.1. Lo scopo è quello di mostrare l'uso dei nuovi costrutti del C++11

// includiamo gli header nececessari
#include
#include
#include

using namespace std;

// definiamo una semplice struttura che conterrà due valori interi
struct Point {
  int x, y;
};

// Definiamo una funzione f che utilizza dei vector come container.
// Adesso i vector sono automaticamente "movable"
std::vector f(int n)
{
  std::vector r;
  for (int i = 0; i < n; i++)
    r.push_back(Point{i, i*i});

  return r;
}

int main()
{
  //definiamo una lambda function usando "auto" come tipo (lasciamo al compilatore il compito di derivare il tipo)
  auto s = [](const std::vector& v){
    unsigned long int rx = 0, ry = 0;
    // scorriamo il vector con la nuova sintassi: for(auto v : c)
    for (auto i : v)
    {
      rx += i.x;
      ry += i.y;
    }

    // la nostra funzione restituisce una tupla
    return std::make_tuple(rx, ry);
  };

  // adesso invochiamo s (f (10000000))
  auto r = s(f(10000000));
  cout << "somma: " << std::get(r) << ", " << std::get(r) << endl;

  return 0;
}

Per maggiori informazioni si può consulare "Overview of The New C++ (C++11)" di Scott Meyers (http://www.aristeia.com/C++11.html)

Posted in Generale | Leave a comment

SunCycle

Ho rilasciato SunCyle la mia prima App per Android sul Play Store (http://bit.ly/xxgLM8).

Segui i movimenti del Sole ovunque sei

Calcola l'ora dell'alba, del tramonto e della culminazione del Sole in base alle coordinate GPS attuali e alla data corrente. Fornisce indicazioni sulla posizione del Sole e sulla sua elevazione ed è dunque utile per tutti gli amanti della fotografia e per gli astronomi.

Posted in Generale | Leave a comment

Alcuni libri consigliati e qualche riflessione in merito

In questi giorni, avendo qualche ora in più a disposizione vorrei proporvi due letture estive. Ovvero meravigliosi libri che dovrebbero essere il punto di partenza per chiunque volesse capirci qualcosa in più sulla programmazione e su quello che realmente essa sia: un arte. Il primo libro è: Structure and Interpretation of Computer Programs di Harold Abelson e Gerald Jay Sussman. Testo utilizzato al MIT per insegnare agli studenti a programmare usando la testa e lo Scheme. Il libro lo potete tranuillamente scaricare dal sito degli autori o qui in formato PDF. Io ho iniziato a leggerlo appena in questi giorni nonostante abbia terminato la laurea nel dicembre 2007. Mi sembra assurdo che in tutti i miei anni di studi alla facoltà di ingegneria nessun professore o un assistente che sia abbiano mai fatto mensione ad un libro utilizzato in quasi tutte le università americane, oltre che al MIT, per oltre venti anni. E mi pare ancora più assurdo che nessuno abbia mai tenuto un corso sul Lisp, o i sui dialetti, e che nessuno ci abbia mai parlato del lambda calcolo. Ma va be siamo in Italia ... forse invecchiando sono diventato troppo esigente. L'altro libro di cui volevo parlarvi è Higher Order Perl scritto da Mark Jason Dominus. Il libro spiega come usare il Perl come linguaggio funzionale piuttosto che come sustituto del C. Anche in questo caso si tratta di un libro incredibilmente affascinante e come ogni cosa bella rilasciato gratuitamente (lo trovate qui in formato PDF).

Vi auguro un buona lettura.

Posted in Generale | 1 Comment

I primi di Collatz

Se andate su Wikipedia al seguente link link troverete una chiara spiegazione sulla congettura di Collatz. Se prendiamo un qualsiasi numero e iteriamo la seguente procedura:
n^{\prime} = \begin{cases} n/2 &\mbox{if } n \equiv 0 \pmod{2}\\ 3n+1 & \mbox{if } n\equiv 1 \pmod{2} \end{cases}
la congettura afferma che prima o poi arriveremo sempre ad 1. Questo è quantomeno affascinante, il sapere cioè che ogni numero sottoposto a questa legge converga inesorabilmente ad 1 un numero finito di passi. Allora mi è venuto in mente di studiare come si comportano i numeri primi, e ho così scritto un semplice programma in c++ usando le gmplib per capire l'andamento delle orbite dei primi, ovvero del numero di iterazioni necessarie a raggiungere uno. I risultati non mostrano per adesso alcun comportamento particolare ma ancora mi riservo qualche ulteriore analisi.

#include
#include
#include
#include

int main(int argc, char *argv[])
{
int i = 0, k = 0, c = 10;
mpz_t s, n, one;

if(argc &gt; 1)
c = strtol (argv[1], 0, 10);

mpz_init (s);
mpz_init (n);
mpz_init (one);

mpz_set_ui (s, 3);
mpz_set_ui (one, 1);

FILE *fd = fopen ("orbita.txt", "w");

while( i &lt; c )
{
if (mpz_probab_prime_p (s, 15) == 2) // if s is definitely prime
{
mpz_set (n, s);
char *stxt = mpz_get_str(0, 10, s);
printf ("Trovato primo: %s, con orbita = ", stxt);
while ( mpz_cmp_ui (n, 1) != 0 )
{
if( mpz_tstbit(n, 0) == 0 ) // pari
{
mpz_divexact_ui (n, n, 2);
}
else
{
// n = 3*n + 1
mpz_mul_ui (n, n, 3);
mpz_add_ui (n, n, 1);
}
k++;
}
printf ("%d\n", k);
fprintf(fd, "%s %d\n", stxt, k);
free(stxt);
k = 0;
i++;
}
mpz_add_ui (s, s, 2);
}

mpz_clear (s);
mpz_clear (n);
mpz_clear (one);

fclose (fd);

return 0;
}
Posted in Generale | 1 Comment

PyCon Quattro

Importante conferenza sul Python. Penso proprio di andarci visto che vorrei indagare un po di più su questo importante linguaggio. Per maggiori dettagli sull'evento http://www.pycon.it

Posted in Generale | Leave a comment

Rinominare in Bash

Per rinomare tutti i file *.JPG in *.jpg è sufficente utilizzare questo comando nella nostra shell bash:

for i in $(ls *.JPG); do
echo "mv" $i `echo $i | tr "[:upper:]" "[:lower:]"` | bash;
done;
Posted in Generale | 2 Comments

Reverse file in Perl

#!/usr/bin/perl -w

use strict;
use warnings;

open FILE, "<".$ARGV[0];
my @LINES = <FILE>;

for(my $i = scalar(@LINES) - 1; $i >= 0; $i--)
{
    print $LINES[$i];
}
Posted in Generale | Leave a comment

Polkit

Se avete una Debian Squeeze e usate KDE 4 vi sarete accorti che il mounting dei dischi interni non funziona per motivi di "policy".  La soluzione barbina che avevo trovato per risolvere il problema tempo fa fu quella di modificare a mano il file xml di configurazione di HAL. Oggi ho trovato una simpatica utility polkit-kde-authorization che vi consente di cambiare qualsiasi impostazione di policy. L'articolo ( che trovate qui) illustra il funzionamento del meccanismo di autenticazione tra HAL e X.Org che si basa proprio sulla libreria libpolkit.

Posted in Generale | Leave a comment

Il mio blog

Questo spazio vuole essere un modo di comunicare all'esterno quello che faccio (o cerco di fare), le idee che mi passano per la mente e qualche riflessione sugli accadimenti che la vita ci pone. Fra poco vedremo se riuscirò a postare qualcosa di decente. A presto

Posted in Generale | Leave a comment