mycollab 5.x – systemctl service file

Salve nerdacci,
oggi volevo allegarvi un file che non ho trovato in rete e che ho scritto per far partire il software di collaboration mycollab 5.

Il file  mycollab.service deve essere creato nella directory /usr/lib/systemd/system e popolato in questo modo:

[Service]
ExecStart=/agile/MyCollab-5.4.10/bin/startup.sh
Type=forking
User=agileusr
[Install]
WantedBy=multi-user.target

Protagonista del file è la voce Type che deve essere necessariamente forking poichè il processo dovrà lanciare altri processi figlio che devono essere previsti da systemctl.

Come al solito,
spero di aver fatto risparmiare tempo a qualcuno.

a presto 😀

 

Annunci

vmware converter – error: can’t find command ‘:’. after linux conversion

Salve nerdacci,
oggi condenso una mia esperienza negativa in fase di conversione con vmware converter (della quale non ho trovato soluzione su altri forum).

PROBLEMA:

Dopo una conversione di una macchina accesa linux Centos 7, vado ad accendere la virtual machine risultante su vmware workstation 14 e riscontro un fastidioso errore in fase di accensione prima del menù di grub2 del quale vi allego una foto.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SOLUZIONE:

L’errore è dovuto alla conversione del file /boot/grub2/grub.cfg da parte di vmware converter, il quale commenta molte voci in maniera errata verso la fine del file.  Quindi l’unico modo per risolvere il problema è pulire da tutti i commenti inutili e nocivi il file appena citato.

Spero di aver aiutato qualcuno e soprattutto di avergli fatto risparmiare tempo.

A presto 😀

Missing .dll error during startup on Windows 10

Salve Nerdacci,

oggi volevo esaminare al volo un situazione in cui mi sono trovato ultimamente durante un clone di windows 10 per un cliente che voleva passare ad un SSD.

PROBLEMA :S
Come suggerisce il titolo, l’errore che si è presentato è la mancanza di alcuni dll fondamentali come sechost.dll che non permettevano il corretto avvio di alcuni programmi e l’installazione di nuovi.

SOLUZIONE =)
Per risolvere il problema (in un caso analogo al mio) basterà eseguire i comandi che sto per elencare in successione in un prompt dei comandi con permessi amministrativi. Per aprirne uno basterà premere il tasto windows, digitare cmd e premere  CTRL+SHIFT+ENTER.
Di seguito i comandi da eseguire in ordine:

  1. DISM.exe /Online /Cleanup-image /Scanhealth
  2. DISM.exe /Online /Cleanup-image /Restorehealth
  3. sfc /scannow

Una volta terminata l’esecuzione (in totale dovrebbe portarvi via meno di un’ora) riavviate il sistema operativo ed enjoy =)

Spero di aver aiutato qualcuno,
a presto

wumanage – attiviamo/disattiviamo windows update velocemente

Salve Nerdacci e non,
oggi vi volevo lasciare un piccolo script batch che ho creato dopo la richiesta di molti amici e colleghi che lamentavano l’utilizzo eccessivo della banda durante le loro sessioni di gioco da parte di Windows Update.

Windows Update come spiegato nell’articolo qui è formato da più servizi che vanno attivati e disattivati con un certo ordine. Quanto detto viene fatto dallo script che riporto sotto:

ECHO OFF
CLS
:MENU
ECHO.
ECHO ...............................................
ECHO WUSM
ECHO Windows Update Service Manager by JohnKernel
ECHO ...............................................
ECHO Selezionare un opzione dal menu contestuale
ECHO ...............................................
ECHO.
ECHO 1 - Enable windows update services
ECHO 2 - Disable windows update services
ECHO 0 - EXIT
ECHO.
SET /P M=Type 1, 2 or 0 then press ENTER:
IF %M%==1 GOTO EWU
IF %M%==2 GOTO DWU
IF %M%==0 GOTO EOF
:EWU
net start wuauserv
net start bits
net start dosvc
GOTO MENU
:DWU
net stop wuauserv
net stop bits
net stop dosvc
GOTO MENU

