Informazioni hardware con Windows e WMIC

https://docs.microsoft.com/it-IT/windows/desktop/wmisdk/wmic

per vedere cosa si può fare con WMIC, si può leggere l’help con il comando

wmic /?

tra gli altri, troviamo i seguenti ALIAS:

  • BASEBOARD: fornisce informazioni sulla scheda madre
  • BIOS: ….
  • BOOTCONFIG: configurazione di avvio
  • CPU: ….
  • MEMORYCHIP: informazioni sulla RAM
  • STARTUP: programmi eseguiti all’avvio

con GET è possibile selezionare, separati da virgole, i campi da visualizzare: ad esempio

wmic memorychip get manufacturer, partnumber, capacity

è possibile formattare l’output in vari formati: vedere l’help

wmic /FORMAT /?

pagina di manuale:
https://ss64.com/nt/wmic.html

Pubblicato in Programmazione | Contrassegnato , , , , , , , , | Lascia un commento

فرانچسکو

فرانچسکو

Pubblicato in Uncategorized | Lascia un commento

Compilare CouchDB 2.3.0 su Debian Buster (testing)

Uso una macchina virtuale VirtualBox, su cui ho installato Debian Buster (testing) 64 bit, fresh.
Per comodità ho aggiunto LXDE.

  1. Installo make e build-essential
  2. Installo linux-headers-amd64
  3. Installo erlang

Dopo aver scaricato e scompattato apache-couchdb-2.3.0.tar.gz,entro nella directory e lancio i comandi ./configure e make: la compilazione si arresta perchè non viene trovato il file jsapi.h : questo perchè non è soddisfatta la dipendenza di Mozilla SpiderMonkey (1.8.5), ovvero il pacchetto libmozjs185-dev, non disponibile per Buster.

La cosa più semplice, per soddisfare le dipendenze di libmozjs185-dev è scaricare il pacchetto per una diversa release (sid ha solo la versione per arm64….. prendo la versione per Debian stretch): nella pagina https://packages.debian.org/stretch/libmozjs185-dev si vede che esso dipende a sua volta da libffi-dev e libnspr4-dev, che però sono disponibili per Buster e che quindi installo senza problemi da aptitude.

Invece libmozjs185-dev e libmozjs185-1.0 li scarico come file .deb e li installo con dpkg -i libmozjs185-*

Adesso manca la libreria libicu-dev, disponibile con aptitude.

Ora la compilazione viene eseguita senza errori.

Per creare la release da usare, si lancia il comando make release: questo crea la directory rel/couchdb che può essere copiata sul server, pronta per essere usata.

Ricapitolando: i pacchetti necessari per la compilazione sono:

  • make
  • build-essential
  • linux-headers-amd64
  • erlang
  • libffi-dev
  • libnspr4-dev
  • libicu-dev
  • libmozjs185-dev e libmozjs185-1.0 devono essere scaricati manualmente

Ora copio rel/couchdb in /opt e creo l’utente e il gruppo “couchdb”, e quindi cambio i permessi dei file (si può anche evitare di creare la home directory per questo user…. forse si può anche impostare il disabled-login…. da studiare):

adduser --system \
--shell /bin/bash \
--group --gecos \
"CouchDB Administrator" couchdb

