Piero V.

irrBullet su Linux

In questi giorni ho voluto testare un po’ l’integrazione di Irrlicht con Bullet.

Dovete sapere che ci sono diversi modi di farla: o usando irrBullet, o irrBt o usando direttamente le API di Bullet.

Io ho provato direttamente la terza, perché su un post del forum di Irrlicht consigliavano così. Io invece consiglio il contrario: oltre che “reinventare la ruota”, dovete fare tutto a mano e dopo un po’ ci si annoia, specialmente per le linee di debug. Se siete de programmatori bravi ok, ma io, che in C++ non sono così esperto, ho deciso di cambiare strada non solo perché questa mi pare più difficile delle altre, ma anche perché vorrei evitare di avere troppi bug.

Così la scelta era tra irrBullet e irrBt.

Tra le due, per il momento, ho scelto la prima. Entrambe mi paiono molto avanzate, ma questa scelta si basa soprattutto sulla licenza: Zlib contro Creative Commons.

Per il momento non ho ancora cominciato a programmarci perché ho avuto numerosi problemi perché il mio sistema operativo è case-sensitive, al contrario di Windows, dove è sviluppata principalmente.

Vi spiego come ho fatto a risolverli e a installare irrBullet. … [Leggi il resto]

The Cyborgs @ Vittorio Veneto

Avevo già parlato a suo tempo dei Cyborgs.

Ieri finalmente sono andato a vedere un loro live, al Vicky Rock Fest di Vittorio Veneto.

Dovevano essere il gruppo meno importante della serata ma il gruppo dopo di loro non mi piaceva per niente.

Comunque tornando all’argomento, finalmente ho visto un live di questo bravissimo duo e sono felicissimo.

Più che vedere la parola giusta è “partecipare”, infatti i Cyborgs inducono una gran voglia di muoversi e entrano anche in contatto con il pubblico.

Dopo mesi che li ascolto mi sono sentito onorato di essere uno di quelli che hanno potuto battere il tempo sulla maschera di Cyborg 0 con la bacchetta di Cyborg 1.

È stato un bell’evento anche dal punto di vista strumentale: da chitarrista ho un po’ osservato la tecnica di Zero. Tra l’altro non usa neanche il plettro.

È stata una bellissima serata e se passano dalle vostre parti consiglio a tutti di andarli a vedere.

Radeon HD5450

Ho deciso di cambiare scheda grafica del computer vecchio.

Ho sostituito la vecchia Radeon X300 SE con una Radeon HD5450. La vecchia scheda era da 128MB ma non so perché Linux ne leggeva solo 32, ho pensato ad un problema hardware. Comunque 128MB non consentono neanche di avviare gnome shell.

Così ho deciso di cambiarla e al suo posto ho preso una Radeon HD5450. Il mio obbiettivo era spendere poco e avere una scheda buona. All’inizio avevo pensato ad una Nvidia. Ne avevo trovata una su Amazon il cui prezzo era sui 34€ e aveva 512MB di RAM.

Però a 22-23€ c’era una Radeon HD5450 sempre con 512MB di RAM e a 25,64€ una Radeon HD5450 con 1GB di RAM.

Ho scelto quest’ultima perché alla fine è un computer con cui non gioco. Mi serviva solo un po’ di potenza in più e che con la prima applicazione 3D non finisse la ram grafica.

Questa scheda oltre al prezzo aveva anche altri vantaggi, quali il basso consumo energetico (importante visto che lo slot a mia disposizione è un PCI Express x16 1.0) e il dissipatore un po’ più piccolo. Normalmente un dissipatore più grande sarebbe meglio, ma per me non andava bene perché subito sotto della scheda video ho quella di rete wireless e allora non sapevo se lo spazio sarebbe bastato.

Come accennavo prima l’ho presa da Amazon. L’ho presa venerdì mattina, ieri me l’hanno spedita e mi è arrivata questa mattina con la spedizione gratuita. Il montaggio è veramente semplice: basta rimuovere quella vecchia e mettere su quella nuova.

Su Linux non servono neanche i driver, fa tutto da solo.

Prime impressioni: bene, finalmente ho GNOME Shell anche su questo computer, la scheda promette bene. Anche la porta HDMI è una cosa positiva in quanto ho una TV dotata di questa porta.

Poi ho guardato su lspci e ancora sbaglia a contarmi la RAM grafica.

Sicuramente ho fatto bene a comprarla, perché di sicuro i 128MB della scheda vecchia non mi basterebbero neanche se fossero contati bene, però mi dà parecchio fastidio questo problema. Vedrò se riesco a risolverlo.

D-Link DSL-2640R

Visti i ripetuti problemi, oggi ho cambiato router come mi era stato consigliato dal tecnico della Telecom.

Può essere in effetti che dopo tutti questi anni il vecchio DSL-320T si sia rotto, forse anche perché era nato come modem ma aveva un firmware Accorp che lo rendeva router.

Così oggi, visto che la situazione era insopportabile ho preso il router nuovo.

Gli obbiettivi erano non spendere molto e prendere un router che fosse compatibile con OpenWrt.

Alla fine i candidati erano rimasti due: questo che ho preso (nel kit DKT-710, che include anche una chiave USB Wi-Fi G) e il DSL-vattelappesca.

I pro di quello che ho preso erano le 4 porte ethernet, l’antenna uscente e sembrava che si potesse metterci OpenWrt. I pro dell’altro erano la Wireless 150N, mentre i contro erano l’assenza di antenne, le sole due porte ethernet (talvolta me ne servono anche 3) e il fatto che non si può di sicuro mettere OpenWrt.

Se non avessi avuto come router Wireless la Fonera 2100 avrei di sicuro preso un router più costoso, ma date le circostanze ho preso il DSL-2640R.

Ora vedremo se era veramente il router il problema.

Alla fine non ho potuto mettere OpenWRT perché era compatibile solo con i router con lo stesso numero ma chip broadcom: in negozio con il cellulare non sono stato a leggere tutto, così non mi sono accorto che nel 2640R cambia la CPU.

Meno male che almeno le opzioni dell’interfaccia grafica non fanno proprio schifo del tutto. Però rimane anche il fatto che la CLI è limitata: non è una normale Busybox ma è una schifezza della D-Link.

Invertire chiavi e valori nelle map (C++)

Mi è capitato di dover invertire le chiavi con i valori delle mappe, così ho creato questo template:

#include <map>
#include <vector>

template <class oldkey, class oldvalue>
typename std::map< oldvalue, std::vector<oldkey> > reverse_map(typename std::map<oldkey, oldvalue> the_map)
{
	std::map< oldvalue, std::vector<oldkey> > ret;

	typename std::map<oldkey, oldvalue>::iterator it;
	for(it = the_map.begin(); it != the_map.end(); it++) {
		ret[it->second].push_back(it->first);
	}

	return ret;
}

Era il primo template che scrivevo. Comunque sembra che funzioni, ma se c’è qualcosa che non va scrivete nei commenti (però per favore non mangiatemi 😊 ).

Come al solito per queste cose, rilascio questo codice nel pubblico dominio.