Avviate come amministratore, seguite le istruzioni ed enjoy =)

Error code 0x80070015

Salve Nerdacci e non,
scrivo dopo un po di tempo perchè sono stato molto incasinato con il lavoro ma torno a bomba con un articolo sull’errore che vedete nel titolo che si presenta in fase di update di windows.

L’errore è causato da molteplici fattori ma voglio proporvi dei passi che hanno risolto il mio caso.

Windows update è formato da ben 3 servizi che interagiscono con il sistema:

  • wuauserv
  • bits
  • dosvc

L’ultimo è una delle possibili cause del problema in oggetto ma anche di altri come l’utilizzo ingiustificato della vostra banda internet, che nel caso dei videogiocatori potrebbe essere una bella rogna.

Soluzione:
Quindi quello che andremo a fare per risolvere il problema è semplicemente controllare con quale utenza il servizio dosvc  viene avviato. Cerchiamo nella lista dei servizi “Delivery Optimization” raggiungibile velocemente premendo Win+R, scrivendo services.msc e premendo invio. A questo punto accediamo alle sue proprietà premendo il tasto destro e cliccando su “Properties”. Ora andiamo sul tab “Log On” e controlliamo che il servizio venga avviato come “Local System account”. Ora il servizio dovrebbe avviarsi correttamente e permettere a windows update di funzionare correttamente.

Spero che la soluzione vi sia utile.
Al prossimi articolo ed Enjoy =)

NB1 – vi presento il mio robot #2 – il codice

Salve Nerdacci,

non mi sono dimenticato di voi e come promesso vi posto la versione del codice attualmente in utilizzo su NB1. Finalmente i sensori mancanti sono arrivati e quindi a breve potrò partire con i test. Ma non perdiamoci in chiacchiere e guardiamo il codice:

const short MOTOROUTPUT1 = 2;
const short MOTOROUTPUT2 = 3;
const short MOTOROUTPUT3 = 4;
const short MOTOROUTPUT4 = 5;
const short SENSORECHO1 = 6;
const short SENSORTRIG1 = 7;
const short SENSORECHO2 = 8;
const short SENSORTRIG2 = 9;
const short POWERBUTTON = 10;
const short SENSORECHO3 = 12;
const short SENSORTRIG3 = 13;
const short IRRECEIVER1 = A2;
const short IRRECEIVER2 = A0;
const short IRRECEIVER3 = A1;
const bool serialdbg = false;
const bool screendbg = true;
int duration,distance;</code>

void setup()
{
 if(serialdbg) Serial.begin(9600);

 //POWER BUTTON
 pinMode(POWERBUTTON, INPUT);

 //MOTOR PINS
 pinMode(MOTOROUTPUT1, OUTPUT);
 pinMode(MOTOROUTPUT2, OUTPUT);
 pinMode(MOTOROUTPUT3, OUTPUT);
 pinMode(MOTOROUTPUT4, OUTPUT);

 //SONIC SENSOR PINS
 pinMode(SENSORTRIG1, OUTPUT);
 pinMode(SENSORTRIG2, OUTPUT);
 pinMode(SENSORTRIG3, OUTPUT);
 pinMode(SENSORECHO1, INPUT);
 pinMode(SENSORECHO2, INPUT);
 pinMode(SENSORECHO3, INPUT);

 //INFRARED SENSOR PINS
 pinMode(IRRECEIVER1, INPUT);
 pinMode(IRRECEIVER2, INPUT);
 pinMode(IRRECEIVER3, INPUT);

 if(screendbg) {
  //OLED DISPLAY SETUP
  // assign default color value
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
   u8g.setColorIndex(255); // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
   u8g.setColorIndex(3); // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
   u8g.setColorIndex(1); // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
   u8g.setHiColorByRGB(255, 255, 255);
 }

 u8g.firstPage();
 do {
  initScreen();
 } while ( u8g.nextPage() );
   delay(2000);
 }
}

