Polar: mi hai stancato

Diciamocelo, ormai il Polar M430 è diventato inguardabile rispetto alla concorrenza degli smartwatch da runner. 2 anni sono passati dalla sua uscita, ma esteticamente parlando sembrano un’eternità.

Il display in bianco e nero e la forma rettangolare ha ormai segnato il suo tempo.
Devo essere sincero, in 2 anni mi ha servito veramente bene: considerando che nell’ultimo anno faccio almeno 4 sessioni al giorno di ciclismo, non posso chiedergli di più.

Ultimamente però, complice le temperature rigide dell’inverno padano, la parte cardio integrata nell’orologio sta facendo le bizze.

Come potete vedere dal grafico qui sotto, estratto dall’ultima mia corsa di ieri sera, la parte cardio sembra intestardirsi su certe frequenze cardiache, per poi resettarsi ad un certo punto creando dei picchi: parliamo di 20 battiti, non bruscolini!

Stessa cosa anche in questa traccia della settimana scorsa, semplicemente al contrario.

A questo punto sono veramente tentato ad abbandonare definitivamente Polar dopo 3 anni per passare a Garmin, dato che del Polar Vantage sento peste e corna sui vari forum.

Voi che ne pensate?

Ho creato anche un sondaggio su running forum in merito: https://www.runningforum.it/viewtopic.php?p=2354647#p2354647

Maratona di Roma 2020: sconto di 15€

Veloce post per comunicarvi sia la mia iscrizione alla maratona di Roma 2020 che si terrà il 29 marzo ma soprattutto per dirvi che potete iscrivervi anche voi con uno sconto di 15 euro usando questo copuon EL4JK

Qual è la vostra scusa per non partecipare? 😀

Accessori per cani: i miei consigli

Da un anno abbiamo adottato nella nostra famiglia un pitbull maschio affettuosissimo che, nei giorni in cui sto scrivendo, ha 1 anno e 1/2.

Un anno in cui ci ha fatto morire dal ridere, ma ci ha anche fatto spendere parecchio. Magari non ve ne accorgete, ma i vostri cani vi fanno spendere parecchio. Dalle mie ultime statistiche io viaggio sui 1500 euro annui comprensivo di vaccinazioni, cibo, accessori…

Dato che la spesa è importante, mi sono permesso di selezionare per voi i miei acquisti ricorrenti per Logan (il nome del mio cane) che ho selezionato nel corso di questo periodo.

La “pappa” prima di tutto

Ho passato in rassegna un sacco di marche in fatto di crocchette. Ne ho veramente selezionate di tutti i tipi, sempre osservando il comportamento del cane (feci, vivacità e pelo) per un periodo di almeno 1 mese. La mia conclusione è che niente è meglio delle Purina One Agnello.

Ovviamente acquistate quello adatto al peso del vostro cane. Perchè agnello? Perchè il pollo, ahimè, è una più probabile fonte di allergia per i nostri cani. Fidatevi, date questo prodotto per 1 mese al vostro cane e non tornerete più indietro.

Guinzaglio

La sicurezza è importante: che il cane sia piccolo o grande è giusto che stia al guinzaglio quando siamo in un’area pubblica. Dopo un’infinita selezione, il mio compagno ideale per le passeggiate con il mio cane è questo:

Permette al cane di sentirsi libero (10 metri di guinzaglio) ma sempre in sicurezza. Il faro è ottimo per le passaggiate notturne (anche se io preferisco averne sempre una di riserva con me dato che vivo in una zona senza illuminazione pubblica).

E’ il 4o che uso (dopo un po’ va cambiato dato che il guinzaglio potrebbe usurarsi correndo tra alberi e rami con punte) e non tornerei più indietro. Ha veramente rivoluzionato le uscite mie e di Logan.

Pettorina, mai più collare

Inizialmente usavo solo il collare per il mio cane. Pensavo che mi permettesse di tenerlo più sotto controllo. Ma mi sbagliavo: oltre a non avere un effetto sul suo controllo, il collare ha creato qualche problema alla cute. Così sono passato definitivamente alla pettorina; più precisamente a questa pettorina.

Il feeling è ottimo, sia per me che per il mio cane. In 2 secondi si infila dalla testa e si chiude dal sicuro moschettone. La maniglia in alto completa la dotazione. Estremamente consigliata.

