Tesseract

Tesseract – new dimensions for the web

MemoCode

Internet TV

MemoCode:

Free code snippets manager

MyInternetTV:

The final solution for TV on PC.

Memo Password

The Tracer

Memo Password

simple, tiny but powerful tool useful for storing and easily retrieve your passwords.

The Tracer:

the ultimate trace route app.

You are here:

Home
Tesseract

Sottoprogrammi e programmazione procedurale in un file batch

Uno degli approcci più classici nello sviluppo software è quello che prende il nome di programmazione procedurale. In buon sostanza di tratta della pratica di suddividere il programma principale  in parti più piccole, note con il termine di sottoprogrammi (in inglese subroutine) ma anche procedure o funzioni a seconda dei diversi linguaggi di programmazione. Tutto ciò per facilitare la stesura e la manutenzione del programma stesso. Dopo questa introduzione sui sottoprogrammi dareste per scontato la loro disponibilità nei file batch. Ebbene, sbagliereste, in quanto tale possibilità non è contemplata nei file batch. Tuttavia, una possibilità di emulare tale comportamento è comunque possibile individuarla, innanzitutto nell'utilizzo del comando CALL che consente di richiamare un altro file batch. Supponiamo allora di avere un file batch di esempio che serve solo a produrre un messaggio a video:

 

@ECHO OFF

REM File saluta.bat

ECHO Salve a tutti

 

Chiameremo il file, come visibile nel commento precedente, saluta.bat.

Il nostro file principale non dovrà far altro che richiamare, con il comando CALL, il file che funge da sottoprogramma, così come mostrato di seguito.

 

@ECHO OFF

REM Sottoprogrammi

ECHO Io sono il file principale

CALL saluta.bat

ECHO Sono ancora il file principale

 

Banalmente, il risultato a video sarà il seguente:

 

Io sono il file principale

Salve a tutti

Sono ancora il file principale

 

Intuitivamente, si capisce come il relegare un dato comportamento in un file che funge da sottoprogramma consente di snellire e modularizzare il proprio codice in quanto sarà possibile registrare in un dato file batch un certo blocco di istruzioni da far ripetere anche più volte all'interno del nostro programma principale.

Tuttavia, oltre a quello mostrato, esiste un altro modo per inserire una sorta di sottoprogramma direttamente nel file batch. Tale approccio sfrutta il concetto di etichetta. Una etichetta (label in inglese) è una stringa di testo, da terminarsi con il simbolo dei due punti, che viene posizionata in una riga qualsiasi del file batch e che può così essere considerata un punto di salto per l'esecuzione del comando GOTO. Di seguito subito un esempio:

 

@ECHO OFF

:ritorno

CLS

TIME /T

GOTO ritorno

 

Nel  codice proposto, potete notare un'etichetta di nome ritorno subito dopo della quale viene invocato il comando CLS seguito da TIME che visualizza la data corrente del sistema e che grazie all'opzione /T non ne chiede l'impostazione. L'ultima istruzione è GOTO ritorno che forza l'esecuzione a riprendere proprio dal punto etichettato come ritorno creando quindi un loop (nome tecnico per indicare un ciclo), in questo caso infinito. Per interrompere l'esecuzione sarà necessario usare la combinazione di tasti CTRL+C. Una particolarità relativa alle etichette è che Il comando GOTO accetta l'etichetta speciale di destinazione :EOF, che trasferisce il controllo alla fine del file batch corrente. Ciò consente di uscire da uno script senza definire un'etichetta specifica. Credo sia inutile sottolineare che il precedente è un programma assolutamente stupido e realizzato al solo scopo di presentare un esempio di facile comprensione relativo al comando GOTO. Tuttavia, abbiamo ora uno strumento in più che ci consente di rendere i nostri script maggiormente interattivi. Per dimostrarlo supponiamo di voler realizzare una piccola utility (ovvero un programma di utilità) che consenta all'utente di selezionare un certo comando informativo sullo stato del sistema. Vi scrivo di seguito il codice che commentiamo subito dopo.

 

@ECHO OFF

:menu

CLS

ECHO ****************************************************

ECHO *            VERIFICA RETE

ECHO *

ECHO *  1. VISUALIZZA IMPOSTAZIONI DI RETE

ECHO *  2. TEST CONNESSIONE RETE LOCALE

ECHO *  3. TEST CONNESSIONE INTERNET

ECHO *

ECHO *  Q. Esce e torna al prompt dei comandi

ECHO ****************************************************

 

SET GW=192.168.1.1

SET /P scelta=SCEGLI:

 

IF %scelta%==1 GOTO ipconfig

