Piero V.

WebRTC on the server side with Pion and FFI

WebSockets and WebRTC

At the beginning of the year, I played a little bit with WebSockets and Rust. I tried to create a backend for a browser game implemented with Three.js.

However, things did not work very well. A friend and I did some tests, but his connection was underperforming, which is actually an advantage for testing. Its delays were very high, packets kept accumulating and being applied all at once. Moreover, I had implemented everything with unbounded queues. Therefore, the server program running on my PC occupied several GB of RAM at a certain point. Good thing we found all these problems soon.

The first suggestion you find when you start programming multiplayer games is that you should use UDP if you can. So, I finally decided to try WebRTC.

I soon discovered that WebSocket and WebRTC are completely different. The former is a protocol for full-duplex communication, usually between a browser and a webserver. The latter is a series of APIs for real-time communications, and spans from media capture, streams, screen sharing to data channels, which is the capability I was interested in. … [Leggi il resto]

Whoosh come motore di ricerca per un blog

Da un bel po’ di tempo il mio sito sta aspettando un bell’aggiornamento, ma ogni volta mi blocco per un motivo o per l’altro. Questa volta è stato il turno della ricerca.

Questa funzionalità è una delle più complicate da implementare, per una moltitudine di fattori, che vanno dalla necessaria attenzione alle prestazioni al fatto che la ricerca non è un problema con una soluzione precisa. Non a caso i motori di ricerca di oggi si basano completamente su algoritmi di machine learning, che però per un piccolo sito come il mio, che vuole comunque offire questa possibilità, sarebbe un’esagerazione, peraltro impossibile, in quanto non avrei nemmeno i dati per il training.

In ogni caso, non voglio rimuovere questa funzionalità dal sito, né implementarla in maniera troppo inefficace, né rivolgermi a servizi di terzi, quindi mi sono guardato un po’ attorno per decidere sul da farsi e ho provato diverse soluzioni.

Come già annunciato, sto lavorando in Python, con Django, quindi il mio primo passo è stato provare Haystack.

Questo è un framework che fa da ponte tra i modelli dell’ORM di Django e diversi backend per la ricerca, tra cui i celebri Elasticsearch e Solr, entrambi basati su Apache Lucene, e i meno famosi Xapian e Whoosh. Precisamente Haystack mette a disposizione delle API agnostiche dal backend per indicizzare, eseguire ricerche ed altre operazioni sui modelli di Django. Quindi, una volta creato il codice basato su Haystack, si possono facilmente provare i vari backend. … [Leggi il resto]

Slow standards

Negli ultimi anni in molti hanno parlato di diverse politiche slow: slow food, slow life, ma forse nessuno ha mai parlato di slow web standard.

Fondamentalmente penso che ormai gli standard web siano veramente una cosa gigantesca, che se da un certo punto di vista permettono di costruire applicazioni sempre più complete e complesse, da un altro diventano estremamente difficili da seguire e introducono possibili rischi per la sicurezza e per la privacy.

Cominciai a scrivere per il web quando lo stato dell’arte erano HTML 4.01 e CSS 2.1 e ho assistito alla creazione dell’HTML 5 e di tante API che oggi gli sviluppatori danno per scontate e permettono di ottenere risultati un tempo ritenuti impossibili senza usare hack e/o javascript, da flexbox alle varie animazioni. Poi con gli anni un po’ ho perso la passione per lo sviluppo web, un po’ gli studi mi hanno assorbito il tempo, quindi non mi sono tenuto molto aggiornato.

Tuttavia, non è una mia impressione che le modifiche siano estremamente frequenti, infatti con HTML 5 hanno deciso di eliminare il numero e di trasformarlo in HTML Living standard una cosa che secondo me, anche sono anni che va avanti così, è sbagliata. … [Leggi il resto]

Django

Ultimamente sto valutando i problemi di PHP, il linguaggio che ho usato più di tutti assolutamente negli ultimi 7 anni (o più).