Raccogliamo gli escrementi dei nostri cani, per piacere

Io odio tutti quelli che non raccolgono le feci dei propri cani: che siano in strada, su un marciapiede o in campagna, le feci vanno raccolte!

Per non sporcarvi le mani con rotture improvvise dei sacchetti (a che non è capitato alzi la mano), io acquisto ormai solo i sacchetti di amazon. Sono robustissimi!

Il mio cane puzza, tu come lo pulisci?

Tutti i cani puzzano, o meglio, hanno un odore diverso dal nostro. Dato che il mio cane vive in casa è giusto che un minimo sia pulito senza alterare la sua copertura cutanea.

Anche in questo caso, dopo aver provato milioni di tipi di salviette, sono caduto su queste.

Robuste e profumate non irriteranno le zampe dei vostri amici a 4 zampe. Logan è abituato che mi porge le zampe per farsele pulire prima di entrare in casa.

Volete altri pareri?

Volete altri pareri su accessori di cui non ho parlato? Fatemi pure domande nei commenti e cercherò di rispondervi e ora spazio a lui, la guest star dell’articolo: LOGAN!

Clonezilla e dd possono fallire nei vostri backup: ma ho la soluzione!

Uso abitualmente Clonezilla per i backup dei miei PC sia a casa che al lavoro e non ho mai avuto grossi problemi (o meglio, quando li ho avuti, di solito li ho sempre capiti e risolti con qualche configurazione adhoc).

In questi giorni ero alle prese con un osso duro invece. Un vecchio PC del 2011 che non ne voleva sapere di farsi backuppare.

La cosa particolare è che nè nei in backup nè nei restore veniva mostrato nessun errore: il risultato era però un sistema restorato (debian 10 su ext4) con file corrotti e inutilizzabili.

Ne ho provate di ogni:

  • ho utilizzato diverse versioni di clonezilla per verificare che non fosse una regression; (sono arrivato fino a versioni del 2011)
  • ho utilizzato varie architetture di iso di clonezilla (amd64, i686-pae e i686);
  • ho provato direttamente “dd”

Ed è proprio questa ultima prova ad avermi indirizzato al problema reale: come è possibile che neanche dd possa funzionare?

Abitualmente lanciavo questa riga di bash per avviare il backup con dd:

dd if=/dev/sda1 status=progress bs=2M | gzip -c > /home/partimage/image.gz 

Notate la parte in grassetto? Non è stata messa a caso. Cercando in giro per stackoverflow a caccia di problemi su dd, mi sono imbattuto in questo thread che mi ha aperto un mondo.

E in effetti, lanciando il backup in questo modo:

dd if=/dev/sda1 status=progress | gzip -c > /home/partimage/image.gz 

Il tutto funziona perfettamente, ovviamente facendo il restore in questo modo:

gunzip -c /home/partimage/image.gz | dd of=/dev/sda1 status=progress 

Ora rimane solo un problema: clonezilla non supporta la possibilità di cambiare il parametro bs passato a dd, e qui ho chiesto allo sviluppatore di abilitare un opzione in merito. Vediamo come andrà a finire.

La mia prima skill con Alexa: facile, con VoiceFlow!

Ero alla ricerca di previsioni del meteo decenti con Alexa. Sì, perchè diciamocelo, il provider meteo di default Alexa fa abbastanza pena in Italia.

E allora ho pensato, perchè non farmi la mia skill personale che mi aiuta nella scelta del mezzo di trasporto adeguato per andare al lavoro? (bici o auto n.d.r.)

Detto, fatto! Meteo Aeronautica Militare per Alexa pronta per voi!

La scelta su come realizzarlo è caduta sui VoiceFlow che permette, tramite un diagramma di flusso, di generare skill in tempi record senza digitare una linea di codice!

Il bello di VoiceFlow è che ti permette l’integrazione con script esterni (come il mio script in python per gestire il provider meteo) e ti consente di pubblicare la skill in modo guidato sul store di amazon!

Veramente stra consigliato!

QNAP non va in standby: capiamolo con lo script blkdevMonitor.sh

Da pochi giorni sono un possessore di un NAS QNAP e mi sono imbattuto il un classico problema: gli HDDs non vanno in standby.

Sui forum QNAP si parla di uno script bash da lanciare via ssh, che ahimè, non è più scaricabile.