IF %scelta%==2 GOTO gateway

IF %scelta%==3 GOTO internet

 

IF %scelta%==Q GOTO :EOF

IF %scelta%==q GOTO :EOF

 

:ipconfig

ECHO Rileviamo le configurazioni delle schede di rete

IPCONFIG /ALL

PAUSE

GOTO menu

 

:gateway

ECHO Eseguiamo un ping al default gateway

PING %GW%

PAUSE

GOTO menu

 

:internet

ECHO Test connessione Internet

PING 8.8.8.8

PAUSE

GOTO menu

 

La prima parte dello script è assolutamente banale. Con una serie di comandi ECHO mostriamo a video un menu con tre classiche possibilità per fare il cosiddetto troubleshooting, ovvero individuazione ed eliminazione di un problema, della nostra connessione di rete. Vi faccio tuttavia notare come abbia posto, in testa allo script, un'etichetta, :menu, che servirà come punto di richiamo per far visualizzare il menu alla fine di ogni comando. Successivamente, al fine di rendere più gestibile lo script, dichiariamo, la seguente variabile di ambiente:

 

SET GW=192.168.1.1

 

Tale variabile GW contiene uno dei classici default gateway. Con tale termine si indica l'indirizzo IP che viene utilizzato per uscire dalla nostra rete locale. Di norma esso è l'indirizzo del router ADSL della nostra connessione ad Internet. Nel caso in cui tale IP dovesse risultare diverso da quello impostato per la nostra specifica macchina sarà sufficiente modificarlo di conseguenza. L'istruzione successiva:

 

SET /P scelta=SCEGLI:

 

visualizza il messaggio "SCEGLI:" e memorizza la digitazione dell'utente in una variabile dal quasi scontato nome scelta. Tale variabile verrà testata con una serie di IF per individuare la selezione effettuata dall'utente. Ognuna di tali scelte termina nel codice con i comandi:

 

PAUSE

GOTO menu

 

che consentono appunto, dopo una pausa di visualizzazione, il ritorno ai comandi ECHO che ripropongo a video il menu con le scelte possibili. Per chi è abituato a smanettare con i comandi di rete, IPCONFIG e PING sono pane quotidiano. Nello specifico, IPCONFIG, che aveva già visto in precedenza, con l'opzione /ALL, visualizza in dettaglio tutte le informazioni sulla configurazione della macchina in uso. Il comando PING, invece, serve per capire se la nostra scheda di rete riesce a comunicare, in gergo tecnico pingare l'indirizzo IP che specifichiamo come argomento del comando in questione. Nel caso dell'etichetta :gateway "pinghiamo" il gateway di default. Se questo dovesse essere diverso da 192.168.1.1 lo potremmo scoprire proprio con il comando IPCONFIG e quindi modificheremmo la variabile di ambiente GW di conseguenza. Nel caso, invece, dell'etichetta :internet effettuiamo il ping  con l'IP 8.8.8.8. Tale IP corrisponde ad un server DNS di Google e quindi è sempre attivo su Internet. Ovviamente potremmo utilizzare un IP pubblico qualsiasi che sappiamo essere sempre in linea al fine di verificare la nostra connessione verso l'esterno. Per inciso, un server DNS è una macchina che consente la traduzione, nota come risoluzione, dall'indirizzo IP al nome di dominio del tipo www.exaple.com e viceversa.

 

Carlo A. Mazzone


Share / Condividi
 

The Tracer - nuova versione 2017.7

Abbiamo appena rilasciato la nuova versione del nostro applicativo The Tracer. Il software consente di tracciare il percorso di rete verso una specifica destinazione individuando i vari hops intermedi. Ma non solo. The Tracer contiene vari strumenti di diagnostica di rete come whois e port scanner. Ah, il software è come sempre GRATIS.

Scaricatelo QUI.


Share / Condividi
 

Linux e Windows 10: la shell Bash

Oltre alla soluzione che prevede l'installazione di Cygwin  (https://www.cygwin.com/) come ambiente di emulazione per Linux, per i sistemi Windows 10 esiste un'alternativa che prevede l'installazione della shell bash come applicativo nativo di Windows stesso. La bash su Windows fornisce così agli sviluppatori e sistemisti una shell Linux in  cui eseguire la maggior parte dei comandi Linux senza dover installare uno specifico emulatore esterno. Il prerequisito fondamentale per l'installazione di tale bash è che il nostro Windows sia una versione a 64-bit Anniversary Update build 14393 o superiore. Per verificare la versione del sistema in uso è sufficiente e l'architettura  della CPU della nostra macchina è sufficiente accedere a Impostazioni->Sistema-> Informazioni su.

