Aquest matí he actualitzat els servidors a FreeBSD 12.1. Sense problemes.
Arxiu de la categoria: Informàtica i comunicacions
Notes sobre programació, sistemes operatius, comunicacions
Error UPDATE MS Access
Una mini base de dades Access que funciona des de fa uns 12 anys ha començat a fallar en la generació d’uns informes, mostrant error “La consulta está dañada”.
En concret dóna el aquest error:

en executar aquesta sentència:
UPDATE resum SET resimp1 = 200 WHERE resrelcat = 2
M’hi dedico una bona estona sense entendre-ho. Al final consulto el text de l’error a Google i… brutal, Microsoft ha introduït un error en una actualització d’Access que trenca una instrucció tan elemental com aquesta.
Aplico el remei d’actualitzar una consulta cresum que té tots els camps de la taula resum, i funciona.
Aquesta pífia és ben grossa.
Mode fosc
Ara la moda és crear un mode fosc per les aplicacions de mòbil i d’ordinador. Els he trobat sempre descansats, i quan puc els faig servir.
Temps era temps totes les pantalles eren negres, i vam rebre amb alegria els WYSIWYG amb què vam passar del WordPerfect per a DOS al Word de Windows. O del Lotus 123 a l’Excel.
Tot torna, com deien les àvies?
Brave
Des d’ahir faig servir Brave com a navegador a l’ordinador personal, el mòbil i l’iPad.
- Té motor Chromium, accepta plugins de Chrome.
- Permet sincronitzar adreces d’interès entre tots els dispositius sense identificar-se.
- Bloqueja rastrejadors i anuncis.
De moment no hi he trobat cap problema.
Nano 4.2 no funciona
Ahir vaig voler fer servir l’editor nano 4.2 en els dos FreeBSD 12 que tinc i no funciona. Literalment peta, amb bolcat de memòria inclòs. La setmana passada hi va haver una actualització de llibreries i paquets bastant voluminosa, deu estar malament des d’aleshores.
Mirat per Internet, li passa a altra gent. Sembla relacionat amb les opcions de localització, però no n’he tret l’aigua clara. Algú suggeria de compilar la versió de ports en comptes de fer servir el binari de pkg, però el problema persisteix.
Doncs a aprendre emacs d’una vegada! (El vi i derivats em superen).
Compatibilitat electromagnètica
Fa uns dies em vaig posar neguitós: soroll de fons als altaveus de l’equip de música i (el pitjor) de tant en tant un xiulet agut, d’uns segons de durada, fluix però perceptible i molest. D’aquells que si sents una vegada els notes per sempre més. I això amb un amplificador nou, suposadament bo!
Desenterro del fons de la memòria els coneixements de “compatibilitat electromagnètica” i faig unes quantes proves:
- Si connecto amplificador a corrent sense terra el soroll desapareix.
- Tinc la sortida d’auriculars de la tele connectada a l’amplificador. Si la desconnecto el soroll també s’atura.
- I també desapareix si desconnecto l’antena.
Conclusió: el circuit antena – televisor – auriculars – amplificador – terra és l’origen del soroll.
Com que sense antena la tele no va i no és recomanable aïllar l’amplificador de terra tornaré a fer servir la sortida d’àudio digital del televisor, com tenia de tres anys ençà.
Client windows qobuz
Des de fa unes setmanes el client Windows de Qobuz em va bastant malament, bé, més ben dit no va, se’m penja. He provat de reinstal·lar-lo, i no he aconseguit que funcioni. Crec que té a veure amb els dispositius d’àudio de l’ordinador, però m’he cansat de perdre-hi temps.
He instal·lat una drecera de Chrome a https://play.qobuz.com, en mode “app”, i va prou bé.
Patró gestió connexions a base de dades
Ja he parlat alguna altra vegada de SQLAlchemy.
Com sabreu els que us hi heu dedicat alguna vegada, la gestió de les connexions a les bases de dades és un punt crític a les aplicacions amb diversos usuaris simultanis. Bé, és extensible a qualssevol recursos escassos.
Una solució que proposen (i deixen ben clar que no és l’única) és la següent:
from contextlib import contextmanager
sessions = sessionmaker (...)
@contextmanager
def entorn_sessio ():
sessio = sessions()
try:
yield sessio
sessio.commit()
except:
sessio.rollback()
raise
finally:
sessio.close()
def fer_feina():
# En acabar-se el WITH el bloc torna a entorn_sessio, just després del YIELD.
# Farà el commit
# Si hi ha un error rebrem l'excepció
# En tot cas allibera la connexió a la base de dades
try:
with entorn_sessio() as una_sessio:
# El que hi ha dins del WITH pot fer l'accés a base de dades
llibre_nou = Llibre(autor="Pierre Lemaître", titol="Couleurs de l'incendie")
una_sessio.add (llibre_nou)
except:
# Tractar els errors des del punt de vista funcional, sense amoïnar-se per la connexió a la base de dades
# I aquí seguim fent coses que no necessiten base de dades
fer_mes_feina_sense_base_dades ()
L’he trobat molt elegant i a més m’agrada perquè:
- Queda clar en quin bloc es fa accés a base de dades (el que és dins del with). Això convida a fer-lo curt i, si no ho és, a repensar-ho una mica.
- Fa una gestió global del recurs (l’accés a base de dades) de forma bastant còmoda, que em sembla fàcil d’estandarditzar en tota una aplicació o en un equip de treball.
- En cap cas es queden connexions obertes (si se segueix el patró a tot arreu, és clar).
- M’ha permès aprofundir en el yield (no l’havia fet servir mai, encara… i és que m’agrada el Python, però vaig aprendre a programar amb BASIC i Pascal, que són molt tradicionals).
L’he començat a fer servir per una aplicació d’ús personal, amb una variant: un “entorn_sessio” per a actualitzacions (com el que hi ha a l’exemple de dalt) i un altre només per consultes, que incondicionalment fa un rollback() al final.
Si bé aquest mètode em sembla bo, no hi ha solució universal a aquests problemes. I gairebé és tan important assegurar-se que dins d’una aplicació es fa a tot arreu de la mateixa manera com la correcció de la solució per ella mateixa.
22/3/2019: Exemple retocat.