Per fortuna, girando nelle pieghe del web (aka google cache), sono riuscito a farlo riemergere dal black hole.

Ed eccolo qui in tutta la sua “splentitudine”:

#!/bin/sh
#================================================================
# Copyright (C) 2008 QNAP Systems, Inc.
#
# 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.
#----------------------------------------------------------------
#
# blkdevMonitor_v2.sh
#
#	Abstract: 
#		A program of testing purpose on monitor block device
#
#	HISTORY:
#		2013/05/15	-	Created	- Kent
# 
#================================================================
/sbin/daemon_mgr klogd.sh stop "/etc/init.d/klogd.sh start"
/usr/bin/killall dd 2>/dev/null 1>/dev/null

MD_DEVIVES="md9 md13 md0 md1 md2"
SD_DEVIVES="sda sdb sdc sdd sde sdf sdg sdh"
Do_Log=0
MAXRUN=100
FORCE_STANDBY=0
BLKDEV_LOG=/root/blkdevMonitor_v2.log

analyse_kmsg()
{
	_klog=/.klog
	/bin/touch $_klog
	_standby=1

	# read /proc/kmsg
	while [ 1 ]; do
		/bin/dd if=/proc/kmsg of=$_klog bs=1 count=10240 2>/dev/null 1>/dev/null
		for i in $MD_DEVIVES; do
			/bin/cat $_klog | /bin/grep $i | /bin/grep "dirtied inode"
			if [ $? = 0 ]; then
				/bin/cat $_klog | /bin/grep $i | /bin/grep "dirtied inode" >> $BLKDEV_LOG
				_standby=0
			fi
			/bin/cat $_klog | /bin/grep $i | /bin/grep "block"
			if [ $? = 0 ]; then
				/bin/cat $_klog | /bin/grep $i | /bin/grep "block" >> $BLKDEV_LOG
				_standby=0
			fi
		done
		for i in $SD_DEVIVES; do
			/bin/cat $_klog | /bin/grep $i | /bin/grep "dirtied inode"
			if [ $? = 0 ]; then
				/bin/cat $_klog | /bin/grep $i | /bin/grep "dirtied inode" >> $BLKDEV_LOG
				_standby=0
			fi
			/bin/cat $_klog | /bin/grep $i | /bin/grep "block"
			if [ $? = 0 ]; then
				/bin/cat $_klog | /bin/grep $i | /bin/grep "block" >> $BLKDEV_LOG
				_standby=0
			fi
		done
		if [ $_standby = 0 ]; then
			return 1
		fi
	done
}

_countdown()
{
	/bin/sync;/bin/sync
	/bin/echo -n "Countdown: "
	cntdown=$1
	while [ ${cntdown} -gt 0 ]; do
		/bin/sleep 1
		/bin/echo -n "${cntdown} "
		cntdown=$[$cntdown-1]
	done
	echo
}

_check_standby()
{
	for i in $SD_DEVIVES; do
		/sbin/hdparm -C /dev/${i} 2>>/dev/null | /bin/grep active
		if [ $? -eq 0 ]; then
			echo /dev/${i}
			echo "Some process was waked up HDD..."
			return 1	# HDD is active
		fi
	done
	return 0
}

/bin/echo "===== Welcome to use blkdevMonitor_v2 on `/bin/date` ====="
case "$1" in
	-h)
	/bin/echo "Usage:"
	/bin/echo "  $0 [N]"
	/bin/echo "  N means that monitor block devices N times and generate N log files.(Default N = 100)"
	exit 0
	;;
esac

/bin/echo "Turn off/on VM block_dump & Clean dmesg"
/bin/echo 0 > /proc/sys/vm/block_dump
/bin/dmesg -c 2>/dev/null 1>/dev/null
/bin/dmesg -c 2>/dev/null 1>/dev/null
/bin/dmesg -c 2>/dev/null 1>/dev/null

_cnt=20
while [ ${_cnt} -gt 0 ]; do
	/bin/sync
	/bin/dmesg -c 2>/dev/null 1>/dev/null
	_cnt=$[$_cnt-1]
done
/bin/echo 1 > /proc/sys/vm/block_dump
/bin/date > /dev/null
_countdown 3
# ignore 10240 bytes
/bin/dd if=/proc/kmsg of=/dev/null bs=1 count=10240 2>/dev/null 1>/dev/null