Inoltre è necessario impostare manualmente il sistema operativo in Modalità sviluppatore (in inglese, Developer Mode). Per farlo è necessario seguire la sequenza Impostazioni -> Aggiornamento e sicurezza -> Per sviluppatori e selezionare l'opzione Modalità sviluppatore. A questo punto non rimane altro che installare la bash accedendo alla funzionalità Attiva o disattiva funzionalità di Windows e selezionando, così come mostrato in figura, la voce sottosistema Windows per Linux.

Per lanciare e utilizzare l'ambiente Linux sarà ora sufficiente aprire una console CMD e digitare il comando bash.

 

Carlo A. Mazzone


Share / Condividi
 

Cron: il signore del tempo

CrontabIn un sistema Linux, capita molto spesso di dover eseguire un certo file, un particolare comando oppure una serie di operazioni in uno specifico momento della giornata. Un caso classico è rappresentato da operazioni di backup dei dati da effettuarsi preferibilemente in orario notturno.

Per realizzare tali scopi i sistemi Linux mettono a disposizione il demone cron che, opportunamente istruito tramite specifici file di configurazione, è in grado di mandare in esecuzione tutto ciò di cui necessitiamo.

Il nome cron deriva probabilmente dal dio greco del tempo Chronos. In realtà l’origne del nome non è certa ed esso potrebbe anche essere l’acronimo derivante dalle espressioni “Commands Run On Notice” oppure “Commands Run Over Night”. In ogni caso il nostro demone legge uno specifico file noto come crontab (ovvero cron table) ed esegue alle temporizzazioni in esso indicate i comandi corrispondenti.

Un prima verifica dello stato del nostro sistema può essere effettuata usando l’apposito comando, chiamato appunto crontab, come mostrato di seguito:

carlo@foo:~$ crontab -l

dove carlo è (ovviamente) il nome dell’utente collegato al sistema e foo il nome della macchina.

L’opzione –l (ovvero il trattino seguito dalla lettera elle) consente di “listare” il contenuto del file di configurazione associato all’utente che lancia il comando in oggetto. Nel nostro caso, e nella situazione in cui il sistema non è ancora stato istruito ad eseguire comandi, dovremmo vedere in output un messaggio del tipo:

no crontab for carlo

Sebbene sia possibile editare direttamente i file di configurazione per i nostri job (attività da eseguire) è conveniente richiamare il file attraverso il comando crontab accodando l’opzione –e, come mostrato di seguito:

carlo@foo:~$ crontab -e

Tale comando aprirà un editor di testi per la modifica di un file predefinito. La prima volta che si richiama il comando in oggetto sarà possibile indicare l’editor di propria preferenza da una lista minimale all’interno della quale si suggerisce l’uso dell’editor nano. Il file di default visualizzato sarà il seguente:

 

# Edit this file to introduce tasks to be run by cron.

#

# Each task to run has to be defined through a single line

# indicating with different fields when the task will be run

# and what command to run for the task

#

# To define the time you can provide concrete values for

# minute (m), hour (h), day of month (dom), month (mon),

# and day of week (dow) or use '*' in these fields (for 'any').#

# Notice that tasks will be started based on the cron's system

# daemon's notion of time and timezones.

#

# Output of the crontab jobs (including errors) is sent through

# email to the user the crontab file belongs to (unless redirected).

#

# For example, you can run a backup of all your user accounts

# at 5 a.m every week with:

# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/

#

# For more information see the manual pages of crontab(5) and cron(8)

#

# m h dom mon dow command

 

Ovviamente le linee che inziano con il simbolo di cancelletto non sono eseguite in quanto tale simbolo introduce un commento. L’ultima riga indica quale deve essere il formato da utilizzarsi per inserire i comandi da far eseguire al nostro demone. Come si può osservare nelle prime due posizioni indichiamo il minuto (tra 0 e 59) e l’ora (tra 0 e 59) in cui si vuole far eseguire il comando. Successivamente indichiamo il giorno del mese (tra 1 e 31) e il mese dell’anno (tra 1 e 12). Infine, prima del nome del comando possiamo indicare il giorno della settimana in cui verrà eseguito il comando, usando un numero da 0 a 6, dove 0 indica la domenica, 1 il lunedì e così a seguire con il 6 che indica il sabato.

Se si vuole eseguire un dato comando in un giorno qualsiasi è possibile usare un asterisco. Ad esempio la seguente riga:

00 01 * * * /sbin/miocomando

Eseguirà il comando indicato all’una di notte di tutti i giorni della settimana.

