Blog di Mirco Macrelli
Project Euler
Venerdì 21 Novembre 2008 alle 02:49. 2 Commenti.
Problema: Come passare in maniera intelligente il proprio tempo libero alla sera? Guardare la Talpa è decisamente fuori discussione quindi in genere ripiego sul forum, nella sezione Programmazione sperando di vedere un nuovo contest in cui cimentarmi. Purtroppo però ultimamente gli utenti che organizzava questi piccoli concorsi sembra aver perso l'interesse di portarli avanti quindi per un po' sono rimasto a piedi.
Per un po'. Perché ora ho trovato quello che diventerà senza dubbio uno dei miei siti preferiti di sembre. Project Euler è una raccolta di più di 250 problemi di matematica ed informatica da poter risolvere con il linguaggio e gli strumenti che più si preferisce.
Una volta trovata la soluzione la si può confrontare con quella di altri centinaia di utenti e spesso leggere alcuni approfondimenti sugli algoritmi migliori da usare.
Come esempio riporto il codice che ho usato per trovare la soluzione al problema numero 4.
Infinity = 1.0/0.0
class Fixnum
def is_palindromic?
self.to_s == self.to_s.reverse
end
end
def largest_palindrome(low,high)
max = -Infinity
low.upto high do |x|
x.upto high do |y|
z = x * y
max = z if z.is_palindromic? and z > max
end
end
max
end
puts largest_palindrome(100,999)
Spam Spam Spam!
Domenica 16 Novembre 2008 alle 23:32. 2 Commenti.
Una delle modifiche più interessanti apportate a Movable Type 4.2 è stata senza dubbio l'aggiunta di TypePad Antispam. Si tratta di un sistema centralizza di filtraggio dei commenti per intercettare spam sui blog che ha rimpiazzato i vecchi filtri che erano stati ereditati dalla vecchia 3.0. Il sistema oltre a funzionare benissimo (sono quattro mesi che non cestino più manualmente un messaggio di spam) è anche molto semplice da usare.
Prima non ci facevo caso, svuotavo il cestino dei messaggi senza guardare i vari numeri. Trattandosi di spam era già troppo il tempo che gli dedicavo. Ora però il numero di messaggi bloccati è bene in evidenza nella pagina principale di Movable Type e devo dire che la quantità di spam che mi arriva è veramente assurda. Guardate un po' qui sotto:

3680 commenti in 4 mesi, cioè più di trenta messaggi completamente inutili al giorno.
Supporta Wikipedia!
Sabato 08 Novembre 2008 alle 21:15. Nessun commento.
Apple Shitmouse
Lunedì 20 Ottobre 2008 alle 17:19. Nessun commento.
Ci sono tante cose che Apple ha imparato a fare meglio di tutti quanti negli anni ma i mouse proprio non è mai stata capace. Il Mighty Mouse in dotazione mi ha sempre dato problemi ed ora ha definitivamente abbandonato questo mondo. L'ho usato per circa un anno e le mie impressioni sono state fin da subito molto negative.
La prima cosa che si nota usando il mouse è che i due tasti principali sono in realtà un unico pezza di plastica. Questo fa si che sia fisicamente impossibile premere i due tasti contemporaneamente. A volte poi premendo il tasto sinistro si finisce per premere il tasto destro o viceversa creando molta confusione.
Dopo circa una settimana ci si accorge anche del fatto che il mouse sia in realtà un aspirapolvere. Tutti i mouse che ho usato usano piccoli punti di appoggio per rimanere sollevati dal mousepad e diminuire la frizione ma questo no. Il mighty ha un immensa fascia che finisce col raccogliere ogni singola briciola, granello di polvere e capello presente sul mouse pad. Se non lo si pulisce costantemente lo scorrimento diventa difficile.
Il sistema d puntamento è ai livelli dei primi mouse Logitech del 2001, schizzinoso, impreciso e spesso saltella. Sono anni che c'è la tecnologia laser e non riesco a spiegarmi come mai Apple abbia deciso di usare la obsoleta tecnologia ad infrarossi.
Il vero anello debole è però la rotellina. In principio può sembrare una buona idea ma ci si accorge presto che è troppo piccola da usare ed praticamente impossibile usarla come terzo bottone. E come colpo di scena finale dopo un po' che la si usa smette magicamente di scorrere e si è costretti a ripulirla costantemente.
La soluzione a tutti questi problemi la potete vedere qui accanto e si chiama Logitech MX400, 19.90 su eBay spese di spedizione incluse.
Matrice incompleta
Giovedì 25 Settembre 2008 alle 17:27. Nessun commento.
Qualche tempo fa mi è capitato di dover usare la classe Matrix presente nella libreria standard di Ruby e mi sono subito accorto che è terribilmente incompleta. Personalmente la ritengo veramente scritta con i piedi, per elencare tutti i problemi che ha non mi basterebbero 10 post sul blog quindi elencherò solo tre piccoli problemi per cui ho trovato tre piccole soluzioni molto eleganti e che vale la pena leggere per capire quanto Ruby sia affascinante come linguaggio.
Il problema principale è dovuto al fatto che chi ha scritto la classe ha pensato le matrici come oggetti non mutabili. Una volta creati non è possibile modificare i valori al suo interno ma soltanto leggerli. Per risolvere questo problema basta definire la funzione []=.
class Matrix
def []=(row,column,value)
@rows[row][column] = value
end
end
Il secondo problema è la stessa creazione della matrice. Questa può essere fatta soltanto passando una serie di righe che devono essere già state lette quindi un algoritmo in linea durante la lettura di un file non è possibile. Per risolvere questo basta definire l'operatore << ed usarlo per concatenare una nuova riga.
class Matrix
def <<(row)
@rows << row
end
end
L'ultimo problema è dovuto al fatto che Matrix non fa distinzione tra matrici quadrate, rettangolari o semplici vettori quindi si devono usare row_size e col_size per avere il numero di righe e colonne presenti. Nel caso delle matrici quadrate mi è bastato estendere la classe e usare alias al suo interno per definire un nuovo nome per il metodo row_size.
class SquareMatrix < Matrix alias size row_size end