PHP è un linguaggio in continua evoluzione: ho cominciato con PHP 4.4, da allora ci sono stati parecchi cambiamenti, per farlo diventare un linguaggio più orientato agli oggetti, tuttavia rimangono certi misteri come molti overhead aggiunti, sembra per niente, certe modalità di interpretazione tutte sue (vedasi operatore ternario).

Un altro buonissimo linguaggio è Python: è sempre libero e molto potente. Inoltre negli ultimi anni il suo uso per il web si è esteso parecchio.

Un nome associato a Python per il web è proprio Django, un framework molto interessante e utilizzato anche da Instagram.

L’ho sperimentato un po’, seguendo anche il tutorial sulla prima applicazione (un sondaggio) e ne sono rimasto davvero impressionato: è molto semplice e veloce da utilizzare. Bastano pochi secondi per poter creare un progetto e cominciare subito a lavorare.

Avevo utilizzato ancora un framework in PHP (CakePHP, se non sbaglio), ma non mi ero trovato benissimo.

La caratteristica da cui sono rimasto più impressionato è la gestione dei dati: non serve conoscere SQL, il framework crea automaticamente le tabelle e le query in base alle classi e ai metodi.

Ciò rende più facile anche l’utilizzo di una shell Python, che il framework prepara con tutte le impostazioni pronte e l’amministrazione.

Inoltre il Python mi ispira una grande versatilità: potrebbe essermi utile un processo diverso dal server web per elaborare dei dati, nonché l’integrazione con altri software, e con Django tutto ciò sembra parecchio semplice, in quanto fortemente modulare.

Non escludo di portare questo sito su Django, anzi, sarebbe parecchio interessante. Tra l’altro il VPS Classic 1 e l’hosting base di OVH hanno lo stesso prezzo, per cui sono ancora più allettato 😉 .

Come fare un menu "espandibile"

C’è un mio amico che si diletta a creare siti web e poi visto che io sono più esperto di lui mi chiede spesso cosa ne penso.

L’altro giorno ha aggiunto al suo sito un menu che con javascript apriva e chiudeva i sottomenu.

Quando mi ha chiesto: “Cosa ne pensi?” gli ho risposto “Una schifezza. Di grafica è anche bello però è anti accessibile…”.

È vero che ormai tutti i browser hanno javascript sempre abilitato, però c’è chi javascript non ce l’ha ed è molto più intransigente dei normali utenti: i motori di ricerca.

Visto che spesso mi fa delle sfide ho deciso di far vedere come creerei io un menu con questo articolo.

Userò un po’ di HTML, la proprità display di CSS e Javascript, precisamente il DOM e l’evento onclick.

La struttura HTML è molto semplice, anche se deve essere per forza fatta così: ogni menu è una lista ul e i sottomenu hanno un elemento span che fa da loro titolo.

È necessario che l’ul principale abbia un id, il resto viene estrapolato col DOM. Perciò si possono fare infiniti sotto menu.

Ecco un HTML di esempio:

<ul id="miomenu">
	<li>
		<span>Guide</span>
		<ul>
			<li>
				<span>Programmazione</span>
				<ul>
					<li>C</li>
					<li>C++</li>
				</ul>
			</li>
			<li>
				<span>Web Developing</span>
				<ul>
					<li>
						<span>HTML</span>
						<ul>
							<li><a href="cominciare.html">Per cominciare</a></li>
							<li><a href="tag.html">I tag</a></li>
						</ul>
					</li>
					<li>
						<span>PHP</span>
						<ul>
							<li><a href="interprete.html">L'interprete</a></li>
							<li><a href="database.html">I database</a></li>
						</ul>
					</li>
				</ul>
			</li>
		</ul>
	</li>
	<li><a href="forum.html">Forum</a></li>
	<li><a href="contattami.html">Contattami</a></li>
</ul>

Questo codice è stato validato con successo dal W3C e se lo mettete ora come ora in un browser non è male, basta personalizzarlo un po’ con i CSS. … [Leggi il resto]