Una volta inserita la sequenza di comandi all’interno del file sarà sufficiente salvare il file con CTRL+O e una volta usciti dall’editor (CTRL+X) sarà tuttavia necessario riavviare il demone cron per fargli leggere la nuova configurazione. A tal fine usaremo il comando:

sudo /etc/init.d/cron restart

In alcuni casi, soprattutto quando si è in fase di testing della configurazione può essere utile porsi in ascolto sul log di sistema a caccia di eventuali errori che potrebbero verificarsi. A tal fine useremo il comando:

tail -f /var/log/syslog

A volte è sarà necessario schedulare delle attività che richiedono i permessi di root. In questo caso dovremo lanciare l’editing del file crontab con il prefisso sudo (superuser do) come mostrato di seguito:

carlo@foo:~$ sudo crontab -e

Una volta effettuate le modifiche del caso si procederà con il normale salvataggio prima dell’uscita dall’editor. Volendo visualizzare quindi il file di configurazione specifico per il superutente sarà sufficietne richiamare il comando crontab con l’opzione –l facendo però precedere tale comando dal sudo, come mostrato di seguito:

carlo@foo:~$ sudo crontab -l

Come è intuibile, le opzioni di configurazione sono molteplici. Ad esempio è possibile specificare orari multipli indicandoli separati da una virgola. Nello specifico la riga:

0,15,30,45 * * * * /sbin/miocomando

Schedula il comando per l’esecuzione ogni quarto di ora di ogni ora di ogni giorno.

Infine è possibile utilizzare il simbolo del trattino per indicare specifici intervalli di tempo. Ad esempio:

00 08 * * 1-5 /sbin/miocomando

Schedula il nostro comando per essere eseguito alle otto di mattina di tutti i giorni dal lunedì al venerdì.

 

Carlo A. Mazzone


Share / Condividi
 

"Il potere del comando" diventa cartaceo

Il potere del comando"Il potere del comando", l'ultimo libro di Carlo A. Mazzone, diventa anche cartaceo. Dopo una prima distribuzione in formato eBook, infatti, questa guida alle interfacce testuali viene ora stampata su carta e distribuita sui principali store online.

La bella copertina è,  anche per questo secondo lavoro editoriale di Mazzone, del bravissimo Gianluca Rotondo, forse meglio conosciuto con il nick di Picard. Gianluca è anch'egli da sempre legato al progetto Tesseract.

Ulteriori dettagli sul libro in questione sono disponibili all'url:

http://www.tesseract.it/ilpoteredelcomando

e sulla pagina Facebook ufficiale:

https://www.facebook.com/ilpoteredelcomando


Share / Condividi
 

My Internet TV 10 released

My Internet TVWe are really happy to annunce the availability of the new version of our TV tuner.

The version 10.0 of My Internet TV, labeled as build 26-436, was just release and it's ready for downloading. Enjoy plenty of new streaming channels with great internal software engine updates.

Please note that we have removed recording features from this version in order to improve it in next versions.

Tesseract Team


Share / Condividi
 

Batch backup: un piccolo script per grandi backup

Backup

E’ esigenza diffusa realizzare copie di sicurezza di file personali e/o aziendali su una macchina diversa da quella in cui risiedono i file stessi. In questo micro post vi riporto un semplice script da utilizzarsi su macchine windows verso uno sharing di rete che può essere ospitato tanto su di un server Windows tanto su di una macchina Linux con server Samba.

Si tratta di un file batch molto semplice ma efficace ed efficiente.

Per prima cosa si definiscono un paio di variabili di ambiente che facilitano l’eventuale modifica del file. La variabile LOGFILE contiene il percorso ed il nome di un file di LOG in cui memorizzare le attività svolte dallo script. Una seconda variabile di nome REMOTEDISK indica la lettera di unità di volume dello sharing per la destinazione del backup.

Al lancio lo script accoda nel file di log data ed ora dell’inizio delle operazioni e verifica l’esistenza della destinazione. In caso negativo termina saltando all’etichetta :notarget. Le istruzioni ECHO sembrano ripetitive ma hanno uno scopo. La prima è per la visualizzazione a schermo durante l’esecuzione dello script mentre la seconda serve per accodare, tramite l’operatore di redirezione >>, il testo descrittivo nel file di log.

Se tutto procede come ci si attende le istruzioni xcopy, grazie all’opzione /D,copiano sulla destinazione i soli file modificati. Ciò consente una notevole efficienza dello script. L’opzione /E serve per copiare anche le cartelle vuote in modo da riportare sul disco di backup la reale struttura di origine. L’opzione /Y non chiede conferma per la sovrascrittura dei file.

