giovedì 19 dicembre 2013

Calcoliamo con Chrome

Perché non fare i conti con Chrome: basta digitare un' espressione (la percentuale si fa con: 20% of 356)
e Chrome mostrerà il risulttato, provare per credere!!!!!!!!!!!!!!!!!!
x^y = xy
sqrt(x) = √x
x^(1/y) = y√x
log(x) =log10 x
logY (x) = logy x


martedì 10 dicembre 2013

Creare form che verrà gestito da JS

Ajax permette di gestire comodamente un form, ma per fare ciò bisogna cambiare il pulsante da submit a button (per evitare il ricaricarsi della pagina),ma questo comporta alla perdita del controllo dei campi required introdotti in HTML. Questo può essere ovviato utilizzando il bottone di tipo submit e l' evento onsubimit:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<head>
   <script>
 
function logon(u,m,p){

var aj; //costruttore AJAX
if (window.XMLHttpRequest)
    aj=new XMLHttpRequest();   //Su browser moderni
else
  aj=new ActiveXObject("Microsoft.XMLHTTP"); //per vecchi IE

aj.onreadystatechange=function(){
  if (aj.readyState==4 && aj.status==200)
 alert(aj.responseText);}//otteniamo la risposta dal server

aj.open("POST","http://dpdmancul.bugs3.com/logon.php",true); 
aj.setRequestHeader("Content-type","application/x-www-form-urlencoded");
aj.send("username_reg="+u+"&password_reg="+p+"&email_reg="+m);}   //invio richiesta

  </script>
</head>
<body>
 

  
<form id="log" method="post" action=""  onsubmit="var user=document.forms['log']['user'].value;
var mail=document.forms['log']['email'].value;
var pass=document.forms['log']['pass'].value;
logon(user,mail,pass);return false;">
<!---  onsubmit="return false;" : quando il form è pronto per l' invio non inviarlo -->
<h1>LOGON</h1>   
<input type="text" id="user" placeholder="Username" required  >
<input type="text" id="email" placeholder="E-mail" required >
<input type="password" id="pass" placeholder="Password" required >
<!--- button type="submit" : permette il controllo dei campi required e poi esegue onsubmit-->
<button  type="submit" class="button">   Registrati   </button></br>
<input type="checkbox" id="checkbox1" required><label for="checkbox1" >Acconsento al trattamento dei dati personali sopra riportati da parte del gestore della pagina</label>
</form></body>
Questo form esegue automaticamente il controllo dei dati senza procedere all' invio i essi.

lunedì 2 dicembre 2013

Ubuntu Touch

Ubuntu Touch è un OS per dispositivi mobili basato sulla nota versione di Linux adattata sul modello di Android per girare su processori ARM.
Le core apps vengono sviluppate da Cananical e dalla comunity: chiunque si iscriva può partecipare al loro miglioramento.
Le app per Ubuntu Touch possono essere scritte in C++ o in JS come webapps (sul sito è già disponibile ubuntu-sdk-tem); una volta compilate e presentate verranno controllate (ora da persone fisiche, ma in futuro da software) per poi essere pubblicate sul Software Center senza che lo sviluppatore debba sviluppare l' installer.
Ora Ubuntu Touch gira su 4 dispositivi, ma è possibile configurarlo su più di 50 altri dispositivi e più di altri 25 sono in lista d' attesa.
Ubuntu Touch è al primo posto in quanto a sicurezza, grazie al suo sistema di isolamento,per il quale non si può modificare il sistema operativo, delle applicazioni e ai criteri di privacy gard.
Ubuntu Touch non usa GTK+, ma MIR e infatti Canonical sta provvedendo alla conversione di tutte le app di Ubuntu software Center; la prossima versione di Ubuntu Desktop dovrebbe avere Unity Next con il supporto sia del GTK+ che di MIR.
Il progetto finale per il futuro è un unico dispositivo che si adatta agli schermi e usa le stesse app in modalità smartphone,tablet e desktop; questo è comodo sotto vari aspetti: non occorre sincronizzare i dispositivi, si portano le app da desktop a smartphone e viceversa, con un unico dispositivo si può fare tutto,...

