Next Next Cloud

Recently I've explored options for an "home server", some kind of appliance hosted at home (eventually on a dedicated RaspberryPI) and able to deliver some useful service for daily tasks. Given that the once promising FreedomBox project has become a strongly opinionated selection of random applications, and many other projects have strictly defined use cases (e.g. Kodi and Rune), the most obvious choice is NextCloud. Which indeed is conceived as a cloud application, and lacks some feature for proper home-based usage. So, I've began to implement them by myself…

Keep reading

Social Crawling

Last weekend, having nothing better to do, I'm back on the GNU Social topic and I've implemented and executed a crawler on the network, harvesting some information about users, relationships, and instances. The result is here: a force graph rappresenting the direct connections of the most followed accounts, and a chord of the connections among different instances. The crawler is still running in this moment, and many of the intercepted accounts have to be parsed looking for more connections (and more following accounts, and more connections, and more following accounts.…

Keep reading

Hard Style Sleeping - Lazy Edition

More than one year ago I managed to put a RaspberryPI and a pair of speaker on my bedside table, programmed to loudly play a dubstep music stream at a given hour to wake me up on the most brutal and effective way. It worked, but recently I had to setup different hours on different days and it was boring to daily change the configuration of the application. So I tried to introduce a more complex configuration on my little software, breaking everything. I'm too lazy to fix it, so…

Keep reading

Overcomplicating Images

Sometimes a user's "It doesn't works" becomes a story. This "It doesn't works" was about uploading images on a website. A simple task to achieve, which becomes a little more complex when a live preview is required by the usual "I need images in every page! Big images! Always!" designer. And degenerates in a complete pain in the ass when are involved photos coming from a smartphone. Somewhere, somehow, someone decided that photos (in particular, those shooted by a smartphone) had not to be saved in the final format by…

Keep reading

They Are Many

In a complex Laravel application I'm working on, I had to implement a dynamic system to integrate external and heterogeneous sources of data. So I built on the ServiceProviders feature provided by Laravel and created a ContentsDriver abstract class including the internal events handling flow and to be extended by the different effective files each implementing a source. Now I have to dynamically create those drivers on behalf of a configuration got from the database, and the whole construction breaks down: each ContentsDriver handles a single source, I would have…

Keep reading

Electrified

Recently, I wanted to prototype a simple desktop application to manage color palettes on Linux. So I fired up GNOME Builder, enjoyed his scaffolding feature for a new GTK+ Python application (still incomplete when compared to the previously mentioned tool, but far easier to use), and... as usual, I got lost on GTK+ Python documentation, trying to figure out how to obtain a proper ListItems for the initial menu using an (apparently) convenient GtkBuilder XML file. After half an hour of frustation I decided to catch the opportunity and try…

Keep reading

DNS, The Masquerade

Scenario: a RaspberryPI primarily acting as access point, assigning IPs by DHCP and catching all DNS requests to redirect all HTTP traffic to himself, which may eventually switch to connect as a client to an existing wireless network (and delegating DHCP and DNS to another access point). 90% of this stuff may be easily achieved with nmcli, the powerful and convenient command line interface for Network Manager. nmcli c add type wifi ifname wifi-device con-name myconnection \ autoconnect yes ssid myconnection nmcli connection modify myconnection \ 802-11-wireless.mode ap 802-11-wireless.band bg…

Keep reading

Signed in Blood

As I'm now a business holder under the Italian laws jurisdiction, I had to ask a legally recognized "digital sign": a USB key containing some spare applications, libraries and a set of public and private certificates to produce recognizable digital signs identifing myself. The certificates are in an unknown and very specific codification, so the embedded applications are required to actually use them: a classic RSA key pair GPG-style would have been to easy... Today I've been to the local "Chamber of Commerce" to obtain my personal USB key, as…

Keep reading

Assets Minification Salt and Pepper

Recently I discovered this awesome Laravel module to minify and aggregate assets. My only issue was about generated hashes for aggregated files: as I had to distribute the files on different balanced servers I could not depend on mtime timestamps to salt them (as last git pull time could slightly change on different servers), I could not leave the hashes depending only on original filenames (as they never change, and so did the hash, leaving rotting copies of the assets on the users' browser caches), so I had to leverage…

Keep reading

The Distro You Like

I need to get some practise with d3.js, the Javascript library used to display complex data and relationships, so tonight I've produced a first sample. It is a visualization of the popularity of Linux distros between 2002 and 2016, accordly to the data published by Distrowatch. The larger the circle, the more "hits per day" the distro's page got within the given year. Position of the circles is randomized at each load, so if you don't like it just reload this page. var data = [{ "2002": 0, "2003": 0, "2004"…

Keep reading