chown -R couchdb:couchdb /opt/couchdb
find /opt/couchdb -type d -exec chmod 0770 {} \;
chmod 0644 /opt/couchdb/etc/*

# lancio couchdb come utente couchdb:
su - couchdb /opt/couchdb/bin/couchdb

anche se si vedono diversi messaggi di warning o errore, non importa: dobbiamo ancora configurare il server.
Puntanto il browser su localhost:5984 dobbiamo ricevere un messaggio JSON di benvenuto : l’installazione è avvenuta correttamente !!!

La configurazione e la verifica si effettuano sulle pagine:
http://127.0.0.1:5984/_utils/index.html
http://localhost:5984/_utils/index.html#verifyinstall

Ora rimane solo la creazione di uno script per lanciare couchdb con systemd:

[Unit]
Description=Couchdb service
After=network.target

[Service]
Type=simple
User=couchdb
Group=couchdb
ExecStart=/opt/couchdb/bin/couchdb -o /dev/stdout -e /dev/stderr
Restart=always

[Install]
WantedBy=multi-user.target

Per utilizzare couchdb compilato su altre macchine, è necessario installare la libreria libmozjs185-1.0 !!!!

Configurare il bind_address nella configurazione di rete, e impostare iptables di conseguenza.

Pubblicato in Debian, Programmazione | Contrassegnato , , , , , , , | Lascia un commento

12 Febbraio 2019

Oroscopo di Branko
Martedì 12 Febbraio 2019

VERGINE
24 Agosto / 22 Settembre

Un bel sogno d’amore. Il cuore riceve la carezza di Venere e del primo quarto, mentre Marte è sempre più vicino, qualcosa di eccitante nell’aria, un nuovo amore in arrivo… Commovente il bisogno di appartenere a qualcuno che vi corrisponda in tutto. L’amore vi dà la forza di combattere nell’ambiente di lavoro. Saturno ricorda: le grandi imprese si programmano con grandi persone.

Pubblicato in Uncategorized | Contrassegnato , , , | Lascia un commento

FF WebExtension: messaging

di seguito pubblico una base per un progetto di WebExtension che utilizza il sistema di scambio di messaggi tra content script e background script.
mi rimane un dubbio: impostando “run_at” come nel seguente esempio

// manifest.json

{

"manifest_version": 2,
"name": "somename DEBUG",
"version": "1.0",

"applications": {
"gecko": {
"id": "myname@mydomain",
"strict_min_version": "54.0"
}
},

"icons": {
"56": "icons/icon_128x128.png"
},

"permissions": [
"tabs", "webRequest", "webRequestBlocking", "webNavigation", "*://*.someurl.com/*"
],

"background": {
"scripts": ["backgroundInclude.js", "background.js"]
},

"content_scripts": [{
"matches": ["*://*.someurl.com/*"],
"js": ["include.js", "main.js"],
"css": ["css/style.css"],
"run_at": "document_start"
}]
}

lo script viene iniettato prima che avvenga il caricamento del DOM.
ma chi mi garantisce che la connessione delle porte tra content script e background avvenga prima che possa essere effettuata qualche web request ?

la successione degli eventi è la seguente: quando il background intercetta una Web Request, la inoltra con un messaggio al content script

  1. BACKGROUND: costruttore
  2. BACKGROUND: onBeforeNavigate
  3. BACKGROUND: onCommitted
  4. CONTENT: constructor
  5. CONTENT: port connect to background
  6. BACKGROUND: port onConnect
  7. BACKGROUND: onBeforeRequest (xhr)
  8. BACKGROUND: onBeforeRequest (xhr)
  9. BACKGROUND: onBeforeRequest (xhr)
  10. CONTENT: xhr request received from background
  11. CONTENT: xhr request received from background
  12. CONTENT: xhr request received from background
  13. BACKGROUND: onDOMContentLoaded

sembrerebbe che la connessione delle porte avvenga prima che vengano effettuate le Web Request, ma ho provato ad inserire un setTimeout nel costruttore del content script e ho notato che le Web Request non attendono la restituzione del costruttore….

probabilmente bisogna interrompere il caricamento delle pagine per attendere la completa connessione delle porte ?

background script

notare il callback onDisconnect: viene lanciato quando la porta viene disconnessa dal content_script

'use strict';

class IGBackground {
constructor() {
console.log("BACKGROUND: costruttore");
this.ports = [];
this.urlFilter = {
url: [{hostSuffix: "someurl.com"}]
};

this.onConnect = this.onConnect.bind(this);
this.onMessage = this.onMessage.bind(this);
this.onDisconnect = this.onDisconnect.bind(this);
this.onBeforeNavigate = this.onBeforeNavigate.bind(this);
this.onCommitted = this.onCommitted.bind(this);
this.onDOMContentLoaded = this.onDOMContentLoaded.bind(this);

this.onBeforeFirstRequest = this.onBeforeFirstRequest.bind(this);
this.onBeforeGraphQLRequest = this.onBeforeGraphQLRequest.bind(this);

browser.runtime.onConnect.addListener(this.onConnect);
browser.webRequest.onBeforeRequest.addListener(this.onBeforeFirstRequest, {
urls: ["*://*.someurl.com/*"],
types: ["main_frame"]
}, ["blocking"]);
browser.webRequest.onBeforeRequest.addListener(this.onBeforeGraphQLRequest, {
urls: ["*://www.someurl.com/graphql/*"]
}, ["blocking"]);
browser.webNavigation.onBeforeNavigate.addListener(this.onBeforeNavigate, {
url: [{hostSuffix: "someurl.com"}]
});

browser.webNavigation.onCommitted.addListener(this.onCommitted, this.urlFilter);
browser.webNavigation.onDOMContentLoaded.addListener(this.onDOMContentLoaded, this.urlFilter);
}

onConnect(port) {
console.group("BACKGROUND");
console.log("port onConnect");
this.ports[port.sender.tab.id] = port;
this.ports[port.sender.tab.id].onMessage.addListener(this.onMessage);
this.ports[port.sender.tab.id].onDisconnect.addListener(this.onDisconnect);
console.log(this.ports);
console.groupEnd();
}

onMessage(msg) {
// riceve i messaggi dai content script
}

onDisconnect(port) {
console.log("BACKGROUND: port onDisconnect", port);
this.ports.splice(port.sender.tab.id, 1);
console.log("BACKGROUND: ports", this.ports);
}

onBeforeFirstRequest(details) {
console.group("BACKGROUND")
console.log("onBeforeFirstRequest");
console.log(details.url);
console.log(this.ports);
console.groupEnd();
return {};
}

onBeforeGraphQLRequest(details) {
console.log("BACKGROUND: onBeforeGraphQLRequest");
let filter = browser.webRequest.filterResponseData(details.requestId);
let decoder = new TextDecoder("utf-8");
let port = this.ports[details.tabId];
let data = "";

// filter.onstart = event => {}

filter.ondata = event => {
data += decoder.decode(event.data, {stream: true});
// inoltra i dati alla pagina HTML
filter.write(event.data);
}

filter.onstop = event => {
// TODO: controllare se tabId non è -1 (request no related to a tab)
// TODO: this.ports non è pronto subito ! è vuoto inizialmente
// TypeError: this.ports[details.tabId] is undefined
let json = JSON.parse(data);
json.address = decodeURIComponent(details.url);
port.postMessage(json);
filter.close();
}

filter.onerror = event => {
console.log(`Error: ${filter.error}`);
}
}

onBeforeNavigate(details) {
console.log("BACKGROUND: onBeforeNavigate");
}

onCommitted(details) {
console.log("BACKGROUND: onCommitted");
}

onDOMContentLoaded(details) {
console.log("BACKGROUND: onDOMContentLoaded");
}
}

content script

notare il callback onUnload: quando la pagina viene chiusa, disconnetto la porta, così il background, ricevendo l’evento onDisconnect, può fare pulizia.


'use strict';

class IG {
constructor() {
console.log("CONTENT: constructor");
this.port = browser.runtime.connect();
this.onMessage = this.onMessage.bind(this);
this.port.onMessage.addListener(this.onMessage);
console.log("CONTENT: port connected to background");

this.onUnload = this.onUnload.bind(this);
window.addEventListener("unload", this.onUnload);
}

onMessage(msg) {
console.log(msg);
}

onUnload(event) {
console.log("CONTENT: onunload");
this.port.disconnect();
}
}
Pubblicato in Programmazione | Contrassegnato , , , , , , , , , , | Lascia un commento

Antifurto

Centrale Combivox
Telecamere hikvision

Pubblicato in Uncategorized | Lascia un commento

Moto G5S

Motorola Moto G5S

Chipset: Qualcomm Snapdragon 430 MSM8937
DSP Qualcomm® Hexagon™ 536
AUDIO Qualcomm Aqstic™ audio technology

AQT1000 Qualcomm Aqstic™ Hi-Fi DAC

Pubblicato in Uncategorized | Contrassegnato , , , , , , , , , , | Lascia un commento