Si può anche installare un emulatore per testarlo su Ubuntu (solo 14.04):
sudo su
apt-get update
apt-get install android-emulator cp -r /usr/share/android/emulator/ ~/
cd ~/emulator/
./build-emulator-sdcard.sh
./run-emulator.sh

domenica 1 dicembre 2013

Firefox OS

Firefox OS è un recente OS open source per dispositivi mobili che si basa solo su webapp, questo fa si che sia un sistema leggero e veloce, senza limitarne l' uso; inoltre il mercato delle webapps e in notevole aumento e segnerà il futuro dello sviluppo software: una webapp è compatibile con tutti i dispositivi ed il suo sviluppo è abbastanza semplice.
Mozilla fornisce in oltre delle api per l' integrazione con l' O.S. : queste webapp sareanno disponibili sul market.
Ma come provare queste app se non si ha un cellulare con Firefox OS?
1) UTILIZZANDO FIREFOX SU LINUX
Andiamo qui e scarichiamo l' estensione

Su strumenti > sviluppo Web > Firefox OS Simulator











2) UTILIZZANDO FIREFOX SU ANDROID


UDOO

UDOO


UDOO è un progetto di open source hardware italiano basato su Arduino DUE  e Raspberry Pi.
Ha due processori (uno per Arduino e uno per il sistema operativo) ARM e 1 GiB di RAM.
E' adatto si per Linux sia per Android.
Grazie alla coesistenza delle due scjhede può essere programmato da se stesso senza computer aggiuntivi ed è compattibile con tutti i programmi e le espansioni Arduino.
Grazie all' ADK fornito da Google è facile interagire fra Android e UDOO potendo creare controlli a distanza.
UDOO ha intrapreso un progetto chiamato Kick Starter avviato già durante lo sviluppo: questa comunità ha riscontrato le esigenze degli utilizzatori delle versioni beta e ha contribuito al miglioramento del prodotto finito.
UDOO è ancora in fase di sviluppo, ma è già disponibile in commercio sul sito ufficiale.
Il prezzo attualmente gira sui 100€.

Android ROMs