void initScreen()
{
 u8g.setFont(u8g_font_osb21);
 u8g.drawStr( 40, 22, "NB1");
}

void clearScreen() {}

void draw(short sensor,int value=0) {
 u8g.setFont(u8g_font_osb18);
 u8g.setFontPosTop();
 enum {BufSize=9}; // If a is short use a smaller number, eg 5 or 6
 char buf[BufSize];
 switch (sensor) {
 case 1:
 //front sensor
 u8g.drawFrame(45, 2, 40, 30);
 snprintf (buf, BufSize, "%d", value);
 u8g.drawStr(46, 3, buf);
 break;
 case 2:
 //left sensor
 u8g.drawFrame(2,20,42,30);
 snprintf (buf, BufSize, "%d", value);
 u8g.drawStr( 3, 21, buf);
 break;
 case 3:
 //right sensor
 u8g.drawFrame(86,20,42,30);
 snprintf (buf, BufSize, "%d", value);
 u8g.drawStr(87, 21, buf);
 break;
 case 99:
 //stop
 u8g.drawStr( 40, 22, "Stop");
 break;
 }
}

void loop() {
 //dichiarazione variabili
 int distance;

 //Serial.println("--------------------------------------------");
 while (!proximityChk(1)) {
  if ((!irCheck(2)) && (!irCheck(3))) {
   if(serialdbg) Serial.println("move forward");
   moveForward();
  } else break;
 }
 //se nb1 è circondato
 if (proximityChk(2) && proximityChk(3)) {
  //eseguo retromarcia
  while (proximityChk(2) && proximityChk(3)) {
   if(serialdbg) Serial.println("move backward");
   moveBackward();
  }
  if ((!proximityChk(2)) && (!irCheck(2))) {
  if(serialdbg) Serial.println("turn left");
  turnLeft();
 } //altrimenti controllo se a destra è libero
 else {
 //mi giro a destra
  if ((!proximityChk(3)) && (!irCheck(3))) {
   if(serialdbg) Serial.println("turn right");
   turnRight();
   }
  }
 } else { //altrimenti controllo per convenzione a sinistra
 //se a sinistra è libero mi giro a sinistra
 if (!proximityChk(2)){
  if(serialdbg) Serial.println("turn left");
  turnLeft();
 } //altrimenti controllo se a destra è libero
 else {
 //mi giro a destra
  if (!proximityChk(3)) {
   if(serialdbg) Serial.println("turn right");
   turnRight();
  }
 }
}
}

 boolean irCheck(short irSensor) {
 switch (irSensor) {
 case 1:
 if(serialdbg) Serial.println(" - fotodiodo inferiore -");
 if(digitalRead(IRRECEIVER1)==HIGH) return true;
 break;
 case 2:
 if(serialdbg) Serial.println(" - fotodiodo di sinistra -");
 if(digitalRead(IRRECEIVER2)==LOW) return true;
 break;
 case 3:
 if(serialdbg) Serial.println(" - fotodiodo di destra -");
 if(digitalRead(IRRECEIVER3)==LOW) return true;
 break;
 }
 return false;
 }

