Copilot in Excel 365

Dicevo che Copilot in Microsoft 365 è un disastro in Excel mentre è abbastanza utile in Word e in PowerPoint, ma mi sto ricredendo.

Premessa: Copilot si attiva solo se il file è salvato in OneDrive con il salvataggio automatico attivo.

Una funzionalità nuova a cui mi sto abituando e che mi piace: “Copilot, spiega questa formula“. Esempio: ho chiesto di spiegare la formula in R59

Anche su Python in Excel ero molto scettico e mi dicevo: se sai fare i grafici in Excel te li fai in Excel, non hai bisogno di Python; e se sai fare i grafici con Python, non hai bisogno di usare Excel.

Ma succede che gli LLM sono deboli con i numeri e forti con il testo, e Python è testo. Per cui Copilot risolve con Python quei problemi che con Excel non sa risolvere.

Per esempio, in questa tabella (formattata come tabella) selezionando una cella qualsiasi compare l’icona di Copilot che propone “Ottieni risultati di analisi più approfonditi con Python

Selezionando quel comando, mi dice che creerà un nuovo foglio con formule Python

Questo è il risultato, suscettibile di ulteriore approfondimento:

D’accordo, il tuo falegname con 30.000 Lire (cit.), ma a me sembra un buon inizio.

Guidare una Panda Cross

Tra Ottobre e Novembre 2024 ho guidato per 788km, consumando 225 litri di benzina, con una velocità media di 41,2 km/h con un consumo medio di 11,8 km per litro.

Per tre quarti del tempo ho viaggiato a velocità inferiori a 50 km/h:

Il consumo effettivo alle basse velocità è assai maggiore rispetto ai dati strombazzati della casa madre:

La sesta marcia è una opzione di cui si potrebbe tranquillamente fare a meno. L’ho usata in qualche lunga discesa in autostrada, giusto perché sapevo che stavo registrando:

Tutto ciò è stato registrato con un ODB2 collegato ad Android:

L’app Torque permette di registrare e scaricare i dati in formato .csv, per poterli poi elaborare con Excel o Power BI.

Questi sono i campi che io raccolgo:

Device Time
  G(x)
  G(y)
 G(z)
  G(calibrated)
  Fuel Remaining (Calculated from vehicle profile)(%)
Kilometers Per Litre(Instant)(kpl)
Kilometers Per Litre(Long Term Average)(kpl)
Litres Per 100 Kilometer(Long Term Average)(l/100km)
Fuel flow rate/minute(cc/min)
Engine RPM(rpm)
Throttle Position(Manifold)(%)
Barometric pressure (from vehicle)(psi)
Intake Manifold Pressure(psi)
Air Fuel Ratio(Measured)(:1)
Torque(Nm)
Engine kW (At the wheels)(kW)
Intake Air Temperature(°C)
Engine Coolant Temperature(°C)
Speed (OBD)(km/h)

pi-hole

Ho aggiornato pi-hole sulla mia rete di casa, e già che c’ero sono andato a vedere come lavora. Ecco il numero di richieste bloccate durante 24 ore:

Non è statisticamente rilevante, ma nella mia rete casalinga, circa un terzo del traffico è pubblicità o spionaggio commerciale.

Coding: pensieri sparsi

Lettura : Scrittura = Uso del computer : Programmazione

Si impara a leggere e a scrivere da piccoli, perché è il momento in cui si impara con maggiore facilità, per sempre.

Tutti imparano a scrivere, anche se pochi diventeranno scrittori.

Non ha senso imparare a leggere senza imparare a scrivere.

In quasi tutti i mestieri del mondo, tranne forse i più umili, è necessario saper scrivere. La stessa cosa vale oggi: non c’è professione qualificata che non richieda almeno la conoscenza delle basi della programmazione

Anche un foglio di Excel è un programma (input -> algoritmo -> output) in linguaggio funzionale.

Tempo fa, a una platea di programmatori di tutte le età, ho chiesto: “Chi di voi ha scritto il suo primo programma prima dei 14 anni?” Hanno alzato la mano quasi tutti.

Cosa si impara con il coding

Si impara prima di tutto a porsi dei problemi, e poi a risolverli.

Si impara a ragionare con metodo, senza rinunciare alla intuizione.

Si impara a essere creativi e fantasiosi.

Si impara a ragionare in una lingua straniera.

Si impara a riciclare le soluzioni altrui adattandole al proprio caso.

Si impara a non arrendersi davanti alle difficoltà.

(post in progress)

micro:bit apertura con password

Per azionare il motore che apre la porta, occorre inserire la password pre-impostata (AABAA) premendo i bottoni A e B del micro:bit. Per confermare la password occorre premere contemporaneamente i bottoni A + B. Se la password è giusta, compare il segno di spunta e la porta si apre; altrimenti compare una X ed è possibile riprovare.

Quando compare il segno di spunta, è possibile inserire una nuova password premendo i bottoni A e B, confermando l’inserimento premendo contemporaneamente A + B. La nuova password viene visualizzata una volta prima di diventare attiva.

Per chiudere la porta, occorre premere insieme A + B senza inserire password.

Ovviamente, ogni volta che si riaccende il micro:bit si riparte dalla password pre-impostata.

Il codice in Python:

def on_button_pressed_a():
    global tentativo, nuovapassword
    if stato == "inserimento":
        tentativo = "" + tentativo + "A"
    else:
        nuovapassword = "" + nuovapassword + "A"
input.on_button_pressed(Button.A, on_button_pressed_a)

def on_button_pressed_ab():
    global nuovapassword, stato, tentativo, password
    if stato == "inserimento":
        if tentativo == password:
            basic.show_icon(IconNames.YES)
            pins.servo_write_pin(AnalogPin.P0, 90)
            nuovapassword = ""
            stato = "modifica"
        else:
            basic.show_icon(IconNames.NO)
            stato = "inserimento"
            pins.servo_write_pin(AnalogPin.P0, 0)
        basic.pause(500)
        basic.clear_screen()
        tentativo = ""
    else:
        password = nuovapassword
        basic.show_string("" + (password))
        stato = "inserimento"
input.on_button_pressed(Button.AB, on_button_pressed_ab)

def on_button_pressed_b():
    global tentativo, nuovapassword
    if stato == "inserimento":
        tentativo = "" + tentativo + "B"
    else:
        nuovapassword = "" + nuovapassword + "B"
input.on_button_pressed(Button.B, on_button_pressed_b)

nuovapassword = ""
stato = ""
tentativo = ""
password = ""
password = "AABAA"
tentativo = ""
stato = "inserimento"
nuovapassword = ""
pins.servo_write_pin(AnalogPin.P0, 0)