/bin/echo "Start..."

[ "x$1" != "x" ] && MAXRUN=$1
_cnt=0

# remove log
/bin/rm -f $BLKDEV_LOG

while [ ${_cnt} -lt ${MAXRUN} ]; do
	echo "============= $_cnt/$MAXRUN test, `/bin/date` ==============="
	echo "============= $_cnt/$MAXRUN test, `/bin/date` ===============" >> $BLKDEV_LOG
	if [ $FORCE_STANDBY = 1 ]; then
		_check_standby
		if [ $? != 0 ]; then
			for i in $SD_DEVIVES; do
				# force standby
				/sbin/hdparm -y /dev/${i} 2>/dev/null 1>/dev/null
				if [ $? = 0 ]; then
					echo "Issuing standby command in /dev/${i}"
				else
					echo "/dev/${i} not found"
				fi
			done
		fi
		/bin/sleep 20
	fi
	analyse_kmsg
	_cnt=$[$_cnt+1]
	echo
	echo >> $BLKDEV_LOG
done

/bin/echo "Turn off block_dump"
/bin/echo 0 > /proc/sys/vm/block_dump

Utilizzandolo, ho capito che il mio problema era nell’app di videosorveglianza (che comunque non stavo usando)

Windows CE è morto? Lunga vita a Linux e Wine

(lo stile di scrittura di questo post è volutamente leggero, ma l’argomento è dannatamente serio!)

Ormai sono 18 anni che lavoro come firmwarista in ambito industriale e mi è capitato di vedere di tutto sugli schermi delle povere HMI: sistemi operativi proprietari, Windows 95, 98, XP e anche lo SCOMODISSIMO Windows CE!

Purtroppo, ma che dico, PER FORTUNA, Windows CE è stato finalmente decretato morto dalla Microsoft.

Questo decesso programmato ha portato molte aziende sull’orlo di crisi tecniche.

E ora come sostituiamo Windows CE?

La scelta banale potrebbe essere quella di portare tutto il software sulle moderne versioni di Windows. Peccato però che ci si dimentica spesso di una parolina, o forse di due: REAL-TIME.

Infatti, Windows CE, aveva tanti difetti ma una cosa su tutte faceva abbastanza bene: eseguire codice in tempo reale!

Purtroppo Windows 10 & Co. non gradiscono molto la parte realtime. Si, so quello che state per dire: ma ci sono le estensioni realtime per windows!

Ok, ma le avete provate? Queste estensioni sono dannatamente pesanti e si portano dietro un ulteriore zavorra: UN COSTO DI LICENZA SUPERIORE A QUELLO DI WINDOWS STESSO!

Quindi, vi starete chiedendo, che cosa suggerisce il fenomenale Roberto Viola?

Semplice: LINUX!

O meglio, Linux + Wine + Xenomai!

Nel dettaglio, Xenomai si occuperà della gestione realtime, mentre Wine si occuperà della parte grafica della HMI che sicuramente non vorrete riscrivere!

Signori, in pochi giorni, se non ore, avrete migrato il vostro applicativo da Windows CE a Linux senza più costi di licenza e sopratutto su un kernel al passo con i tempi!

Avete avuto anche voi situazioni simili?

Dai che forse il 2020 sarà l’anno di linux…almeno per quello che riguarda l’ambito industriale!

Corsette domenicali: proviamo a non buttare plastica

Oggi ce l’ho un po’con il mondo intero per un non ben precisato motivo. Capita, capita a tutti. È in questi giorni però che cerco di tramutare un po’ di negatività in qualcosa di utile.

Me ne stavo li, in mezzo alla strada alle 8 di sera a correre, con la pioggia in testa e mi chiedevo, ma è mai possibile che alle garette di paese si consumi così tanta plastica per i bicchieri nei ristori?

Quindi ho partorito questa semplice idea: chi partecipa alle garette, se vuole bere, si porta il bicchiere da casa.

Esempio, 2 euro su Amazon e passa la paura

Ora dopo gli insulti che mi state tirando, veniamo a rispondere alle vostre domande:

1) Ma se vengo alla garetta e non lo sapevo di sta regola che faccio? Semplice, al tavolo delle iscrizioni, al costo di 2 euro in più, ti vendono IL TUO BICCHIERE PERSONALE PIEGHEVOLE ™