boolean proximityChk(short sensor) {
 if(serialdbg) Serial.print("controllo sensore ");
 if(serialdbg) Serial.println(sensor);
 switch (sensor) {
 case 1:
 //front sensor
 //imposto il segnale del trigger basso per 2microseconds
 digitalWrite(SENSORTRIG1, LOW);
 delayMicroseconds(2);
 //imposto il segnale del trigger alto per 10microseconds
 digitalWrite(SENSORTRIG1, HIGH);
 delayMicroseconds(10);
 //imposto il segnale del trigger basso fino a nuova condizione
 digitalWrite(SENSORTRIG1, LOW);
 duration = pulseIn(SENSORECHO1, HIGH);
 break;
 case 2:
 //left sensor
 //imposto il segnale del trigger basso per 2microseconds
 digitalWrite(SENSORTRIG2, LOW);
 delayMicroseconds(2);
 //imposto il segnale del trigger alto per 10microseconds
 digitalWrite(SENSORTRIG2, HIGH);
 delayMicroseconds(10);
 //imposto il segnale del trigger basso fino a nuova condizione
 digitalWrite(SENSORTRIG2, LOW);
 duration = pulseIn(SENSORECHO2, HIGH);
 break;
 case 3:
 //right sensor
 //imposto il segnale del trigger basso per 2microseconds
 digitalWrite(SENSORTRIG3, LOW);
 delayMicroseconds(2);
 //imposto il segnale del trigger alto per 10microseconds
 digitalWrite(SENSORTRIG3, HIGH);
 delayMicroseconds(10);
 //imposto il segnale del trigger basso fino a nuova condizione
 digitalWrite(SENSORTRIG3, LOW);
 duration = pulseIn(SENSORECHO3, HIGH);;
 break;
 }

 //Calculate the distance (in cm) based on the speed of sound.
 distance = duration / 58;
 if(serialdbg) Serial.print("distanza: ");
 if(serialdbg) Serial.println(distance);

 if((distance>=0)&&(screendbg)) {
 u8g.firstPage();
 do {
 draw(sensor,distance);
 }
 while ( u8g.nextPage() );
 }

 //se la distanza dall'ostacolo è uguale o superiore a 15cm proseguo
 if (distance >= 15) {
 return false;
 }
 else return true;
}

void moveForward() {
 if(irCheck(1)) {
  digitalWrite(MOTOROUTPUT1, LOW);
  digitalWrite(MOTOROUTPUT2, HIGH);
  digitalWrite(MOTOROUTPUT3, HIGH);
  digitalWrite(MOTOROUTPUT4, LOW);
 }
}

 void moveBackward(){
  stop();
  //startPlayback(sample1, sizeof(sample1));
  digitalWrite(MOTOROUTPUT1, HIGH);
  digitalWrite(MOTOROUTPUT2, LOW);
  digitalWrite(MOTOROUTPUT3, LOW);
  digitalWrite(MOTOROUTPUT4, HIGH);
  delay(1000);
 }

 void turnLeft() {
  moveBackward();
  //startPlayback(sample2, sizeof(sample2));
  digitalWrite(MOTOROUTPUT1, LOW);
  digitalWrite(MOTOROUTPUT2, HIGH);
  digitalWrite(MOTOROUTPUT3, LOW);
  digitalWrite(MOTOROUTPUT4, LOW);
  delay(2000);
 }

 void turnRight(){
  moveBackward();
  //startPlayback(sample3, sizeof(sample3));
  digitalWrite(MOTOROUTPUT1, LOW);
  digitalWrite(MOTOROUTPUT2, LOW);
  digitalWrite(MOTOROUTPUT3, HIGH);
  digitalWrite(MOTOROUTPUT4, LOW);
  delay(2000);
 }

 void sharpLeft(){
  //startPlayback(sample3, sizeof(sample3));
  digitalWrite(MOTOROUTPUT1, LOW);
  digitalWrite(MOTOROUTPUT2, HIGH);
  digitalWrite(MOTOROUTPUT3, LOW);
  digitalWrite(MOTOROUTPUT4, HIGH);
  delay(2000);
 }

 void sharpRight(){
  //startPlayback(sample3, sizeof(sample3));
  digitalWrite(MOTOROUTPUT1, HIGH);
  digitalWrite(MOTOROUTPUT2, LOW);
  digitalWrite(MOTOROUTPUT3, HIGH);
  digitalWrite(MOTOROUTPUT4, LOW);
  delay(2000);
 }

 void stop() {
  digitalWrite(MOTOROUTPUT1, LOW);
  digitalWrite(MOTOROUTPUT2, LOW);
  digitalWrite(MOTOROUTPUT3, LOW);
  digitalWrite(MOTOROUTPUT4, LOW);
 }

a presto!