Per ROM si intende, anche se impropriamente, il sistema  operativo di un cellulare.
In questo articolo andremo a vedere le principali versioni modificate di Android.
Attenzione: gli argomenti trattati in questo articolo evolvono molto velocemente.



  • E' la ROM attualmente più diffusa.
    Grazie al DSP Manger si può avere un controllo totale sull' audio: equalizzatore,
    cuffie, auricolari e player bluetoooth,...

    Inoltre vengono semplificate le gesture del quicksetting (per esempio premendo su un' impostazione si attiva o si disattiva e solo tenendo premuto si apre il menù completo)

    La Cyanogen include anche Focal: una fotocamera con svariate impostazioni (multiscatto, regolazioni,...).
    Un altro vantaggio di Focal è il sitema di compressione: le foto vengono salvate con una qualità superiore a quelle di Android.

    Grazie a Trebuchet si possono personalizzare la schermata di blocco e il launcher al 100%.

    Privacy Gard permette di bloccare l' accesso alle informazioni personali ad alcune applicazioni, c'è però la possibilità che alcune applicazioni non funzionino se gli si blocca l' accesso a tali dati.

    Una grande funzione è la gestione dei profili: si può impostare che in una data posione (GPS), quando ci si connette ad un determinato wi-fi, ad una data ora, cambi profilo: cioè cambi suonerie, volumi, sfondo,...

  • MIUI
    Miui stravolge totalmente la grafica di Andorid, ed adotta un proprio market solo per i temi.

    Interessanti son i Quicksettings: rapidi e intuitivi.

    Il Memory Manager consente di chiudere le applicazioni definitivamente e di eliminarle dalla memoria RAM.

    Il player è completamente diverso e permette di vedere il testo della canzone mentre la si ascolta.
    Importante è il discorso sicurezza: Miui include antivirus, Antispam, Backup e un privacy guard migliore di quello della Cyanogen: permette di scegliere quali informazioni mostrare a quali applicazioni , e se ad una applicazione viene negato di conoscere certe informazioni, questa non crasha perché le viene restituito un elenco vuoto.

  • AOKP
    E' attualmente la ROM più veloce.
    Permette di impostare un ritmo personalizzato per la vibrazione e il led, diverso per ogni tipo di notifica.

    La gestione della Privacy è simile a quella di Miui.

    Inoltre è possibile modificare al 100% la barra di navigazione (quella sotto) e la status bar.






  • Paranoid Android
    E' instabile (il dispositivo potrebbe crashare da un giorno all'altro) , ma in compenso offre molte funzioni  interessanti:
    Si possono impostare DPI diversi per ogni app, si può usare lo smartphone in modalità  tablet,...
    Carine sono anche le notifiche: sono come il cerchio della chat di facebook, poi se ci clicchi sopra si apre la finestra relativa in popup senza chiudere l' app in utilizzo.









  • PAC-MAN
    E' nata recentemente e raccoglie tutte le precedenti ROMs. E' molto instabile (è già bene se si accende)
    ma promette molto. Riportiamo solo una screen.





  • OMNIROM
    E' il progetto più recente e si basa tutto sulla comunity.
    Supporta il multiscreen (due applicazioni in contemporanea).

    • giovedì 7 novembre 2013

      Compilare in C++ da Linux




      ctrl+alt+t
      sudo su
      apt-get install g++
      
      nano file.cpp
      -modifica
      ctrl+x
      s
      INVIO
      
      g++ file.cpp -o output.sh
      ./output.sh
      
      C++:
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      #include <iostream>
      #include <math.h>
      
      using namespace std;
      
      int main (){
      float a,b,c;
      cout << "Inserisci il primo cateto ";
      cin >> a;
      cout << "Inserisci il secondo cateto ";
      cin >> b;
      c=sqrt(a*a+b*b);
      cout << "L' ipotenusa e' " << c <<endl;
      return 0;}
      

      lunedì 14 ottobre 2013

      Ripristinare il Microsoft Boot Manger


      1.Inserisci il disco di installazione Windows 7 o 8
      2.Clicca su "Ripristina il computer"
















        3. Risoluzione dei problemi
        4. Opzioni Avanzate

        5. Prompt dei comandi
        6. digitare Bootrec.exe /FixMbr

        Ripristinare il GRUB


        1. Inserisci il CD di Linux (Noi useremo Ubuntu e quindi il terminale di Gnome) e avvia la Live
        2. Apri il terminale (Ctrl+Alt+Canc) e digita  sudo su
        3. digita la password
        4. digita fdisk -l  (l'ultimo carattere è una "elle")
        5. Prendi nota della partizione su cui è installato Linux (Noi nei codici seguenti useremo /dev/sdaX)
        6. Digitare mount /dev/sdaX /mnt
        7. Digitare:
          mount --bind /dev /mnt/dev
          mount --bind /proc /mnt/proc
          mount --bind /sys /mnt/sys
        8. chroot /mnt
        9. Se Linux è installato su  una partizione /boot separata digitare mount /dev/sda2 /boot (Se non sai salta questo passaggio)
        10. Installiamo il GRUB:
          grub-install /dev/sda
          update-grub2
        11. In caso di errori utilizzare: grub-install --recheck /dev/sda
        12. exit
        13. cd ~   (la tilde (~) si fa con AltGr+ì )
        14. unmount /mnt/dev
        15. unmount /mnt/proc
        16. unmount /mnt/sys
        17. unmount /mnt/
        18. Riavviare

        Errore 0xc0000225 \Windows\system32\winload.exe

        Errore 0xc0000225

        \Windows\system32\winload.exe mancante o danneggiato



        OS: Windows 7/8



        mercoledì 27 marzo 2013

        Compilare in C++ su Windows

        Per compilare in c++ su Windows si può utilizzare sempre GCC che è incluso in Code::Blocks (download)

        WINDOWS 7/8 64bit

        Per i processori a 64 bit bisogna installare anche MinGW-w64.

        1)Installa Code::Blocks
        2)Installa MinGW-w64 (Scarica versione testata)
        3)Apri Code Blocks ->Sttings -> Compiler
        4)Seleziona la scheda toolchain Executables
        5)

        martedì 26 marzo 2013

        Compilare C++ in Ubuntu e altri Linux

        Usando il compilatore gcc

        Dal terminale scriviamo:
        
        
        g++ sorgente.cpp -o indirizzo programma compilato
        
        Per avere un avvio automatico possiamo nominare il file compilato in .sh, ma l' estensione non influisce sul funzionamento del programma

        Usando un ide che include gcc

        Per sempificarsi le cose vi consiglio di usare l' IDE Code::Blocks disponibile dal Software Center.
        INSTALLA ORA (apt)

        Creare una lista di adiacenza di un grafo in C++

         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        #include <cstdlib>
        #include <iostream>
        #include <fstream>
        using namespace std;
        int nodi,narchi;
        int main()
        { ifstream in ("input.txt");
        ofstream out ("output.txt");
        in >>nodi>>narchi;
        int adiacenza [nodi+1][nodi+1];
        for(int i=1;i<nodi+1;i++)
        for(int j=1;j<nodi+1;j++)
        adiacenza [i][j] =0;
        for(int i=0;i<narchi;i++) {
                int u,v;
                in >> u >> v >> adiacenza[u][v];
                adiacenza[v][u]=adiacenza[u][v];
        }
        for(int i=1;i<nodi+1;i++){
        for(int j=1;j<nodi+1;j++)
        if(j==nodi) out<<adiacenza[i][j];
        else out<<adiacenza[i][j]<<" ";
        out<<"\n";}
            return  0;
        }
        

        lunedì 18 marzo 2013

        Dobri (COCI 3/13)

        TESTO

        SOLUZIONE:


         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        #include <cstdlib>
        #include <iostream>
        
        using namespace std;
        
        
        int main()
        {
            int A [1001], N;
        cin >> N;
        int S [N] [N];
        for (int i = 0; i <N; i++){
            for (int j = 0;j <N; j++){
                cin >> S[j][i];
                }
            }
                                            if (N==2){
                                            cout << S[0][1]/2<<" "<<S[0][1]/2;
                                            return 0;}
            A[2] = (S[1][0]-S[2][0]+S[2][1])/2;
            A[1] = S[1][0]-A[2];
            int k =2;
            for (int i = 0; i <N; i++){
            for (int j = 0;j <N; j++){
                A[++k]= S[k-1] [0] -A[1];
                }
            }
            for (int i = 1; i <= N ; i++)
            cout << A [i] << " ";
           
            return 0;
        }
        

        Baka (COCI 3/13)

        TESTO

        Soluzione 1:

         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37
        38
        39
        40
        41
        42
        43
        44
        45
        46
        47
        48
        49
        50
        51
        52
        53
        54
        55
        56
        57
        58
        59
        60
        61
        62
        63
        64
        65
        #include <cstdlib>
        #include <iostream>
        
        using namespace std;
        
        string parole;
        int main()
        {
         cin >> parole;
         char get = parole [0];
         int i =0, tempo = 0;
         while (i != 200){
               switch (get){
                      case 'A':
                     case 'B':
                     case 'C':
                          tempo +=3 ;
                           break;
                     case 'D':
                                   case 'E':
                                    case 'F':
                                          tempo +=4 ;
                           break;
                      case 'G':
                                       case 'H':
                                       case 'I':
                                             tempo +=5 ;
                           break;  
                             case 'J':
                     case 'K':
                     case 'L':
                           tempo +=6 ;
                           break; 
                       case 'M':
                     case 'N':
                     case 'O':
                           tempo +=7 ;
                           break;  
                             case 'P':
                     case 'Q':
                     case 'R':
                            case 'S':
                                  tempo +=8 ;
                           break;
                  case 'T':
                     case 'U':
                     case 'V':
                           tempo += 9;
                           break;  
                                                case 'X':
                     case 'W':
                     case 'Y':
                            case 'Z':
                                  tempo +=10 ;
                           break;
                                    
                      }
                      get = parole [++i];
                     if (get  == '\0') i =200;
               }
         
         cout << tempo;
         
            return 0;
        }
        
        Sapendo però che 'c' - 'a' = 2

        Soluzione 2:

         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        #include <cstdlib>
        #include <iostream>
        
        using namespace std;
        
        string parole;
        int main()
        {
         cin >> parole;
         char get = parole [0];
         int i =0, tempo = 0, time []={3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,8,9,9,9,10,10,10,10};
         while (i != 200){
                tempo+=time[get-'A'];
                            get = parole [++i];
                                        if (get  == '\0') i =200;
               }
         
         cout << tempo;
         
            return 0;
        }
        

        Grand Prix (OII 2012)

        TESTO DEL PROBLEMA

        Selezioni Territoriali 2012 - Olimpiadi Italiane dell' Informatica

        Grand Prix 

        Descrizione del problema

        State assistendo a un Gran Premio di Formula 1. Prima dell'inizio, il tabellone riporta la griglia di partenza, ovvero l'ordine in cui le vetture partiranno dalla linea del traguardo. Non appena inizia il gran premio, per ogni sorpasso, il tabellone scrive due numeri: quello della vettura che ha effettuato il sorpasso, e quello della vettura che è stata superata. Il vostro compito è di scrivere un programma che, ricevuti in ingresso l'ordine di partenza e la lista dei sorpassi, calcoli chi ha vinto il gran premio.
        Per esempio, considerate il seguente gran premio, con 3 macchine e 4 sorpassi. L'ordine iniziale di partenza è stato: la vettura numero 2, poi la vettura numero 1 e infine la vettura numero 3. I sorpassi sono stati, nell'ordine:
        1. la numero 3 ha superato la numero 1;
        2. la numero 3 ha superato la numero 2;
        3. la numero 1 ha superato la numero 2;
        4. la numero 2 ha superato la numero 1;
        In questo caso, è facile vedere che la vettura numero 3 ha vinto il gran premio. Come si può notare dall'esempio, i sorpassi avvengono sempre tra due vetture consecutive.

        Dati di input

        Il file di input è costituito da 1+N+M righe di testo. La prima riga contiene due interi positivi separati da uno spazio: N che è il numero di vetture e M che è il numero di sorpassi. Le successive N righe contengono l'ordine di partenza: per ogni riga c'è un numero intero K che rappresenta una vettura, con 1 ≤ K ≤ N. La vettura che parte in i-esima posizione nell'ordine di partenza si trova quindi nella riga (i+1) del file. Le restanti M righe contengono tutti i sorpassi, nell'ordine in cui sono avvenuti, uno in ogni riga. Ogni riga contiene due interi separati da uno spazio: A, ovvero il numero della vettura che ha effettuato il sorpasso, e B, ovvero il numero della vettura che ha subito il sorpasso.

        Dati di output

        Il file di output deve contenere un solo intero: il numero della vettura che ha vinto il gran premio.

        Assunzioni

        • 2 ≤ N ≤ 30
        • 1 ≤ M ≤ 100

        Soluzione

        In lettura basta assegnare ad una variabile <primo> il numero di chi sorpassa la prima vettura e stampare questa variabile.


         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        #include <cstdlib>
        #include <iostream>
        #include<assert.h>
        #include <fstream>
        
        using namespace std;
        int i;
        ifstream in("input.txt");
        ofstream out("output.txt"); 
        
          
        int main()
        {int macchine, sorpassi, uno, x, y;
        in >> macchine;
        in >> sorpassi;
        in >> uno;
                        for(i=1; i< macchine;i++)
                        in >> x;
              for (i=0; i< sorpassi;i++){
              in >> x >> y;
              if (y == uno)
              uno = x;
              }
        out << uno;
            return 0;
        }
        

        Ordinare un vettore con costo N log2 (N)

        Ordinare un vettore è un' operazione che solitamente (con algoritmi tra i quali c'è il Bubble Sort) ha un costo N².
        Con Merge Sort questo no è un problema.


         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37
        void mergesort(int* V, int g){
              if(g == 1)      
              return;
              int k = (g /2);
              int s2 = g-k;
              int V1 [k];
              assert(V1!=NULL);
              int V2 [s2];
              assert(V2!=NULL);
              for ( i = 0; i < k ; i++)
              V1[ i ] = V[ i ];
              for ( i = 0; i < s2 ; i++){
              V2[i] = V[k+i];
              }
                         merge(V1,k);
                         merge(V2,s2);
                         int i1,i2;
             i1=i2 =0;
              while (i1 <k && i2<s2){
                    if (V1[i1] <= V2[i2]) {
                          V[i1+i2] = V1[i1];     
                          i1++;
                               }
                               else{
                                    V[i1+i2]=V2[i2];
                                    i2++;
                                    }}
              while (i1 < k) {
                    V[i1+i2] = V1[i1];
                    i1++;
                    }
              while (i2 <s2) {
                    V[i1+i2] = V2[i2];
                    i2++;
                    }
                    return;
                    }
        

        martedì 8 gennaio 2013

        Spostare un form senza barra del titolo

         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        Dim bClick As Boolean
        
            Private Sub Form1_MouseDown(ByVal sender As Object, _
            ByVal e As MouseEventArgs) Handles MyBase.MouseDown
                bClick = True
            End Sub
            Private Sub Form1_MouseMove(ByVal sender As Object, _
            ByVal e As MouseEventArgs) Handles MyBase.MouseMove
                Static nX As Single
                Static nY As Single
        
                If bClick Then
                    If nX <> 0 Then
                        Me.Left = Me.Left + e.X - nX
                    Else
                        nX = e.X
                    End If
                    If nY <> 0 Then
                        Me.Top = Me.Top + e.Y - nY
                    Else
                        nY = e.Y
                    End If
                Else
                    nX = 0
                    nY = 0
                End If
            End Sub
            Private Sub Form1_MouseUp(ByVal sender As Object, _
            ByVal e As MouseEventArgs) Handles MyBase.MouseUp
                bClick = False
            End Sub
        



        Inserendo il codice soprariportato potrete muovere il vostro form in drag and drop

        lunedì 7 gennaio 2013

        AERO Controller

        Vedremo come creare un form Visual Basic con aero e come fare in modo che venga visualizzata una certa immagine - colore al posto dell' areo su Windows Xp e precedenti, oppure su 7/Vista con aero disattivato, il tutto senza digitare neanche una riga di codice!!!

        2- Trascina il controllo nei controlli di Visual Studio
        3- Usa il controllo come se fosse un ImageBox


        Windows 7 Aero attivo

        Il controllo funziona in tutti i Visualstudio e in tutti i linguaggi (VB, C#, C++, F) creando un' applicazione Windows Form, o Libreria con .NET di versione superiore al 2.0



















        Windows 7 senza Aero

        Metro
        Altri Windows