2) Ma come!? Devo fermarmi 3 secondi a farmi riempire il bicchiere e così facendo non riuscirò a battere il mio PR su strava della mezza maratona!?!?#&$¥ Svegliati, stai correndo un cacchio di garetta di paese, che cacchio te ne frega del tuo tempino del menga?

3) Ma non voglio portarmi in giro un bicchiere per tutta la corsa, e’ scomodissimo!!?!?€&*#!! Signori vedo gente con tutto e di più addosso nelle garette: portare un cacchio di bicchiere legato al polso, o addirittura nel taschino del gilet non credo vi faccia sprecare molte energie.

Se siete arrivati fin qua, significa che o siete messi peggio di me, oppure che la mia idea non è così malsana. Quindi quello che propongo è che ognuno, nel proprio piccolo, cerchi di propagandare questa piccola idea all’interno del proprio gruppo di corsa, sperando,un giorno, di partecipare ad una garetta #bicchierinofree

SYCL: diamo un boost ai nostri algoritmi con la GPU

Da qualche giorno (in realtà fine settembre 2019) Intel ha rilasciato LLVM 9.0.0 che porta con se una grandissima novità: un supporto a SYCL perfettamente funzionante.

Per chi non conoscesse SYCL, riporto qui la descrizione di wikipedia:

SYCL (pronuncia “sickle”) è un layer di astrazione gratuito e multipiattaforma progettato sui concetti di portabilità e di efficienza di OpenCL, che permette al codice di piattaforme eterogenee di essere scritto in uno stile “a sorgente singola”, utilizzando completamente lo standard C++. SYCL consente lo sviluppo di una sola sorgente in cui le funzioni di modello C ++ possono contenere sia il codice host (cpu) che quello per il dispositivo (gpu/fpga/arm) al fine di costruire algoritmi complessi che utilizzano l’accelerazione OpenCL e quindi poter riutilizzare tutto il loro codice sorgente su diversi tipi di hardware e di dati. La possibilità, per gli sviluppatori, di non essere costretti a tener conto del dispositivo su cui il programma girerà (necessario in OpenCL), rende molto più semplice e lineare la programmazione.

In breve: potete accelerare i vostri algoritmi usando la GPU!
Quante volte avete raggiunto il limite di un sistema e siete stati costretti a dover upgradare la CPU o addirittura rivoluzionare un algoritmo perfettamente funzionante per cercare di limitare qualche millisecondo ad ogni iterazione?

Beh LLVM + SYCL potrebbero essere una manna dal cielo in queste situazioni.
In particolare ho provato per voi alcuni esempi (trovate tutto qui https://github.com/cagnulein/sycl-benchmarks):
Un semplice FOR da 500.000.000 di iterazioni, comprensivo di una moltiplicazione di una tan per un atan richiede circa 107 secondi per essere eseguito su una CPU intel di settima generazione. Bene, se questo stesso algoritmo lo fate girare su GPU (la stessa GPU integrata della stessa CPU presa in considerazione prima) passerete da 107 secondi a soli 4.8 secondi! Si avete letto bene, 4.8 secondi!

Non vi resta che sporcarvi le mani voi stessi seguendo questo bell’articolo http://pramodkumbhar.com/2019/07/intels-one-api-what-we-know-and-how-to-get-ready/

Se avete dubbi chiedete pure.

Modenacorre e reggiocorre come trovare le VOSTRE foto

Se siete runner “fashion” emiliani (ma non solo) e siete stanchi di cercare le vostre foto nel sito modenacorre.it e reggiocorre.it, beh ragazzi oggi ho la soluzione che fa per voi!

Ho creato questo simpatico script in python ( https://github.com/cagnulein/runcolor ) che, una volta indirizzato sull’album da scansionare ( esempio http://www.reggiocorre.it/showg.aspx?aid=10659 ), vi troverà all’interno delle foto! O meglio, in realtà troverà immagini con un sacco di pixel del colore selezionato.

Non vi siete mai chiesti perchè i runner portano abbigliamenti sgargianti? Beh ora avete la risposta: per favorire la ricerca di se stessi con script in python!

Stavo pensando se generalizzare la cosa creando una pagina web con nodejs, se pensate vi possa essere comodo, donatemi una birra e farò in modo che il vostro sogno diventi realtà!

Sotto un piccolo esempio di runner “fashion” 😀