Da notare l’uso dei doppi apici nel comando xcopy. Nell’esempio non sarebbero strettamente necessari ma risulterebbero indispensabili nel caso di percorsi con spazi presenti al loro interno.

Lo script può essere facilmente inserito nelle attività automatiche di Windows per essere lanciato, nel caso di server aziendali, preferibilmente di notte.

Carlo A. Mazzone

 

@ECHO OFF

CLS
ECHO ************************
ECHO *** BACKUP UTILITY ***
ECHO *** VER 1.1.3 ***
ECHO *** Carlo A. Mazzone ***
ECHO ************************

SET LOGFILE=c:\BackupLogs.txt
SET REMOTEDISK=X:

ECHO *********************** >> %LOGFILE%

DATE /T >> %LOGFILE%
TIME /T >> %LOGFILE%

ECHO Inizio operazioni ...
ECHO Inizio operazioni >> %LOGFILE%

REM Test esistenza directory destinazione
IF not EXIST %REMOTEDISK% GOTO notarget

ECHO Copia CARTELLA_1 in corso ...
ECHO COPIA CARTELLA_1 >> %LOGFILE%
xcopy "C:\CARTELLA_1\*.*" %REMOTEDISK%\DATI_BACKUP\ /E /D /Y >> %LOGFILE%

ECHO Copia CARTELLA_2 in corso ...
ECHO COPIA CARTELLA_2 >> %LOGFILE%
xcopy "C:\CARTELLA_2\*.*" %REMOTEDISK%\DATI_BACKUP\ /E /D /Y >> %LOGFILE%

GOTO fine

:notarget
ECHO Errore - target NON disponibile >> %LOGFILE%
GOTO fine

:fine
DATE /T >> %LOGFILE%
TIME /T >> %LOGFILE%

ECHO Fine operazioni >> %LOGFILE%

ECHO *********************** >> %LOGFILE%


Share / Condividi
 

Abilitazione pagine web su Apache per singoli utenti con userdir

UserdirPuò essere interessante in ambito laboratoriale o di sviluppo all'interno di un dato gruppo di lavoro abilitare su di una macchina Linux con web server Apache la possibilità per i singoli account utente di utilizzare una specifica cartella per i propri file html e php.
Per farlo è necessario innanzitutto abilitare il modulo userdir con lo specifico comando:

sudo a2enmod userdir

Analizzando il file di configurazione

/etc/apache2/mods-enabled/userdir.conf

si noterà come la cartella nella quale ci si aspetterà di organizzare i file è public_html.

II singolo utente creerà dunque i suoi file nella cartella /home/nomeutente/public_html/
Ovviamente dovrà innanzitutto creare tale cartella, trovandosi nella propria home, con il comando:

mkdir public_html

Per accedere via web con il proprio browser a tali file si userà l'URL:

http://127.0.0.1/~nomeutente/

sostituendo l'indirizzo localhost 127.0.0.1 con l'IP o il nome della macchina in questione.

Gestione PHP
Per abilitare all'esecuzione di script PHP è necessario editare il file:

/etc/apache2/mods-available/php5.conf

In esso bisogna commentare le righe seguenti:
#
#
# php_admin_value engine Off
#
#

Ovviamente bisognerà riavviare apache:

sudo service apache2 restart

Happy coding.

Carlo A. Mazzone


Share / Condividi
 

WebJailer: nuova versione con setup

WebJailerA pressoché un anno esatto dal rilascio della prima versione stabile del nostro WebJailer rendiamo disponibile un aggiornamento che integra, come novità essenziale, il pacchetto di installazione. Il setup dovrebbe rendere più agevole l'uso dell'applicativo nei contesti in cui potrebbero verificarsi problemi di permessi di scrittura a seconda dell'utente collegato.

La versione in oggetto è etichettata come 1.1.2.14. Per i dettagli di funzionamento vi rimandiamo alla pagina ufficiale dell'applicativo in questione presente sul nostro portale.

Il team Tesseract


Share / Condividi
 

A minimal web portal for the tesseract.biz domain

Tesseract.bizOur domain tesseract.biz is an ulterior supporting site for our net activities. We use it for better balancing bandwidth load for our downloading management. We have just realized some simple web pages to make more attractive our presence on the web. Just a minimal step but always forward. You can visit them HERE.

TTT


Share / Condividi
 
  • «
  •  Start 
  •  Prev 
  •  1 
  •  2 
  •  3 
  •  4 
  •  5 
  •  6 
  •  7 
  •  8 
  •  9 
  •  10 
  •  Next 
  •  End 
  • »


Page 1 of 14

On-line

We have 16 guests online