TuxErrante

Libertà vo cercando, ch'è sì cara, come sa chi per lei vita rifiuta

Erasmus

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.

[PIC 16c57] Contatore a due bit controllato

Progetto per PIC16c57 : contatore controllato da due ingressi : Clear e Jump; dispone di due bit d’uscita.

Se il segnale Clear va ad 1, l’uscita deve azzerarsi e ripartire, se va ad 1 Jump, l’uscita deve portarsi a due stati successivi a quello attuale.
Il segnale Clear è predominante su Jump.

list p=16c57
#include
__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
.inc>

bacchitarra

Non aprite quella posta!

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:


oppure :

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.

In tutto questo la cosa scandalosa è che le Poste non ti danno nemmeno la possibilità di utilizzare un filtro antiphishing, ammesso e non concesso che questo tipo di filtraggio dovrebbe essere fatto a monte da loro stessi! (Gmail insegna).
Evidentemente secondo loro, basta aver allestito una paginetta che avverte dell’esistenza del pericolo e vanno a dormire con la coscienza a posto, nel frattempo centinaia di altre persone, più o meno ingenue, continuano ad essere derubate, senza che la polizia postale faccia nulla, eppure è un dominio registrato in California (vedi sotto) mica in Liechstein!
Che amarezza.

Approfondimenti : Info sul dominio sniper.com

Panic Button di Facebook: ennesima inutility

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 :).

Tool – Vicarious

senza parole.

iPad

 ma per me, un reale efficiente ed adeguato utilizzo è presto trovato :

[PIC 16c57] Contatore parcheggio

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

come togliersi un dente – con un razzo.

new layout

completamente rinnovata la grafica!
E soprattutto allargata la colonna centrale.. un sogno divenuto realtà.
                                                                  
                                                                                                            la vecchia versione

Ancora un grazie agli sviluppatori Google.

Confronto tra algoritmi di ordinamento

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; j 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; k k++){
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
-1; i++){
scambi=false;
for (j=1; jlength
-i+1; j++)
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 ( inf temp=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];
}

}

Altri confronti.

Animazioni interattive degli algoritmi.

improvvisazione su base di Satriani

Un’improvvisazione fatta per un confronto su un forum di chitarristi 😉

Controlla la privacy del tuo account Facebook

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.

pfm – bandiera bianca

Com’è difficile restare calmi e indifferenti
mentre tutti fanno rumore
in quest’epoca di pazzi
ci mancavano gli idioti dell’orrore

Page 4 of 6

Powered by WordPress & Theme by Anders Norén