Da settembre a giugno di quest’anno sono in Erasmus a Gran Canaria, nell’università di Las Palmas, e non penso che avrò molto tempo per aggiornare il blog.
È una sofferenza, che in questo caso, posso sopportare.
Da settembre a giugno di quest’anno sono in Erasmus a Gran Canaria, nell’università di Las Palmas, e non penso che avrò molto tempo per aggiornare il blog.
È una sofferenza, che in questo caso, posso sopportare.
Progetto per PIC16c57 : contatore controllato da due ingressi : Clear e Jump; dispone di due bit d’uscita.
list p=16c57
#include.inc>
__CONFIG _XT_OSC & _CP_OFF & _WDT_OFF
; portA(0) = Clock; portA(1) = Clear; portA(2)= Jump
; portB(0) = Out1 portB(1) = Out2
RADIX DEC
CK_PREC EQU 0x08
TEMP EQu 0x09 ; cntrolla indirizzo
CONT EQU 0x0A
ORG 0x7ff
goto START
ORG 0x00
START
CLRW
TRIS PORTB
MOVLW b'111'
TRIS PORTA ; 3 ingressi
CLRF CK_PREC
CLRF CONT
LOOP
BTFSC CK_PREC,0
GOTO UPDATE
BTFSS PORTA,0
GOTO UPDATE
GOTO MAIN
UPDATE
MOVF PORTA,CK_PREC
GOTO LOOP
MAIN
BTFSC PORTA,1 ; CLEAR = ?
GOTO CLEAR ; 1
BTFSC PORTA,2 ; JUMP = ?
GOTO JUMP
INCF CONT,F
GOTO CHECK
CLEAR
CLRF CONT
GOTO STAMPA
JUMP
MOVLW 2
ADDWF CONT,F
GOTO CHECK
CHECK
MOVLW 4
SUBWF CONT,W
BTFSC STATUS,Z ; cont=4 ?
GOTO SET_ONE
MOVLW 5
SUBWF CONT,W
BTFSC STATUS,Z
GOTO SET_TWO
STAMPA
MOVF CONT, PORTB
GOTO LOOP
SET_ONE
MOVLW 1
MOVF W, CONT
GOTO STAMPA
SET_TWO
MOVLW 2
MOVF W,CONT
GOTO STAMPA
END
Incredibile,
siamo a metà 2010, tra due anni finisce il mondo, e ancora un sacco di gente non sa cosa sia il phishing.
Questa volta le canne non hanno nulla a che vedere. Ok era triste.
Ma soprattutto mi perplime che un ente enorme come le Poste non faccia nulla al riguardo!
Il problema è stato centinaia di volte segnalato da utenti truffati e non .. ma chi ha un account presso Poste.it e abbia provato ad entrare nella posta sà benissimo di cosa parlo.
Oggi per la prima volta ci sono entrato per curiosare, e a parte un paio di ricevute per i pagamenti fatti trovo più di una decina di mail dal titolo Bonus fedeltà!
La prima cosa a cui ho pensato è stato proprio lo spam, ma poi guardo il mittente e vedo che è lo stesso di quello ufficiale delle Poste, lo stesso di quello che mi ha mandato le ricevute dei pagamenti insomma [email protected] oppure Poste Shop.
Bene, sono curioso, apriamo:
Ah però! 150€ a gratiss ! mica male!
Per fortuna che il buon Chrome appena cliccato il link molto dubbio ( indirizzo pericoloso non inserite i vostri dati qui! : http://snipr.com/hgytr62t8793yhgewt87-huyt73 ) mi avvisa del tentativo di phishing.
Approfondimenti : Info sul dominio sniper.com
In Inghilterra hanno avuto la brillante idea di introdurre un “panic button” nelle home page degli utenti fra i 13 e i 18 anni, in modo da segnalare immediatamente eventuali abusi.
Sì, insomma un salva minori dai pedofili.
Al di là delle battute sul possibile inserimento del suddetto bottone all’interno delle chiese, a mio parere è una cosa decisamente inutile, in quanto i pedofili se riescono ad ottenere la fiducia dei ragazzi fino ad ottenere un appuntamento è perché “ci sanno fare” non certo perché li contattano con un brillante approccio del tipo “hey ciao! come ti chiami? mi fai vedere di che colore hai le mutandine in webcam??”
In conclusione credo che si aggiungerà a tutti quegli altri strumenti che ci danno una falsa sicurezza, aumentando così la nostra debolezza (un po’ come gli avvisi di windows da Vista in poi :).
senza parole.
ma per me, un reale efficiente ed adeguato utilizzo è presto trovato :
Progetto per PIC16c57 che monitorizza la situazione di un parcheggio privato.
Il sistema ha 4 ingressi a 1 bit ciascuno: UP, Down, Show e Clock e un’uscita a N bit Q.
Ogni volta che entra una macchina Up va ad 1 per un ciclo di clock, ogni volta che ne esce una va ad uno Down. Quando è attivo Show il sistema deve mostrare in uscita il numero di macchine attuali.
Il parcheggio può contenere al massimo 200 macchine e i segnali d’ingresso non possono mai essere contemporaneamente attivi.
; sistema di controllo parcheggio, max 200 macchine
; per ogni Up incrementa, Down decrementa, Show mostra lo stato (Q)
; 4 entrate: UP, Down, Show, Clock
; 1 uscita da 8 bit
; RA<0> : UP ; RA<1> : DOWN ; RA<2> : SHOW; RC<0> : CK
; l'incremento e il decremento devono essere mutuamente escludenti per un ciclo di ck
list p=16c57
#include
__CONFIG _XT_OSC & _CP_OFF & _WDT_OFF
RADIX DEC
UP EQU 0
DOWN EQU 1
SHOW EQU 2
CK EQU 0 ; sulla porta C
MAX EQU 200
CKP EQU 0x08
Q EQU 0x09
ORG 0x7FF
GOTO START
ORG 0x00
START
CLRW
TRIS PORTB ; output
MOVLW b'0111'
TRIS PORTA ; 3 ingressi
CLRF Q
MOVLW 1
TRIS PORTC ; RC<0> = IN DI CK
MOVF PORTC,W
MOVWF CKP ; salva il CK di partenza (bit 3)
MAINLOOP
BTFSC PORTA,SHOW
GOTO STAMPA ; MOSTRA Q SE SHOW=1
BTFSC PORTA,UP
GOTO INC ; INCREMENTA Q SE UP=1
BTFSC PORTA,DOWN
GOTO DEC
GOTO WAIT
WAIT
MOVF PORTC,W ; metto il ciclo attuale nell'accumulatore
SUBWF CKP,0 ; confronta i due valori di clock
BTFSC STATUS,Z
GOTO WAIT ; se uguali attendi
MOVF PORTC,CKP
GOTO MAINLOOP ; se diversi torna a controllare
STAMPA
MOVF Q,PORTB ; mostra q al pubblico
GOTO WAIT
INC
MOVF MAX,W
SUBWF Q,0
BTFSC STATUS,Z
GOTO WAIT ; parcheggio pieno
INCF Q,1
GOTO WAIT
DEC
BTFSS Q,0
GOTO WAIT; parcheggio già vuoto
DECF Q,1
GOTO WAIT
END
26/04/10 Aggiunto Mergesort e altre modifiche.
Sottofondo consigliato : Red Sector A – Rush
Un programmino in java che permette di confrontare le differenze d’efficienza (in tempo) tra i più noti algoritmi di ordinamento:
I commenti per la documentazione mandano in palla sia kwrite (da cui ho esportato il codice in formato html) sia source-highligth, vabeh ma mica posso pensare a tutto io! 😉
/*
* Ordinamento.java
*
* Copyright 2010 alessandro
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
/**
* @author Alessandro
* @version 0.1
* @see tuxerrante.blogspot.com
*/
import java.util.Random;
import java.io.IOException;
import java.util.Arrays;
import java.io.InputStreamReader;
import java.io.BufferedReader;
public class Ordinamento {
final static int dim=1000000;
private static int[] disordina(int [] array){
Random generator = new Random();
for (int i=0; ilength; i++)
array[i]= generator.nextInt(dim);
return array;
}
public static void stampa(int[] array){
/* stampa */
for (int i=0; ilength; i++)
System.out.print(array[i]+" ");
}
public static void main (String args[]) {
int []array= new int [dim];
int scelta=100;
long start = 0, end=0;
BufferedReader in = new BufferedReader ( new InputStreamReader(System.in));
// randomizza array
array = disordina(array);
do {
System.out.println("\n\n");
// scegli algoritmo
System.out.println("\t ORDINAMENTO ARRAY \n Scegli l'algoritmo: \n");
System.out.println(" 0. rigenera array casuale");
System.out.println("\nO(n²)");
System.out.print(" 1. selectionSort \n");
System.out.print(" 2. insertionSort \n");
System.out.print(" 3. BubbleSort \n");
System.out.println("\nO(nlogn) ");
System.out.print(" 4. QuickSort \n");
System.out.print(" 41. QuickSort del JDK (Bentley-McIlroy)\n");
System.out.print(" 42. MergeSort \n");
System.out.println("\nΘ(logn) ");
System.out.println(" 5. HeapSort ");
System.out.println("\n 8. Stampa ");
System.out.println(" 9. Esci ");
System.out.print(" ==> ");
try {
scelta = Integer.parseInt(in.readLine());
}
catch ( IOException e) {
System.err.println(" ERRORE: : "+ e.getMessage());
}
switch (scelta){
case 0 :
array=disordina(array);
break;
case 1:
start = System.currentTimeMillis();
array = AlgOrdinamento.selectionSort(array);
end = System.currentTimeMillis();
break;
case 2:
start = System.currentTimeMillis();
array = AlgOrdinamento.insertionSort(array);
end = System.currentTimeMillis();
break;
case 3:
start = System.currentTimeMillis();
array = AlgOrdinamento.bubbleSort(array);
end = System.currentTimeMillis();
break;
case 4: // QUICKSORT
start = System.currentTimeMillis();
AlgOrdinamento.quickSort(array, 0, array.length-1 );
end = System.currentTimeMillis();
break;
case 41: // QUICKSORT AT&T jdk
start = System.currentTimeMillis();
Arrays.sort(array);
end = System.currentTimeMillis();
break;
case 42: // MERGESORT
start = System.currentTimeMillis();
AlgOrdinamento.mergesort(array,0,array.length-1);
end = System.currentTimeMillis();
break;
case 5: // HEAPSORT
start = System.currentTimeMillis();
AlgOrdinamento.heapSort(array, array.length);
end = System.currentTimeMillis();
break;
case 8:
stampa(array);
break;
case 9: System.exit(0);
default: System.out.println(" Inserisci un valore adeguato. "); break;
}
System.out.println("\n\n\t Tempo esecuzione : "+(end-start)+" ms");
} while( true);
} //--end main
}
// ___________________________________________________________________________________________
class AlgOrdinamento {
/**
* algoritmo SelectionSort(array a)
* for k=0 to n-2 do
* m = k+1
* for j=k+2 to n do
* if ( A[j][m] ) m=j;
* scambia A[m] con A[k]
*
* ordina in loco n elementi eseguendo al più O(n²) confronti
*/
public static int[] selectionSort(int[] a){
int k=0, m=0, j=0, temp;
for ( k=0; k< (a.length-2); k++){
m = k+1;
for (j=k+2; jj++) -i+1; j++)
if (a[j]< a[m]) m=j;
temp=a[m];
a[m]=a[k];
a[k]=temp;
}
return a;
}
/**
* algoritmo insertionSort( Array A)
* 1) individua la posizione j del più grande elemento minore di x, se esiste
* 2) altrimenti sarà posto a zero per indicare che x andrà posto all'inizio
* 3) j+1 è la posizione dove sarà inserito x
* ordina in loco n elementi eseguendo al più O(n²) confronti
*/
public static int[] insertionSort(int a[]){
int x, k, j, t;
for ( k=0; kk++){ -1; i++){
x = a[k+1];
for ( j=k; j>=0; j--) // 1
if (a[j]<=x) break;
if (j)
for ( t=k; t>j+1; t--)
a[t+1]=a[t];
a[j+1]=x;
}
return a;
}
/**
* bubbleSort
* in ogni scansione vengono confrontate coppie di elementi adiacenti
* che vengono scambiate se non ordinate
* se durante una scansione non vengono effettuati scambi, l'alg termina.*
* F = O(n²)
*/
public static int[] bubbleSort(int[] a){
int i,j,temp;
boolean scambi;
for (i=1; ilength
scambi=false;
for (j=1; jlength
if( a[j-1] > a[j] ){
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
scambi=true;
}
if (!scambi) break;
}
return a;
}
/** ___________ QUICKSORT
*
*/
public static void quickSort(int []a,int i,int f){
if (i>=f) return;
int m = partiziona(a,i,f);
quickSort(a,i,m-1); // possibile stackOverflow se già ordinato
quickSort(a,m+1,f);
}
private static int partiziona(int []a,int i,int f){
int x = a[i], inf=i, temp;
while (true){
while ( infwhile ( a[f]>x ) f--;
if ( inftemp=a[inf]; a[inf]=a[f]; a[f]=temp;
}
else break;
}
temp=a[i]; a[i]=a[f]; a[f]=temp; // posiziona pivot al centro
return f;
}
/**
* HEAPIFY
* @param h array da ordinare
* @param index indice di scansione
* @return array ordinato secondo la struttura albero binario
*/
private static void heapify( int[] h,int index, int heapSize){
int sin=2*index+1, des=2*index+2, max=0;
if ( sinh[index]) max=sin;
else max=index;
if ( desh[max]) max=des; // confronto il figlio destro con il padre
// nota che il padre potrebbe essere l'ex sin()
if (index!=max) {
swap(h,index,max);
heapify(h,max, heapSize);
}
}
static void heapSort(int A[], int n)
{
int i, HeapSize = n;
for (i= HeapSize/2; i >= 0; i--)
heapify(A,i,HeapSize);
for (i=n-1 ; i>=1; i--) {
swap( A, i, 0 );
HeapSize--;
heapify(A,0,HeapSize);
}
}
private static void swap (int []h, int x, int y){
int sw=h[x];
h[x]=h[y];
h[y]=sw;
}
/** HEAPSORT
* dato un array genera un albero fittizio nello stesso array (heap binario),
* dove il valore di un nodo è sempre maggiore di quello dei suoi figli.
*/
/* public static void heapSort(int[] a){
heapify(a,0); // crea l'heap dall'array su sé stesso
return;
} */
/**_________ MERGESORT
*
*/
public static void mergesort(int []A, int i, int f){
if (i>=f) return;
int m=(i+f)/2;
mergesort(A,i,m);
mergesort(A,m+1,f);
merge(A,i,m,f);
}
private static void merge(int []A, int i1, int f1, int f2){
int []X= new int[f2-i1+1];
int i=0, i2 = f1+1, left=i1;
while (i1<=f1 && i2<=f2){
if ( A[i1]<=A[i2]){
X[i]=A[i1];
i1++;
}
else {
X[i]=A[i2];
i2++;
}
i++;
}
//se i e' minore di center significa che alcuni elementi
//della prima meta' non sono stati inseriti nel vettore
// copia A[i1, f1] alla fine di X
for (; i1<=f1; i1++, i++)
X[ i ]= A[i1];
// copia A[i2, f2] alla fine di X
for (; i2<=f2; i++, i2++)
X[ i ]= A[i2];
for (int k=left; k<=f2; k++)
A[k]=X[k-left];
}
}
Un’improvvisazione fatta per un confronto su un forum di chitarristi 😉
http://www.reclaimprivacy.org/
Segui le semplici istruzioni e controlla il tuo profilo.
Se ti sei stancato dell’assenza di privacy su Fb, dai un occhiata a Diaspora.
Com’è difficile restare calmi e indifferenti
mentre tutti fanno rumore
in quest’epoca di pazzi
ci mancavano gli idioti dell’orrore
Powered by WordPress & Theme by Anders Norén
Apri un sito e guadagna con Altervista - Disclaimer - Segnala abuso - Privacy Policy - Personalizza tracciamento pubblicitario