<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Programmazione &#8211; SMsoft &#8211; informatica e dintorni</title>
	<atom:link href="https://blog.smsoft.it/category/programmazione/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.smsoft.it</link>
	<description>consigli settimanali su MacOS, GNU/Linux ed Open Source</description>
	<lastBuildDate>Mon, 22 Jun 2026 10:34:08 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=82357</generator>
	<item>
		<title>Migrare un ambiente Python venv su una nuova macchina</title>
		<link>https://blog.smsoft.it/2026/02/24/migrare-un-ambiente-python-venv-su-una-nuova-macchina/</link>
					<comments>https://blog.smsoft.it/2026/02/24/migrare-un-ambiente-python-venv-su-una-nuova-macchina/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 24 Feb 2026 09:30:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[pip]]></category>
		<category><![CDATA[requirements.txt]]></category>
		<category><![CDATA[venv]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=6966</guid>

					<description><![CDATA[Python Venv è un modulo python che permette di attivare un ambiente python separato rispetto a quello di sistema. In questo modo possiamo installare una serie di librerie o fare delle configurazione ad-hoc che restano relative solo ad un progetto. Utile per fare dei test senza &#8220;sporcare&#8221; l&#8217;ambiente python di sistema oppure per gestire differenti ... <a title="Migrare un ambiente Python venv su una nuova macchina" class="read-more" href="https://blog.smsoft.it/2026/02/24/migrare-un-ambiente-python-venv-su-una-nuova-macchina/" aria-label="Per saperne di più su Migrare un ambiente Python venv su una nuova macchina">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Python Venv è un modulo python che permette di attivare un ambiente python separato rispetto a quello di sistema. In questo modo possiamo installare una serie di librerie o fare delle configurazione ad-hoc che restano relative solo ad un progetto. Utile per fare dei test senza &#8220;sporcare&#8221; l&#8217;ambiente python di sistema oppure per gestire differenti progetti con differenti librerie. Ci sono anche altri sistemi similari, ma venv è sicuramente tra i più diffusi.</p>



<p class="wp-block-paragraph">Partiamo intanto vedendo come si crea un ambiente venv:</p>



<pre class="wp-block-code"><code>python3 -m venv ambiente_venv</code></pre>



<p class="wp-block-paragraph">questo crea nella cartella chiamata <strong>ambiente_venv</strong> il nostro ambiente di sviluppo. All&#8217;interno di questa cartella vengono create una serie di altre cartelle (es bin, lib) con quello che ci occorre. Una volta creato l&#8217;ambiente bisogna attivarlo e questo si fa scrivendo:</p>



<pre class="wp-block-code"><code>cd ambiente_venv
source bin/activate</code></pre>



<p class="wp-block-paragraph">mentre per uscire basterà digitare:</p>



<pre class="wp-block-code"><code>deactivate</code></pre>



<p class="wp-block-paragraph">Nota: Ovviamente possiamo anche eseguire gli script python direttamente scrivendo <strong>bin/python3</strong> in modo da avviare automaticamente l&#8217;ambiene per lo script richiamato.</p>



<p class="wp-block-paragraph">A questo punto ipotizziamo di aver installato una serie di librerie e che sia necessario replicare questo ambiene su una seconda macchina. Sulla prima macchina scriviamo:</p>



<pre class="wp-block-code"><code>pip freeze > requirements.txt</code></pre>



<p class="wp-block-paragraph">se abbiamo prima attivato l&#8217;ambiente, oppure direttamente:</p>



<pre class="wp-block-code"><code>bin/pip freeze > requirements.txt</code></pre>



<p class="wp-block-paragraph">e questo creerà il classico file <strong>requirements.txt</strong> con l&#8217;elenco delle librerie installate. Ora creiamo l&#8217;ambiene venv nella seconda macchina con:</p>



<pre class="wp-block-code"><code>python3 -m venv ambiente_venv</code></pre>



<p class="wp-block-paragraph">poi copiamo il file <strong>requirements.txt</strong>  dalla prima alla seconda macchina, attiviamo l&#8217;ambiente venv:</p>



<pre class="wp-block-code"><code>cd ambiente_venv
source bin/activate</code></pre>



<p class="wp-block-paragraph">ed infine reinstalliamo tutte le librerie necessarie:</p>



<pre class="wp-block-code"><code>pip install -r requirements.txt</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2026/02/24/migrare-un-ambiente-python-venv-su-una-nuova-macchina/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VScode e similari: passare alla definizione di una classe/funzione e tornare al riferimento</title>
		<link>https://blog.smsoft.it/2026/01/13/vscode-e-similari-passare-alla-definizione-di-una-classe-funzione-e-tornare-al-riferimento/</link>
					<comments>https://blog.smsoft.it/2026/01/13/vscode-e-similari-passare-alla-definizione-di-una-classe-funzione-e-tornare-al-riferimento/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 13 Jan 2026 09:30:00 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[funzione]]></category>
		<category><![CDATA[reference]]></category>
		<category><![CDATA[riferimento]]></category>
		<category><![CDATA[trae]]></category>
		<category><![CDATA[VsCode]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=6888</guid>

					<description><![CDATA[Dato che ogni tanto qualche amico me lo chiede, scrivo due righe di promemoria. Premetto che questo è valido su MacOS, con piccole variazioni funziona anche su altri S.O. Quando si utilizza l&#8217;IDE VScode o derivati per lo sviluppo (PHP, python, JS, swift o quello che sia) c&#8217;è una funzionalità molto comoda, ovvero passare alla ... <a title="VScode e similari: passare alla definizione di una classe/funzione e tornare al riferimento" class="read-more" href="https://blog.smsoft.it/2026/01/13/vscode-e-similari-passare-alla-definizione-di-una-classe-funzione-e-tornare-al-riferimento/" aria-label="Per saperne di più su VScode e similari: passare alla definizione di una classe/funzione e tornare al riferimento">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Dato che ogni tanto qualche amico me lo chiede, scrivo due righe di promemoria. Premetto che questo è valido su <strong>MacOS</strong>, con piccole variazioni funziona anche su altri S.O.</p>



<p class="wp-block-paragraph">Quando si utilizza l&#8217;IDE <strong>VScode</strong> o derivati per lo sviluppo (PHP, python, JS, swift o quello che sia) c&#8217;è una funzionalità molto comoda, ovvero passare alla definizione della funzione/metodo senza doverlo ritrovare a mano tra i vari file. Vediamo come fare.</p>



<h2 class="wp-block-heading">Saltare alla definizione</h2>



<p class="wp-block-paragraph">Se con il cursore siamo sul nome della funzione/metodo basterà premere il tasto <code><strong>F12</strong></code> (ovvero <code><strong>Fn</strong></code> + <code><strong>F12</strong></code>) per saltare direttamente alla definizione. </p>



<p class="wp-block-paragraph">Se però abbiamo già il mouse sottomano, ci posizioniamo sul nome della funzione/metodo e premere sul <strong>tasto destro</strong> e poi selezionare &#8220;<strong>Go to definition</strong>&#8221; (la prima voce di menù).</p>



<p class="wp-block-paragraph">Ed ancora, tenendo premuto il tasto <code><strong>Cmd</strong></code> basterà cliccare con il <strong>tasto sinistro</strong> del mouse sul nome della funzione/metodo.</p>



<h2 class="wp-block-heading">Tornare al riferimento</h2>



<p class="wp-block-paragraph">Per tornare al riferimento (il punto da cui siamo partiti prima di saltare alla definizione), basta premere il tasto <code><strong>alt</strong></code> + <code><strong>&lt;</strong></code></p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Nota</h2>



<p class="wp-block-paragraph">Per cercare velocemente da tastiera i vari <strong>shortcuts</strong>, basta premere <code><strong>Command</strong></code> + <code><strong>Shift</strong></code> + <code><strong>P</strong></code> e poi digitare <code><strong>></strong></code> oppure premere <code><strong>F1</strong></code> (ovvero <strong><code>F</code>n</strong> + <code><strong>F1</strong></code>) ed infine iniziare a scrivere (per restringere la ricerca) oppure sfogliare tra i risultati.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2026/01/13/vscode-e-similari-passare-alla-definizione-di-una-classe-funzione-e-tornare-al-riferimento/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>npm: eseguire più servizi in parallelo (VITE e PHP)</title>
		<link>https://blog.smsoft.it/2025/05/06/npm-eseguire-piu-servizi-in-parallelo-vite-e-php/</link>
					<comments>https://blog.smsoft.it/2025/05/06/npm-eseguire-piu-servizi-in-parallelo-vite-e-php/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 06 May 2025 08:30:00 +0000</pubDate>
				<category><![CDATA[Html e PHP]]></category>
		<category><![CDATA[Varie]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[vite]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=6722</guid>

					<description><![CDATA[Questa la situazione, ma quello che descrivo è applicabile per tanti altri casi simili. State sviluppando un&#8217;applicazione con VUE.JS e l&#8217;applicazione ha anche un backend API scritto in PHP. Avviamo l&#8217;applicazione in modalità di debug con: e solitamente questo attiva un servizio web sulla porta 5173 che possiamo aprire nel browser. Ma per le API ... <a title="npm: eseguire più servizi in parallelo (VITE e PHP)" class="read-more" href="https://blog.smsoft.it/2025/05/06/npm-eseguire-piu-servizi-in-parallelo-vite-e-php/" aria-label="Per saperne di più su npm: eseguire più servizi in parallelo (VITE e PHP)">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Questa la situazione, ma quello che descrivo è applicabile per tanti altri casi simili.</p>



<p class="wp-block-paragraph">State sviluppando un&#8217;applicazione con VUE.JS e l&#8217;applicazione ha anche un backend API scritto in PHP. </p>



<p class="wp-block-paragraph">Avviamo l&#8217;applicazione in modalità di debug con:</p>



<pre class="wp-block-code"><code>npm run dev</code></pre>



<p class="wp-block-paragraph">e solitamente questo attiva un servizio web sulla porta 5173 che possiamo aprire nel browser. Ma per le API PHP che ho in locale? Devo avviare un server web? devo scrivere un altro comando?</p>



<p class="wp-block-paragraph">La soluzione più semplice è usare il pacchetto npm <a href="https://www.npmjs.com/package/concurrently" target="_blank" rel="noreferrer noopener">concurrently</a> da installare con:</p>



<pre class="wp-block-preformatted">npm install --save-dev concurrently</pre>



<p class="wp-block-paragraph">poi modificare il file package.json da qualcosa tipo:</p>



<pre class="wp-block-code"><code>"scripts": {
"dev": "vite",
"build": "run-p type-check \"build-only {@}\" --",</code></pre>



<p class="wp-block-paragraph">in:</p>



<pre class="wp-block-code"><code>"scripts": {
"dev": "vite",
"dev:php": "php -S127.0.0.1:8765 -t ./",
"dev:all": "concurrently --kill-others \"npm run dev\" \"npm run dev:php\"",
"build": "run-p type-check \"build-only {@}\" --",</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">ora potremo avviare entrambe i servizi con:</p>



<pre class="wp-block-code"><code>npm run dev:all</code></pre>



<p class="wp-block-paragraph">ma nessun ci vieta di inserire nel <strong>package.json</strong> la riga che vedete in <strong>dev:all</strong> direttamente in <strong>dev</strong> e quindi lasnciare il classico <strong>npm run dev</strong> per avviarli entrambe.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Nota:</strong></p>



<p class="wp-block-paragraph">Ora ci sarà una nuova esigenza da gestire, ovvero come dire all&#8217;applicazione di usare due url differenti come base per il puntamento verso il corretto <strong>endpoint</strong> in modalità sviluppo o produzione.</p>



<p class="wp-block-paragraph">La soluzione è quella di creare due file di environment, uno chiamato <strong>.env.development</strong> in cui inseriamo:</p>



<pre class="wp-block-code"><code>NODE_ENV=dev 
VITE_API_BASE_URL=http://127.0.0.1:8765/api/</code></pre>



<p class="wp-block-paragraph">l&#8217;altro chiamato <strong>.env.production</strong> in cui inseriamo:</p>



<pre class="wp-block-code"><code>NODE_ENV=production 
VITE_API_BASE_URL=/api/</code></pre>



<p class="wp-block-paragraph">ed infine inseriamo nel file <strong>main.ts</strong>, prima di fare il <strong>createApp()</strong> , questo codice:</p>



<pre class="wp-block-code"><code>export const API_BASE_URL = import.meta.env.VITE_API_BASE_URL as string
if (!API_BASE_URL) {
  throw new Error('VITE_API_BASE_URL is not defined')
}</code></pre>



<p class="wp-block-paragraph">cosa che renderà disponibile nell&#8217;app la costante API_BASE_URL da poter utilizzare come prefisso per le nostre chiamate API.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>Chiaramente il tutto potete personalizzarlo secondo le vostre esigenze, questo è solo da prendere come spunto.</em></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2025/05/06/npm-eseguire-piu-servizi-in-parallelo-vite-e-php/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Apache/PHP e l&#8217;header Content-Length sparito</title>
		<link>https://blog.smsoft.it/2025/03/25/apache-php-e-lheader-content-length-sparito/</link>
					<comments>https://blog.smsoft.it/2025/03/25/apache-php-e-lheader-content-length-sparito/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 25 Mar 2025 09:30:00 +0000</pubDate>
				<category><![CDATA[Html e PHP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[Content-Length]]></category>
		<category><![CDATA[header]]></category>
		<category><![CDATA[php]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=6684</guid>

					<description><![CDATA[Facendo alcuni test su degli script PHP è risultato che l&#8217;header Content-Length, seppur impostato, non veniva restituito da Apache. Dopo alcune ricerche è emerso che dalla versione 2.4.59, per gli script CGI-like (come PHP) non possono più restituire l&#8217;header Content-Length per motivi di sicurezza (rif CVE-2024-24795). Per ambienti sicuri è possibile ripristinare il precedente funzionamento ... <a title="Apache/PHP e l&#8217;header Content-Length sparito" class="read-more" href="https://blog.smsoft.it/2025/03/25/apache-php-e-lheader-content-length-sparito/" aria-label="Per saperne di più su Apache/PHP e l&#8217;header Content-Length sparito">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Facendo alcuni test su degli script <strong>PHP</strong> è risultato che l&#8217;header <strong>Content-Length</strong>, seppur impostato, non veniva restituito da <strong>Apache</strong>.</p>



<p class="wp-block-paragraph">Dopo alcune ricerche è emerso che dalla versione 2.4.59, per gli script CGI-like (come PHP) non possono più restituire l&#8217;header <strong>Content-Length</strong> per motivi di sicurezza (rif <a href="https://www.cve.org/CVERecord?id=CVE-2024-24795" target="_blank" rel="noreferrer noopener">CVE-2024-24795</a>).</p>



<p class="wp-block-paragraph">Per ambienti sicuri è possibile ripristinare il precedente funzionamento tramite una nuova direttiva di apache chiamata <a href="https://httpd.apache.org/docs/current/env.html#cgilike" target="_blank" rel="noreferrer noopener">ap_trust_cgilike_cl</a>.</p>



<p class="wp-block-paragraph">Per impostarla, creiamo un file chiamato <strong>/etc/apache2/conf-available/fix-cgi.conf</strong> con all&#8217;interno:</p>



<pre class="wp-block-code"><code>SetEnv ap_trust_cgilike_cl 1</code></pre>



<p class="wp-block-paragraph">e poi abilitiamolo con:</p>



<pre class="wp-block-code"><code>a2enconf fix-cgi
systemctl reload apache2</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2025/03/25/apache-php-e-lheader-content-length-sparito/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Debian Bookworm: installare mysql-connector per python</title>
		<link>https://blog.smsoft.it/2024/11/12/debian-bookworm-installare-mysql-connector-per-python/</link>
					<comments>https://blog.smsoft.it/2024/11/12/debian-bookworm-installare-mysql-connector-per-python/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 12 Nov 2024 09:30:00 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[mysql-connector]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=6518</guid>

					<description><![CDATA[Tentand l&#8217;installazione del driver mysql-connector python su Debian Bookworm tramite pip: si ottiene il seguente errore: e non è possibile installarlo neanche tramite: In questo caso basterà cancellare il file /usr/lib/python3.11/EXTERNALLY-MANAGED: e poi riprovare con: enjoy!]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Tentand l&#8217;installazione del driver mysql-connector python su Debian Bookworm tramite pip:</p>



<pre class="wp-block-code"><code>pip3 install mysql-connector-python</code></pre>



<p class="wp-block-paragraph">si ottiene il seguente errore:</p>



<pre class="wp-block-code"><code>error: externally-managed-environment

× This environment is externally managed
╰─&gt; To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make</code></pre>



<p class="wp-block-paragraph">e non è possibile installarlo neanche tramite:</p>



<pre class="wp-block-code"><code>apt install python3-mysql-connector</code></pre>



<p class="wp-block-paragraph">In questo caso basterà cancellare il file <strong>/usr/lib/python3.11/EXTERNALLY-MANAGED</strong>:</p>



<pre class="wp-block-code"><code>rm /usr/lib/python3.11/EXTERNALLY-MANAGED</code></pre>



<p class="wp-block-paragraph">e poi riprovare con:</p>



<pre class="wp-block-code"><code>pip3 install mysql-connector-python</code></pre>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2024/11/12/debian-bookworm-installare-mysql-connector-per-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Laravel ed errore 419 sul login</title>
		<link>https://blog.smsoft.it/2024/10/08/laravel-ed-errore-419-sul-login/</link>
					<comments>https://blog.smsoft.it/2024/10/08/laravel-ed-errore-419-sul-login/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 08 Oct 2024 08:30:00 +0000</pubDate>
				<category><![CDATA[Html e PHP]]></category>
		<category><![CDATA[419]]></category>
		<category><![CDATA[laravel]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=6491</guid>

					<description><![CDATA[Se riscontrate l&#8217;errore 419 su Laravel, potrebbe dipendere dalla configurazione HttpOnly per i cookie su apache. Ad esempio solitamente utilizzo questa configurazione: che comporta l&#8217;errore 419 al login su un&#8217;applicazione Laravel. Attenzione L&#8217;attributo HttpOnly serve a impedire l&#8217;accesso ai cookie tramite JavaScript, riducendo il rischio di attacchi Cross-Site Scripting (XSS). Sebbene mitigare gli XSS sia ... <a title="Laravel ed errore 419 sul login" class="read-more" href="https://blog.smsoft.it/2024/10/08/laravel-ed-errore-419-sul-login/" aria-label="Per saperne di più su Laravel ed errore 419 sul login">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Se riscontrate l&#8217;errore <strong>419</strong> su <strong>Laravel</strong>, potrebbe dipendere dalla configurazione <strong>HttpOnly</strong> per i cookie su apache. Ad esempio solitamente utilizzo questa configurazione:</p>



<pre class="wp-block-code"><code>Header always edit Set-Cookie "(?i)^((?:(?!;\s?HttpOnly).)+)$" "$1; HttpOnly"</code></pre>



<p class="wp-block-paragraph">che comporta l&#8217;errore <strong>419</strong> al login su un&#8217;applicazione <strong>Laravel</strong>.</p>



<h2 class="wp-block-heading"><strong>Attenzione</strong></h2>



<p class="wp-block-paragraph">L&#8217;attributo <code>HttpOnly</code> serve a impedire l&#8217;accesso ai cookie tramite JavaScript, riducendo il rischio di attacchi Cross-Site Scripting (XSS).</p>



<p class="wp-block-paragraph">Sebbene mitigare gli XSS sia possibile attraverso la sanificazione degli input utente e la rimozione dei tag <code>&lt;script&gt;</code>, anche un piccolo errore può avere conseguenze disastrose. Inoltre, l&#8217;utilizzo di script di terze parti potrebbe compromettere la sicurezza degli utenti. Ogni anno si verificano attacchi XSS di successo che dimostrano l&#8217;importanza di adottare misure adeguate.</p>



<p class="wp-block-paragraph">Ad esempio, se una pagina web utilizza un cookie di sessione e presenta un campo di input vulnerabile a XSS, un attaccante potrebbe facilmente iniettare uno script che invia una richiesta HTTP a un URL simile al seguente:</p>



<p class="wp-block-paragraph">enjoy!</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2024/10/08/laravel-ed-errore-419-sul-login/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ionic: creare una preview web di un&#8217;applicazione mobile</title>
		<link>https://blog.smsoft.it/2024/09/17/ionic-creare-una-preview-web-di-unapplicazione-mobile/</link>
					<comments>https://blog.smsoft.it/2024/09/17/ionic-creare-una-preview-web-di-unapplicazione-mobile/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 17 Sep 2024 08:30:00 +0000</pubDate>
				<category><![CDATA[Ionic]]></category>
		<category><![CDATA[base]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[dist]]></category>
		<category><![CDATA[ionic]]></category>
		<category><![CDATA[vuejs]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=6460</guid>

					<description><![CDATA[Ionic è uno dei vari framework mobile multipiattaforma che permette di sviluppare la propria applicazione con Angular, VueJS o React. Tra le varie funzionalità. permette di avviare un piccolo server in locale dotato di hot-reload e poter sviluppare/testare l&#8217;applicazione direttamente nel browser. Ora non mi voglio dilungare sulle funzionalità o sul funzionamento, ma solo parlare ... <a title="ionic: creare una preview web di un&#8217;applicazione mobile" class="read-more" href="https://blog.smsoft.it/2024/09/17/ionic-creare-una-preview-web-di-unapplicazione-mobile/" aria-label="Per saperne di più su ionic: creare una preview web di un&#8217;applicazione mobile">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><a href="https://ionicframework.com/" target="_blank" rel="noreferrer noopener">Ionic</a> è uno dei vari framework mobile multipiattaforma che permette di sviluppare la propria applicazione con Angular, VueJS o React. Tra le varie funzionalità. permette di avviare un piccolo server in locale dotato di hot-reload e poter sviluppare/testare l&#8217;applicazione direttamente nel browser.</p>



<p class="wp-block-paragraph">Ora non mi voglio dilungare sulle funzionalità o sul funzionamento, ma solo parlare di cosa ho riscontrato tentando di fare una build del codice e caricandolo in uno spazio web per poter far testare da remoto durante lo sviluppo. Il comando che permette di creare il codice della build è:</p>



<pre class="wp-block-code"><code>ionic build prod</code></pre>



<p class="wp-block-paragraph">Viene creata una cartella chiamata <strong>dist</strong> in cui troverete tutto il codice; se si carica il codice nella webroot del server non ci saranno problemi, ma se lo caricate in una sottocartella, verrà semplicemente mostrata una pagina bianca. Questo perché è necessario istruire <strong>vite</strong> (che si occupa di creare la build) che il codice andrà in una sottocartella. Ipotizziamo che la cartella si dovrà chiamare <strong>AppMe</strong>, bisognerà inserire nel file <strong>vite.config.ts</strong> la seguente riga:</p>



<pre class="wp-block-code"><code>base: '/AppMe/',</code></pre>



<p class="wp-block-paragraph">subito sotto <strong>defineConfig</strong>, per avere una cosa del genere:</p>



<pre class="wp-block-code"><code>export default defineConfig({
base: '/AppMe/',</code></pre>



<p class="wp-block-paragraph">Bene, ora sarà possibile fare la build e poi caricare i file nella sottocartella dello spazio web.</p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2024/09/17/ionic-creare-una-preview-web-di-unapplicazione-mobile/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Angular: codice di rewrite per Apache</title>
		<link>https://blog.smsoft.it/2024/07/16/angular-codice-di-rewrite-per-apache/</link>
					<comments>https://blog.smsoft.it/2024/07/16/angular-codice-di-rewrite-per-apache/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 16 Jul 2024 08:30:00 +0000</pubDate>
				<category><![CDATA[Html e PHP]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[angular]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[rewrite]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=6376</guid>

					<description><![CDATA[Le applicazioni scritte in angular hanno l&#8217;entry point nel file index.html che poi gestisce anche il routing per le pagine interne. Dopo un po&#8217; di prove, questo il codice di rewrite che meglio funziona per gestire il redirect su Apache: enjoy!]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Le applicazioni scritte in angular hanno l&#8217;entry point nel file index.html che poi gestisce anche il routing per le pagine interne. Dopo un po&#8217; di prove, questo il codice di rewrite che meglio funziona per gestire il redirect su Apache:</p>



<pre class="wp-block-code"><code>      DirectoryIndex index.html
      ErrorDocument 404 /index.html
      RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.html$ - &#91;L]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /index.html &#91;L,R=301]</code></pre>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2024/07/16/angular-codice-di-rewrite-per-apache/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Creare un servizio systemd per gestire le code laravel</title>
		<link>https://blog.smsoft.it/2024/07/02/creare-un-servizio-systemd-per-gestire-le-code-laravel/</link>
					<comments>https://blog.smsoft.it/2024/07/02/creare-un-servizio-systemd-per-gestire-le-code-laravel/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 02 Jul 2024 08:30:00 +0000</pubDate>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Html e PHP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[laravel]]></category>
		<category><![CDATA[queue]]></category>
		<category><![CDATA[systemd]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=6352</guid>

					<description><![CDATA[Non mi dilungo qui a parlare delle code (queue) su laravel, parliamo invece di come gestire il servizio che processa le code. Dato che sulle ultime distribuzioni è quasi sempre presente systemd, vediamo come usarlo per la nostra esigenza. Creiamo il file /etc/systemd/system/laravel-queue.service in cui scriviamo: dove inserite i parametri corretti al posto di XXXXXXX. ... <a title="Creare un servizio systemd per gestire le code laravel" class="read-more" href="https://blog.smsoft.it/2024/07/02/creare-un-servizio-systemd-per-gestire-le-code-laravel/" aria-label="Per saperne di più su Creare un servizio systemd per gestire le code laravel">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Non mi dilungo qui a parlare delle code (<strong>queue</strong>) su <strong>laravel</strong>, parliamo invece di come gestire il servizio che processa le code. Dato che sulle ultime distribuzioni è quasi sempre presente <strong>systemd</strong>, vediamo come usarlo per la nostra esigenza.</p>



<p class="wp-block-paragraph">Creiamo il file <strong>/etc/systemd/system/laravel-queue.service</strong> in cui scriviamo:</p>



<pre class="wp-block-code"><code>&#91;Unit]
Description=Laravel Queue Worker
After=network-online.target, mysql.service

&#91;Service]
User=XXXXXXX
Group=XXXXXXX
Type = simple
Restart=always
RestartSec=5s
RestartPreventExitStatus = 255
WorkingDirectory=/var/www/XXXXXXX
ExecStart=/usr/bin/php artisan queue:work
#StandardOutput=append:{log_file} 
#StandardError=inherit
#EnvironmentFile=/etc/environment

&#91;Install]
WantedBy=multi-user.target</code></pre>



<p class="wp-block-paragraph">dove inserite i parametri corretti al posto di XXXXXXX. Successivamente:</p>



<pre class="wp-block-code"><code>systemctl daemon-reload
systemctl enable doxcloud-laravel-queue.service
systemctl start doxcloud-laravel-queue.service
systemctl status doxcloud-laravel-queue.service</code></pre>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2024/07/02/creare-un-servizio-systemd-per-gestire-le-code-laravel/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Escludere file da un progetto git</title>
		<link>https://blog.smsoft.it/2024/05/07/escludere-file-da-un-progetto-git/</link>
					<comments>https://blog.smsoft.it/2024/05/07/escludere-file-da-un-progetto-git/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 07 May 2024 08:30:00 +0000</pubDate>
				<category><![CDATA[Html e PHP]]></category>
		<category><![CDATA[.gitignore]]></category>
		<category><![CDATA[git]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=6311</guid>

					<description><![CDATA[Come forse tutti sapete, è possibile scrivere nel file .gitignore (uno per riga) i file o le cartelle da escludere dal repository. Se però provate a farlo con un file/cartella che precedentemente era stata già inclusa, potrete notare che tali risorse non vengono ignorate. In questo caso, bisogna rimuovere i riferimenti nel repository oltre che ... <a title="Escludere file da un progetto git" class="read-more" href="https://blog.smsoft.it/2024/05/07/escludere-file-da-un-progetto-git/" aria-label="Per saperne di più su Escludere file da un progetto git">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Come forse tutti sapete, è possibile scrivere nel file <strong>.gitignore</strong> (uno per riga) i file o le cartelle da escludere dal repository. Se però provate a farlo con un file/cartella che precedentemente era stata già inclusa, potrete notare che tali risorse non vengono ignorate.</p>



<p class="wp-block-paragraph">In questo caso, bisogna rimuovere i riferimenti nel repository oltre che inserire l&#8217;esclusione nel file <strong>.gitignore</strong>. Ipotizziamo di voler escludere il file <strong>pippo.txt</strong>, dovremo scrivere</p>



<pre class="wp-block-code"><code>pippo.txt</code></pre>



<p class="wp-block-paragraph">nel file .gitignore e poi rimuoverlo con:</p>



<pre class="wp-block-code"><code>git rm -r --cached pippo.txt</code></pre>



<p class="wp-block-paragraph">per verificare che sia tutto a posto, possiamo eseguire un:</p>



<pre class="wp-block-code"><code>git status</code></pre>



<p class="wp-block-paragraph">e poi procedere alla sincronizzazione con un:</p>



<pre class="wp-block-code"><code>git add .
git commit -m "rimozione pippo.txt"
git push</code></pre>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2024/05/07/escludere-file-da-un-progetto-git/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
