This is a followup on [my previous article about how to setup your server][1] to handle a GIT repository and deploy to a web server like apache.
-Since I started experimenting with python and web publishing with it I wanted a way to push all the changes to my codebase directly to a web server, in a similar way as to what I already do with php and apache.<figure class="wp-block-pullquote" style="border-color:#abb8c3">
+Since I started experimenting with python and web publishing with it I wanted a way to push all the changes to my codebase directly to a web server, in a similar way as to what I already do with php and apache.
-<blockquote class="has-text-color has-very-dark-gray-color">
- <p>
- I want to do it myself, the way I like it..
- </p>
-
- <cite>danix</cite>
-</blockquote></figure>
+> I want to do it myself, the way I like it..
+>
+> — danix
-Serving python scripts is slightly different than serving html or php, here’s a scheme that shows what happens when using python (flask in this example) to serve some web content.
-
-
-<div class="wp-block-image">
- <figure class="aligncenter"><img loading="lazy" width="1024" height="393" src="https://danix.xyz/wp-content/uploads/2018/12/flask-scheme-1024x393.png" alt="" class="wp-image-3852" srcset="https://danix.xyz/wp-content/uploads/2018/12/flask-scheme-1024x393.png 1024w, https://danix.xyz/wp-content/uploads/2018/12/flask-scheme-300x115.png 300w, https://danix.xyz/wp-content/uploads/2018/12/flask-scheme-768x294.png 768w, https://danix.xyz/wp-content/uploads/2018/12/flask-scheme.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>a simple scheme of how python scripts are served on the web.</figcaption></figure>
-</div>
+Serving python scripts is slightly different than serving html or php, here's a scheme that shows what happens when using python (flask in this example) to serve some web content.
As you can see the web server is acting as a reverse proxy to the [WSGI][2] server Gunicorn, Apache receives a request from a client, forwards the request to Gunicorn which in turn asks the python web service, in our case our flask web app. Other than as a reverse proxy, apache is used also to serve static content which is not originated in python, like images, css or js scripts.
In order to deploy a python web app I had to install the mod_wsgi extension for apache, then I decided to use a folder in my system to install the virtual environment for python to run my web app and point to that directory in my vhost configuration file inside apache. After that I created a directory where to store all files for my web app and instructed apache to serve them using the virtualenv I created earlier. This is more or less what I did:
-<pre class="wp-block-preformatted"># create the virtual environment for python inside<br /># the folder /usr/local/virtualenvs/my-app:<br />virtualenv /usr/local/virtualenvs/my-app<br /><br /># now create the directory inside the apache root<br /># to store our web app<br />mkdir /var/www/htdocs/my-app<br /></pre>
+```bash
+# create the virtual environment for python inside
+# the folder /usr/local/virtualenvs/my-app:
+virtualenv /usr/local/virtualenvs/my-app
+
+# now create the directory inside the apache root
+# to store our web app
+mkdir /var/www/htdocs/my-app
+```
Now if we put all the py files for our flask web app we can run it inside apache, this is the configuration for the vhost I used:
-<pre class="wp-block-preformatted"><VirtualHost *:80><br /><code> ServerName my-app.mysite.ext</code><br /><code> ErrorLog "/var/log/httpd/my-app.error_log"</code><br /><code> CustomLog "/var/log/httpd/my-app.access_log" common</code><br /><code> WSGIDaemonProcess my-app user=apache group=apache threads=5 python-home=/usr/local/virtualenvs/my-app</code><br /><code> WSGIScriptAlias / /var/www/htdocs/my-app/my-app.wsgi</code><br /><code> WSGIProcessGroup my-app</code><br /><code> Alias "/static/" "/var/www/htdocs/my-app/static/"</code><br /><code> <Directory "/var/www/htdocs/my-app/static/"></code><br /><code> Order allow,deny</code><br /><code> Allow from all</code><br /><code> </Directory></code><br /><code> <Directory "/var/www/htdocs/my-app/"></code><br /><code> Require all granted</code><br /><code> </Directory></code><br /></VirtualHost><br /><br /></pre>
+```apache
+<VirtualHost *:80>
+ ServerName my-app.mysite.ext
+ ErrorLog "/var/log/httpd/my-app.error_log"
+ CustomLog "/var/log/httpd/my-app.access_log" common
+ WSGIDaemonProcess my-app user=apache group=apache threads=5 python-home=/usr/local/virtualenvs/my-app
+ WSGIScriptAlias / /var/www/htdocs/my-app/my-app.wsgi
+ WSGIProcessGroup my-app
+ Alias "/static/" "/var/www/htdocs/my-app/static/"
+ <Directory "/var/www/htdocs/my-app/static/">
+ Order allow,deny
+ Allow from all
+ </Directory>
+ <Directory "/var/www/htdocs/my-app/">
+ Require all granted
+ </Directory>
+</VirtualHost>
+```
With this setting I can now reach my web app and test it after restarting the web server.
tags = [ "poker", "feste", "gioco"]
+++
-<figure style="width: 500px" class="wp-caption aligncenter"><img loading="lazy" style="margin-right: auto;margin-left: auto" src="http://danixland.net/wp-content/uploads/2010/12/wpid-2010-12-19-21.45.121.jpg" alt="image" width="500" height="375" /><figcaption class="wp-caption-text">seratina relax a base di poker.. ovviamente senza soldi veri :-) il modo migliore per passare le serate quando non si ha voglia di uscire..</figcaption></figure>
-
-
\ No newline at end of file
Un'altra cosa piuttosto bruttina da vedere è il corpo del messaggio vuoto con tutto il contenuto relegato negli allegati, se ricevo una mail così non è che mi precipito a leggere l'allegato, piuttosto la cestino direttamente! Gli allegati servono per allegare qualcosa che non si può mettere nel corpo del messaggio, non per contenere il messaggio!
-Un altro problema che affligge spesso chi riceve email è l'invio di foto! Su questo punto potremmo spendere fiumi di parole parlando del fatto che al giorno d'oggi con le adsl super veloci che ci ritroviamo non sia più un problema ricevere allegati pesanti, ma non capisco perchè io debba stare a scaricare una foto da 12 megapixel a 300 <acronym title="dot per inches (punti per pollice)">dpi</acronym> se non dovrò nemmeno stamparla, ma al massimo condividerla sul blog o su facebook; perdete un attimino del vostro <span style="text-decoration: line-through">prezioso</span> tempo anche voi e riducete le dimensioni delle foto che inviate, già ridurre la risoluzione da 300 a 72 [dpi][4] aiuterà notevolmente chi dovrà ricevere la mail oltre che farvi risparmiare molto tempo in invio.. Un altro appunto relativo alle dimensioni delle foto, se state mandando una foto di un tenero cucciolo che dovrà fare da sfondo al piccì del vostro/a amato/a, che senso ha che misuri 4000 pixel sul lato corto?! Una risoluzione decente potrebbe essere 1600 pixel sul lato lungo e il lato corto dimensionato in proporzione, in questo modo le dimensioni scenderanno ulteriormente senza che si perda la qualità del vostro pregevolissimo scatto! ;)
+Un altro problema che affligge spesso chi riceve email è l'invio di foto! Su questo punto potremmo spendere fiumi di parole parlando del fatto che al giorno d'oggi con le adsl super veloci che ci ritroviamo non sia più un problema ricevere allegati pesanti, ma non capisco perchè io debba stare a scaricare una foto da 12 megapixel a 300 {{< acronym title="dot per inches (punti per pollice)" >}}dpi{{< /acronym >}} se non dovrò nemmeno stamparla, ma al massimo condividerla sul blog o su facebook; perdete un attimino del vostro ~~prezioso~~ tempo anche voi e riducete le dimensioni delle foto che inviate, già ridurre la risoluzione da 300 a 72 [dpi][4] aiuterà notevolmente chi dovrà ricevere la mail oltre che farvi risparmiare molto tempo in invio.. Un altro appunto relativo alle dimensioni delle foto, se state mandando una foto di un tenero cucciolo che dovrà fare da sfondo al piccì del vostro/a amato/a, che senso ha che misuri 4000 pixel sul lato corto?! Una risoluzione decente potrebbe essere 1600 pixel sul lato lungo e il lato corto dimensionato in proporzione, in questo modo le dimensioni scenderanno ulteriormente senza che si perda la qualità del vostro pregevolissimo scatto! ;)
{{< image src="/uploads/2010/11/url-300x197.jpg" alt="URL structure illustration" >}}{{< /image >}}
[5]Il punto successivo di questa carrellata potrebbe avere un titolo e un articolo a se, "_come inviare link. Il modo corretto di condividere i famigerati [URL][6]_"; fin dagli albori di internet si è avvertita infatti la necessità di condividere link interessanti con i nostri contatti, e sopratutto negli ultimi tempi i link sono diventati sempre più lunghi e complessi, cose tipo:
Ancora un altro consiglio, **ricontrollate ciò che avete scritto**, no seriamente, consegnereste mai un compito senza averlo nemmeno riguardato? E allora perchè prima di inviare una mail che vi sarà costata probabilmente meno tempo per scriverla, non le date una rilettura veloce?! Sono fantastiche le email con l'oggetto ma senza il testo, o quelle con il testo "_Allegato pronto per la spedizione_: ma senza l'allegato! Suvvia, che ci vuole a soffermarsi un attimo su ciò che si sta facendo?!
-Per ultimo mi lascio probabilmente la madre di tutti i comportamenti sbagliati quando si invia un'email, il disrispetto della privacy! di cosa sto parlando?! Avete presente quelle stupende catene di S. Antonio che vanno tanto di moda nei periodi di festa? Quelle con allegate le presentazioni strappalacrime in PowerPoint che "_se non le inoltri a 140 amici entro i prossimi 7 minuti non hai cuore e ti morirà il gatto strozzandosi mentre sta mangiando il pesce rosso e morendo cadrà in testa al cane al quale si spezzerà una gamba e per la tristezza l'uccellino non mangerà più e si lascerà morire?_" Bene, quelle catene sono l'eden degli spammer, ricevere una di quelle email è come ricevere in regalo tutta la lista dei propri amici su facebook moltiplicata per tutti gli amici di ogni singolo amico, a volte sono più lunghe le liste di indirizzi email che il corpo stesso del messaggio.. Questo accade perchè probabilmente non si conosce bene il mezzo di comunicazione che si sta usando, il campo "A:: dovrebbe contenere il destinatario dell'email, e fin qui non ci piove, ma come comportarsi quando ci sono più destinatari? Ecco che ci viene in aiuto il campo "[Bcc:][8]: altrimenti detto "<acronym title="Copia carbone nascosta">Ccn:</acronym>". Questo campo viene utilizzato per inserire i destinatari secondari dell'email e far si che il loro indirizzo non sia visibile ai destinatari principali specificati nel campo "To:; quando ci sono tantissimi destinatari e non tutti si conoscono tra loro, è buona norma evitare che gli indirizzi email siano visibili onde evitare che qualcuno possa accusarvi di violazione della privacy! Io personalmente sono spesso tentato di denunciare i mittenti di email del genere :/
+Per ultimo mi lascio probabilmente la madre di tutti i comportamenti sbagliati quando si invia un'email, il disrispetto della privacy! di cosa sto parlando?! Avete presente quelle stupende catene di S. Antonio che vanno tanto di moda nei periodi di festa? Quelle con allegate le presentazioni strappalacrime in PowerPoint che "_se non le inoltri a 140 amici entro i prossimi 7 minuti non hai cuore e ti morirà il gatto strozzandosi mentre sta mangiando il pesce rosso e morendo cadrà in testa al cane al quale si spezzerà una gamba e per la tristezza l'uccellino non mangerà più e si lascerà morire?_" Bene, quelle catene sono l'eden degli spammer, ricevere una di quelle email è come ricevere in regalo tutta la lista dei propri amici su facebook moltiplicata per tutti gli amici di ogni singolo amico, a volte sono più lunghe le liste di indirizzi email che il corpo stesso del messaggio.. Questo accade perchè probabilmente non si conosce bene il mezzo di comunicazione che si sta usando, il campo "A:: dovrebbe contenere il destinatario dell'email, e fin qui non ci piove, ma come comportarsi quando ci sono più destinatari? Ecco che ci viene in aiuto il campo "[Bcc:][8]: altrimenti detto "{{< acronym title="Copia carbone nascosta" >}}Ccn:{{< /acronym >}}". Questo campo viene utilizzato per inserire i destinatari secondari dell'email e far si che il loro indirizzo non sia visibile ai destinatari principali specificati nel campo "To:; quando ci sono tantissimi destinatari e non tutti si conoscono tra loro, è buona norma evitare che gli indirizzi email siano visibili onde evitare che qualcuno possa accusarvi di violazione della privacy! Io personalmente sono spesso tentato di denunciare i mittenti di email del genere :/
Mi sembra di aver esaurito gli argomenti riguardo le email, mi auguro di ricevere tante comunicazioni da voi, e spero proprio che farete tesoro di ciò che vi ho consigliato, altrimenti potete anche risparmiarvi il tempo di scrivermi, tanto probabilmente non leggerò mai ciò che mi mandate ;)
categories = ["Blogging"]
tags = ["web", "android", "droidify", "market"]
+++
-<figure style="width: 500px" class="wp-caption aligncenter"><img loading="lazy" style="margin-right: auto; margin-left: auto;" src="http://danixland.net/wp-content/uploads/2011/02/wpid-android21.png" alt="image" width="500" height="500" /><figcaption class="wp-caption-text">che ve ne pare? il mio autoritratto in stile android!!</figcaption></figure>
-
-l’ho creato usando [droidify yourself][1], un’app di google per il market di android.. ;-)
+l'ho creato usando [droidify yourself][1], un'app di google per il market di android.. ;-)
[1]: https://market.android.com/details?id=com.google.android.apps.androidify
\ No newline at end of file
A questo punto, ogni qualvolta io voglia attivare il doppio desktop, mi basterà lanciare questo script che mi sono creato, l’ho chiamato **dualhead.sh**:
-<pre>#! /bin/bash
+```bash
+#! /bin/bash
case $1 in
start ) xrandr --output LVDS --mode 1280x800 \
exit 1
;;
esac
-exit</pre>
+exit
+```
lanciandolo con flag “start” avvierà il dualhead mentre lanciando lo script con “stop” tutto il desktop ritornerà sul solo schermo del laptop in quanto xrandr spegnerà l’uscita vga esterna.