This commit is contained in:
Fundor333
2024-02-11 01:47:32 +01:00
commit 4715eb1ec6
797 changed files with 27759 additions and 0 deletions

48
.editorconfig Normal file
View File

@@ -0,0 +1,48 @@
root = true
[*]
end_of_line = lf
tab_width = 8
indent_size = 2
indent_style = tab
insert_final_newline = true
charset = utf-8
[*.md]
tab_width = 4
indent_style = space
insert_final_newline = true
[*.html]
indent_style = space
indent_size = 2
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.py]
indent_style = space
indent_size = 4
[Makefile]
indent_style = tab
[*.toml]
indent_style = space
indent_size = 4
[*.yaml]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.yml]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

View File

@@ -0,0 +1 @@
{}

12
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,12 @@
version: 2
updates:
# Maintain dependencies for npm
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
# Check for updates to GitHub Actions every week
interval: "weekly"

118
.github/workflows/hugo_publisher.yml vendored Normal file
View File

@@ -0,0 +1,118 @@
name: Build and deploy
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
on:
# Run when the main branch is pushed or a pull request is made
push:
branches:
- master
pull_request:
branches:
- master
schedule:
- cron: "0 * * * *"
# Run when webmentions are fetched
workflow_run:
workflows:
- Fetch webmentions
branches:
- master
types:
- completed
# Jobs
jobs:
build:
name: Install dependencies
runs-on: ubuntu-latest
env:
HUGO_VERSION: 0.104.3
steps:
- name: Install Hugo CLI
run: |
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
- name: Checkout
uses: actions/checkout@v4.1.1
with:
submodules: recursive
- name: Cache node modules
uses: actions/cache@v4.0.0
env:
cache-name: cache-node-modules-v1
with:
path: |
~/.npm
node_modules
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: Setup GitHub Pages
id: pages
uses: actions/configure-pages@v4.0.0
- name: Set up Node.js
uses: actions/setup-node@v4.0.1
with:
node-version: 16
- name: Install Node.js dependencies
run: npm install
- name: Configure timezone as Europe/Rome
uses: zcong1993/setup-timezone@v2.0.0
with:
timezone: Europe/Rome
- name: Cache built website
uses: actions/cache@v4.0.0
env:
cache-name: cache-website-v1
with:
path: |
.publish
resources/_gen
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('config', 'content', 'data', 'themes') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}
- name: Build with Hugo
env:
# For maximum backward compatibility with Hugo modules
HUGO_ENVIRONMENT: production
HUGO_ENV: production
run: make deploy
- name: Upload artifact
uses: actions/upload-pages-artifact@v3.0.0
with:
path: ./public
deploy:
name: Deploy Hugo into GitHub Pages
if: github.ref == 'refs/heads/master'
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4.0.3

34
.github/workflows/updater.yml vendored Normal file
View File

@@ -0,0 +1,34 @@
name: GitHub Actions Version Updater
# Controls when the action will run.
on:
# can be used to run workflow manually
workflow_dispatch:
schedule:
# Automatically run on every Sunday
- cron: "0 0 * * 0"
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
with:
# [Required] Access token with `workflow` scope.
token: ${{ secrets.TOKEN }}
- name: Run GitHub Actions Version Updater
uses: saadmk11/github-actions-version-updater@v0.8.1
with:
# [Required] Access token with `workflow` scope.
token: ${{ secrets.WORKFLOW_SECRET }}
committer_username: "F333Bot"
committer_email: "git@fundor333.com"
commit_message: "Update Action"
pull_request_title: "Update Actions"
ignore: "actions/checkout@v2, actions/cache@v2"
skip_pull_request: "false"
update_version_with: "release-tag"
release_types: "minor, patch"
pull_request_user_reviewers: "fundor333"

186
.gitignore vendored Normal file
View File

@@ -0,0 +1,186 @@
*.pyc
.sw*
.*.sw*
.ropeproject/
__pycache__/
# Pelican detritus
/pelican.pid
/srv.pid
/output/
/output-publish/
.idea/
venv/
/.crunch
### Python template
# Byte-compiled / optimized / DLL files
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
.hypothesis/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# dotenv
.env
# virtualenv
.venv
ENV/
# Spyder project settings
.spyderproject
# Rope project settings
.ropeproject
public
f333-hugo/
.metadata
bin/
tmp/
*.tmp
*.bak
*.swp
*~.nib
local.properties
.settings/
.loadpath
.recommenders
# External tool builders
.externalToolBuilders/
# Locally stored "Eclipse launch configurations"
*.launch
# PyDev specific (Python IDE for Eclipse)
*.pydevproject
# CDT-specific (C/C++ Development Tooling)
.cproject
# Java annotation processor (APT)
.factorypath
# PDT-specific (PHP Development Tools)
.buildpath
# sbteclipse plugin
.target
# Tern plugin
.tern-project
# TeXlipse plugin
.texlipse
# STS (Spring Tool Suite)
.springBeans
# Code Recommenders
.recommenders/
# Scala IDE specific (Scala & Java development for Eclipse)
.cache-main
.scala_dependencies
.worksheet
\.project
.vscode
prepros-6\.config
*.backup
.sass-cache
report.yaml
report.yml
themes/f333/assets/css/style.css
themes/f333/assets/css/style.css.map
node_modules
.hugo_build.lock
!scripts
!scripts/lib
data/webmentions/processed/
OME/
*/*/.DS_Store
*/.DS_Store
.DS_Store
build

4
.imgbotconfig Normal file
View File

@@ -0,0 +1,4 @@
{
"schedule": "daily", // daily|weekly|monthly
"aggressiveCompression": "true" // true|false
}

5
README.md Normal file
View File

@@ -0,0 +1,5 @@
# Fundor333.com
[![Build and deploy](https://github.com/fundor333/fundor333.github.io/actions/workflows/hugo_publisher.yml/badge.svg)](https://github.com/fundor333/fundor333.github.io/actions/workflows/hugo_publisher.yml)
This is the code to build my site made with Hugo.

8
avif.py Normal file
View File

@@ -0,0 +1,8 @@
import os
import glob
jpg = glob.glob(os.getcwd() + "/**/*.jpg", recursive=True)
for e in jpg:
command = 'avifenc "' + e + '" -o "' + e[: len(e) - 4] + '.avif"'
print(command)
os.system(command)

View File

@@ -0,0 +1,34 @@
---
label: Post Template
hide_body: false
fields:
- type: text
name: title
label: title
- type: datetime
name: date
label: date
- type: text
name: feature_link
label: feature_link
- type: text
name: feature_text
label: feature_text
- type: list
name: tags
label: tags
- type: text
name: slug
label: slug
- type: list
name: categories
label: categories
- type: text
name: description
label: description
- type: text
name: type
label: type
- type: text
name: meta
label: meta

View File

@@ -0,0 +1,26 @@
---
new_page_extension: md
auto_deploy: false
admin_path: ''
webhook_url:
sections:
- type: directory
path: content/post
label: Posts
create: all
match: "**/*"
upload_dir: config/_default/static/uploads
public_path: "/uploads"
front_matter_path: ''
use_front_matter_path: false
file_template: ":filename:"
build:
preview_env:
- HUGO_ENV=staging
- HUGO_VERSION=0.81.0
preview_output_directory: public
preview_docker_image: forestryio/hugo:latest
mount_path: "/srv"
working_dir: "/srv"
instant_preview_command: hugo server -D -E -F --renderToDisk -d public
version: 0.81.0

View File

@@ -0,0 +1,57 @@
DefaultContentLanguage: en
baseURL: "https://fundor333.com"
languageCode: en
theme: fugu
title: Fundor 333
author:
name: Fundor 333
email: "blog@fundor333.com"
twitterpage: "https://twitter.com/fundor333"
avatar: "https://fundor333.com/img/pilogo.jpg"
url: "https://fundor333.com/cv/"
disableRSS: false
enableRobotsTXT: true
Paginate: 8
rssLimit: 10
related:
includeNewer: true
threshold: 70
toLower: false
indices:
- name: categories
weight: 40
- name: title
weight: 30
- name: description
weight: 30
- name: tags
weight: 10
- name: meta
weight: 10
- name: date
weight: 10
outputFormats:
SearchIndex:
baseName: search
mediaType: application/json
outputs:
section:
- HTML
- RSS
home:
- HTML
- RSS
- SearchIndex
page:
- html
disqusShortname: fundor333
gtm_id: GTM-NZQKPXS
googleAnalytics: G-H22W7LRVGC
sitemap:
changefreq: monthly
filename: sitemap.xml
priority: 0.5
taxonomies:
category: categories
tag: tags
micropub: micropub

View File

@@ -0,0 +1,9 @@
highlight:
hl_Lines: ""
lineNoStart: 1
lineNos: false
tabWidth: 4
tableOfContents:
endLevel: 5
ordered: false
startLevel: 2

16
config/_default/menu.yaml Normal file
View File

@@ -0,0 +1,16 @@
main:
- name: home
url: /
weight: -10
- name: "blog"
weight: 10
url: "/post/"
- name: cv
url: /cv/
weight: 20
- name: "now"
weight: 60
url: "/now"
- name: "feeds"
weight: 70
url: "/feeds"

View File

@@ -0,0 +1,8 @@
subtitle: import antigravity
title: Fundor 333
description: Fundor 333's personal space on the web
favicon: /img/favicon.ico
image: /img/pilogo.jpg
logo: /img/pilogo.jpg
hostName: "https://fundor333.com"
copyright: Fundor333

View File

@@ -0,0 +1,12 @@
disqus:
disable: true
googleAnalytics:
disable: false
instagram:
disable: true
twitter:
disableInlineCSS: true
vimeo:
disable: true
youtube:
disable: true

6
config/_default/seo.toml Normal file
View File

@@ -0,0 +1,6 @@
[params]
author = "fundor333"
github = "https://github.com/fundor333"
og_image = "https://fundor333.com/img/Opengraph.png"
sitename = "Fundor333"
twitter = "@fundor333"

16
content/_index.md Normal file
View File

@@ -0,0 +1,16 @@
---
title: "Fundor333"
type: home
specialpost: true
---
> This blog was born by my personal desider of show what I do and what i am looking for. All this is done by my own free time.
>
> If you want to see what I am doing [now]( {{< relref "now.md" >}}) check my [now]( {{< relref "now.md" >}}) page.
>
> [Here](/event/) you can find all the events I go and went to and the events details.
>
> If you want to contact me for work [here](/cv/) there is a web version of my CV and my contacts for jobs.
>
> If you need my GPG key [here](https://keybase.io/fundor333/key.asc) my key and the mail is blog@fundor333.com
>
> fundor 333

5
content/books/index.md Normal file
View File

@@ -0,0 +1,5 @@
---
title: "books"
type: books
specialpost: true
---

BIN
content/cv/cv.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

16
content/cv/index.md Normal file
View File

@@ -0,0 +1,16 @@
---
title: "cv"
type: cv
cover: "cv.jpg"
specialpost: true
---
Pythonista, Backend Developer, Dev Ops, Ex-Scout, Bookworm and Tea Lover.
Sometime you can find me in a GDG, a DataBeers, a Pycon or other similar event.
Huge Open Source fan and user I am allways searching something new to do or to study.
Huge fan of automation, autodeploy and bots.
A lot of my personal stuff are on my blog and more in my [GitHub](https://github.com/fundor333).

View File

@@ -0,0 +1,52 @@
---
title: "DataBeers Tuscany 3"
tags:
- PyData Italia
- Pycon Italy
- DataBeer Tuscany
slug: databeers-tuscany-3
micropub: h-event
location: true
location_name: FH55 Grand Hotel Mediterraneo
region: Toscana
latitude: 43.7661469
locality: Firenze
longitude: 11.2721791
country_name: IT
street_address: "44 Lungarno del Tempio"
start: 2017-04-06T21:00:00+02:00
end: 2017-04-06T23:00:00+02:00
layout: event
date: '2017-04-06T21:00:00+02:00'
---
Lo spirito dei DataBeers è quello di dare la possibilità a appassionati, smanettoni e professionisti dei dati di raccontare quello che hanno scoperto su un data base a loro disposizione, come hanno impiegato una certa API, come hanno impiegato in modo "smart" i dati per risolvere un problema, cosa hanno scoperto analizzando twitter .... e molto altro!
DATABEERS TUSCANY
Per la terza edizione di Databeers Tuscany, in collaborazione con PyData Italy e organizzeremo un evento all'interno della PyCon8, la conferenza italiana che ogni anno accoglie centinaia di Python Lover a Firenze.
Per questa edizione la birra sarà offerta da Estrella :-)
Estrella
Anche questa volta potrai assistere alla presentazione di 5 Data Case della durata di 12 minuti ciascuno (7 minuti di presentazione + 5 minuti di domande). E se non ami la matematica o la statistica non preoccuparti... nelle presentazioni è vietato agli speaker l'utilizzo di formule ;-) .
Il programma del III° Data Beers Tuscany è il seguente:
ore 19.00: check-in iscritti
ore 19.30: Benvenuto dagli orgaizzatori e presentazione dei talk
Smartcity vs Big Data vs IoT, Paolo Nesi
Artistic Side of Spatial Data, Michele Ferretti
Analisi Evolutiva del Calciomercato. Stefano Mastini
Fast Retail Big Data Analysis, Valerio Maggio e Ernesto Arbitrio.
TBA
ore 20.45: Networking and Chatting
Se oltre partecipare come spettatore vuoi presentare un Data Case scrivi a databeers.tuscany [ \at] gmail.com.
Ci vediamo al prossimo DataBeers!
Nel frattempo seguici su twitter, unisci al nostro gruppo facebook e partecipa alle nostre conversazioni

View File

@@ -0,0 +1,39 @@
---
title: "DataBeers VCE 1"
tags:
- DataBeers Venezia
slug: databeers-vce-1
micropub: h-event
location: true
location_name: Via Piave, 67
region: Veneto
latitude: 45.48721750000001
locality: Venezia
longitude: 12.2342867
country_name: IT
street_address: "67 Via Piave"
start: 2017-02-17T21:00:00+02:00
end: 2017-02-17T23:00:00+02:00
layout: event
date: '2017-02-17T21:00:00+02:00'
---
Hey Data Lovers! The wait is over! The first Databeers Venezia is coming! Save the date! Friday, February 17th, 2017 at Negozio Piave 67 (just few minutes walking from Venezia-Mestre railway station). For the first event we have great speakers for you!
Alessandro Scarpellini
Aesse branding & visual communication | Rimini
Valentino Pediroda
CEO and Founder of ModeFinance, the first fintech Credit Rating Agency in Europe | Trieste
Duccio Schiavon
CEO at Quantitas, Data Visualization | Venezia
We cant wait to see all of you there, but please REGISTER and CONFIRM your attendance, so well be sure to provide enough beers for you! Many thanks for the support to “Negozio Piave 67” and LARUS.
Beers are VERY KINDLY sponsored by Estrella!
Stay tuned, were going to share more updates here and on our official Twitter account!
Alice, Elisa, Fabio, Marco, Rocco
https://databeersvce.tumblr.com/post/155615836590/databeers-venezia-1-170217-negozio-piave-67

View File

@@ -0,0 +1,52 @@
---
title: "DataBeers VCE 2"
tags:
- DataBeers Venezia
slug: databeers-vce-2
micropub: h-event
location: true
location_name: Via Piave, 67
region: Veneto
latitude: 45.48721750000001
locality: Venezia
longitude: 12.2342867
country_name: IT
street_address: "67 Via Piave"
start: 2017-05-19T21:00:00+02:00
end: 2017-05-19T23:00:00+02:00
layout: event
date: '2017-05-19T21:00:00+02:00'
---
Hey Data Lovers! Following the huge success of the first edtion… were back! Databeers Venice #2 is live! Were waiting for you next Friday, May 19th @ Negozio Piave 67, via Piave 67, Venezia, starting at 18:00 sharp!
Five stunning speakers will drive the scene for you:
---
Marco De Nadai
Dottorando di Ricerca, Università di Trento
Cosa accomuna Bogotà e Los Angeles? Il crimine raccontato e predetto dalle caratteristiche urbane.
Luca Salmasi
Università di Perugia
Stima degli effetti di trattamento da cartelle cliniche elettroniche: metodi e potenziali impatti.
Emanuele Chiericato
Imprenditore Digitale
Come strutturare una strategia di lead generation per la propria azienda.
Bruno Anastasia e Maurizio Gambuzza
Veneto Lavoro
Navigare i numeri sulloccupazione
---
As usual, please REGISTER as soon as possible so we can provide enough beers (and bagigi) for you all!
Beers are again VERY KINDLY PROVIDED BY ESTRELLA!
Thanks to LARUS for the technical and logistic support.
See you there!
Cheers
Alice, Fabio, Marco, Nicola, Rocco
https://databeersvce.tumblr.com/post/160223833870/databeers-venezia-2-190517-negozio-piave-67

View File

@@ -0,0 +1,41 @@
---
title: "DataBeers VCE 3"
tags:
- DataBeers Venezia
slug: databeers-vce-3
micropub: h-event
location: true
location_name: Via Piave, 67
region: Veneto
latitude: 45.48721750000001
locality: Venezia
longitude: 12.2342867
country_name: IT
street_address: "67 Via Piave"
start: 2017-11-23T21:00:00+02:00
end: 2017-11-23T23:00:00+02:00
layout: event
date: '2017-11-23T21:00:00+02:00'
---
Hey Data and Beers lovers! Were back! We are launching the third Databeers Venezia! We are waiting for you next Thursday November 23 @ Negozio Piave 67, Venezia, starting at 19:30 sharp!
It will be a great night on the stage with:
Leonidas Paterakis (@FablabVenezia)
from FabLab, Venice
Lorenzo Speranzoni (@inserpio)
from LARUS, Venezia
Fabiana Zollo (@zollofab)
from Università Cà Foscari, Venezia
Please REGISTER as soon as possible so we can provide enough beers (and bagigi) for you all!
Beers are again VERY KINDLY PROVIDED BY ESTRELLA!
Thanks to LARUS for the technical support and logistics.See you there!
CheersAlice, Fabio, Marco, Nicola, Rocco
https://databeersvce.tumblr.com/post/166982206315/databeers-venezia-3-23112017-negozio-piave

View File

@@ -0,0 +1,48 @@
---
title: "DataBeers VCE 4"
tags:
- DataBeers Venezia
slug: databeers-vce-4
micropub: h-event
location: true
location_name: Via Piave, 67
region: Veneto
latitude: 45.48721750000001
locality: Venezia
longitude: 12.2342867
country_name: IT
street_address: "67 Via Piave"
start: 2018-02-23T21:00:00+02:00
end: 2018-02-23T23:00:00+02:00
layout: event
date: '2018-02-23T21:00:00+02:00'
---
Hey Hey, My My! Databeers will never die! We are launching the new chapter of Databeers Venezia! Great speakers for you next Friday February 23 @ Negozio Piave 67, Venezia, starting at 18:30 sharp!
It will be a great night on the stage with:
---
* Massimo Lamanna from Cern, Geneva in: CERN: Big Experiments and Big Data
* Francesco Bergamo from IUAV, Venice in: Representing Data: Ecologies and Politics of Interfaces
* Rina Camporese from ISTAT, Venice in: Data Climbing
---
Please [REGISTER](https://t.umblr.com/redirect?z=https%3A%2F%2Fwww.eventbrite.com%2Fe%2Fdatabeers-venezia-4-tickets-42844619410&t=YjQ3ZGNjMmE4Mjc1ZGNkNmI0MmNmZWQ0Yjc5NmM4NzA4MmI0OTJkMyw0Vkk0UDVxUQ%3D%3D&b=t%3Acu-b4VKdoSl_DmeTMJPFNw&p=https%3A%2F%2Fdatabeersvce.tumblr.com%2Fpost%2F170622476910%2Fdatabeers-venezia-4-230218-negozio-piave&m=1) as soon as possible so we can provide enough beers (and bagigi) for you all!
Beers are again VERY KINDLY PROVIDED BY ESTRELLA!
Thanks to LARUS for the technical support and logistics.
See you there!
Cheers
Alice, Fabio, Francesco, Marco, Nicola, Rocco
<div class="center">
<a data-flickr-embed="true" href="https://www.flickr.com/photos/fundor333/albums/72157693993361505" title="DataBeers Ve 4"><img src="https://farm5.staticflickr.com/4755/39841630884_93ba69b7d9_z.jpg" width="640" height="427" alt="DataBeers Ve 4"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>
</div>

View File

@@ -0,0 +1,54 @@
---
title: "DataBeers Venezia #6"
tags:
- DataBeers
slug: databeers-venezia-6
micropub: h-event
location: true
location_name: Via Piave, 67
region: Veneto
latitude: 45.48721750000001
locality: Venezia
longitude: 12.2342867
country_name: IT
street_address: "67 Via Piave"
start: 2018-11-06T21:00:00+02:00
end: 2018-11-06T23:00:00+02:00
layout: event
date: '2018-11-06T21:00:00+02:00'
---
DataBeers Venezia #6 - 30.11.18 @ Negozio Piave 67, Venezia
We are back again, data lovers from the Lagoon!
Great speakers for you next Friday November 30 @ Negozio Piave 67, Mestre, Venezia, starting at 18:30 sharp!
Tonight we have the pleasure to be with:
Lorenzo Brutti @lbrutti
Data lover indipendente - Mogliano Veneto
Datawalking: passeggiare nel datascape
Silvia Pavan
Lead Analyst at FIS - Vicenza
La natura dà i numeri?
Francesco Costa @francescocosta
Vicedirettore @ilpost - Milano
Gli Stati Uniti, i dati e le farfalle
---
Please REGISTER as soon as possible so we can provide enough beers (and bagigi) for you all!
Beers are again VERY KINDLY PROVIDED BY ESTRELLA!
Thanks to LARUS for the technical support and logistics.
See you there!
Cheers
Alice, Fabio, Francesco, Lorenzo, Marco, Nicola, Rocco
https://www.eventbrite.com/e/databeers-venezia-6-tickets-51764979447#

View File

@@ -0,0 +1,39 @@
---
title: "DEL - COSA FANNO GLI HACKER"
tags:
- DIGITAL:ENTERPRISE:LAB
slug: del---cosa-fanno-gli-hacker
micropub: h-event
location: true
location_name: Aula Saraceno - UNIVE Dip. Management, Fondamenta San Giobbe, Venezia, VE, Italia
start: 2016-11-25T14:00:00+02:00
end: 2016-11-25T18:00:00+02:00
layout: event
date: '2016-11-25T14:00:00+02:00'
---
Descrizione
Data: 25 ottobre 2016 Aula Saraceno ore 14:00
Tema: Cosa fanno gli hacker?
Speaker: Domenico Raguseo, IBM Manager of Europe Technical Sales
Abstract
Il hacker è una esperto di informatica capace di introdursi in sistemi e reti protette. Inizialmente aveva assunto il ruolo délite, paragonato quasi ad un artista per le sua abilità con i codici informatici. Negli anni 80 è stato definito come un eroe della rivoluzione informatica. In seguito ad una fase di sperimentazione, i giovani programmatori hanno sviluppato delle capacità dannose creando virus e irrompendoo i sistemi informatici militari. Da qui il termine hacker prende una nuova sfaccetatura, quella del rapinatore informatico, dando significato al termine cyber-criminale. Due categorie di hacker riassumono il mondo IT: White Hat Hacker e Black Hat Cracker. IBM racconta la propria esperienza nellidentificare e neutralizzare le vulnerabilità informatiche. Qualè il ruolo degli hacker etici nellera digitale?
Biografia
Domenico Raguseo ha conseguito la Laurea in Scienze dellInformazione presso lUniversità degli Studi di Bari nel 1988. Dal 1990 in IBM dove ha ricoperto diversi ruoli, da sviluppatore ad Architetto, e quindi Manager dal 1995, gestendo gruppi internazionali di sviluppo prima, di supporto e servizi dopo (Project Manager in Spagna nel 1998), consulenza (organizzazione centri di calcolo ed ottimizzazione processi) ed infine vendite dal 2006. Attualmente Technical Sales e Solutions Manager per la divisione Security System in Europa.
Autore di diverse pubblicazioni e brevetti depositati in US e UK (UK2313939, US57840008, 7305444, 7454463 … ) nel campo della manipolazione testi, gestione ed ottimizzazione comunicazioni, intelligenza artificale, consulenza di processi. Collabora con diverse Università (La Sapienza, Roma3 .. ) per integrare corsi di laurea o seminari soprattutto nel campo della gestione processi, sicurezza e automazione.
Fonte: Security Summit
La partecipazione è gratuita. Saranno accettate tutte le adesioni fino ad esaurimento posti.
E necessario prenotarsi online.
https://www.eventbrite.com/e/biglietti-del-cosa-fanno-gli-hacker-28548790200?keep_tld=1

View File

@@ -0,0 +1,30 @@
---
title: "DevFest Triveneto 2022"
tags:
- GDG Venezia
slug: devfest-triveneto-2022
micropub: h-event
location: true
location_name: Campus Scientifico Università Ca' Foscari
region: Veneto
latitude: 45.4786574
locality: Mestre, Venezia
longitude: 12.2552889
country_name: IT
street_address: "155 Via Torino"
start: 2022-10-22T09:00:00+02:00
end: 2022-10-22T18:00:00+02:00
layout: event
date: '2022-10-22T09:00:00+02:00'
---
📢 Torna la DevFest: il momento di ritrovo tra developer in cui condividere la propria passione ed esperienza per il mondo dello sviluppo! 🔥
Le novità non sono finite qui: questanno viene organizzata da 4 diversi GDG (Venezia, Padova, Verona e Trento) in due location in contemporanea: Venezia e Trento 😉
Entrambe le location avranno a disposizione due sale, una per interventi in persona, una per gli interventi in streaming direttamente dallaltra città!
Cosa aspetti? Prenota ora il tuo biglietto gratuito 💗
Agenda e speaker sono disponibili sul sito web ufficiale: <https://www.devfest-triveneto.it/>
https://www.devfest-triveneto.it/

View File

@@ -0,0 +1,34 @@
---
title: "DevFest Veneto 19"
tags:
- GDG Venezia
slug: devfest-veneto-19
micropub: h-event
location: true
location_name: Campus Scientifico Università Ca' Foscari
region: Veneto
latitude: 45.4786574
locality: Mestre, Venezia
longitude: 12.2552889
country_name: IT
street_address: "155 Via Torino"
start: 2019-11-16T09:00:00+02:00
end: 2019-11-16T18:00:00+02:00
layout: event
date: '2019-11-16T09:00:00+02:00'
---
Yes, we are proud to announce that also this year the DevFest Veneto will take place on 16th November! But we have lots of news!
DevFests are community-led developer events hosted by Google Developer Groups around the globe. These are events with talks, workshops and networking moments dedicated to professional developers and designers, entrepreneurs, students or simple enthusiasts. It is an opportunity to share skills and passions within the universe of Google technologies (and not only).
This year, we have committed to switching the conference main language from Italian to English, to host speakers and attendees from all over the world. So this year, the majority of the sessions will be in English (all the language information will be available on the schedule section of the website).
And we have also a new location! This year the DevFest will take place at "Campus Scientifico Università Ca' Foscari" - Via Torino, 155, 30170 Mestre, Venezia VE in the building "Zeta"
The event will last all day, from 9.00 am to 6.00 pm. The schedule is available on the official website!
<https://devfestvenice.com>
The event is free and this ticket grants access to the conference, coffee break, and lunch. We invite you to register ONLY if you really think you are there, so as not to remove the possibility for others who would like to come.
https://www.eventbrite.com/e/biglietti-devfest-veneto-19-76654962055?keep_tld=1

View File

@@ -0,0 +1,31 @@
---
title: "Follow UP! “Abitare” a Venezia"
tags:
- Follow UP!
slug: follow-up-abitare-a-venezia
micropub: h-event
location: true
location_name: Forte Marghera
region: Veneto
latitude: 45.4759568
locality: Venezia
longitude: 12.2610482
country_name: IT
street_address: "30 Via Forte Marghera"
start: 2018-10-04T18:00:00+02:00
end: 2018-10-04T20:00:00+02:00
layout: event
date: '2018-10-04T18:00:00+02:00'
---
Descrizione
Matteo Basso, Federica Fava, Laura Fregolent, Renato Gibin presentano:
Venezia verrà raccontata a partire da alcune ricerche condotte allinterno del Laboratorio di Analisi urbana e del territorio e del ClusterLab: H-City Housing in the city. Abitare e rigenerare, dellUniversità IUAV di Venezia. La sovrapposizione dei risultati di diverse indagini condotte sui temi casa, commercio, uso ai piani terra e territori di margine, consentirà di restituire realtà e dinamiche di una città in veloce e continua trasformazione.
Dati
* [Mappa dell'abbandono](http://iuav-labgis.maps.arcgis.com/apps/MapJournal/index.html?appid=c80b12379b7c4c119fed69d2ad3845f3)
* [Quali case per quali abitanti?](http://iuav-labgis.maps.arcgis.com/apps/MapJournal/index.html?appid=83e4a30bba954268ada8d1b5f7858701)
https://www.eventbrite.it/e/biglietti-follow-up-dati-dal-padiglione-al-forte-abitare-a-venezia-50389110185#

View File

@@ -0,0 +1,22 @@
---
title: "Follow UP! Cittadini e algoritmi, comunicazione e servizi pubblici"
tags:
- Follow UP!
slug: follow-up-cittadini-e-algoritmi-comunicazione-e-servizi-pubblici
micropub: h-event
location: true
location_name: Forte Marghera
region: Veneto
latitude: 45.4759568
locality: Venezia
longitude: 12.2610482
country_name: IT
street_address: "30 Via Forte Marghera"
start: 2018-09-27T18:00:00+02:00
end: 2018-09-27T20:00:00+02:00
layout: event
date: '2018-09-27T18:00:00+02:00'
---
Marco Goldin, il data scientist da sorriso maliardo, ci mostrerà degli algoritmi di cooccorrenza per il targeting delle comunicazioni comunali ai cittadini. DOMANDA: come si possono gestire algoritmicamente i dati delle interazioni dei cittadini? Sembra una cosa supertecnica ma serve per proporre i servizi ai cittadini ottimizzando la comunicazione con l'Amministrazione nei vari canali, che sia il sito web, i social, URP. Esempio banale: grazie all'analisi di cooccorrenza, se il cittadino 1 usa il servizio A e il cittadino 2 usa il servizio A e quello B, le macchine automaticamente propongono il servizio B anche al cittadino 1. Si farà un'analisi di qualche struttura di sito web e una serie di considerazioni.
https://www.eventbrite.it/e/biglietti-follow-up-dati-dal-padiglione-al-forte-cittadini-e-algoritmi-comunicazione-servizi-pubblici-e-50075741892#

View File

@@ -0,0 +1,31 @@
---
title: "Follow UP! Dal Padiglione Venezia a Forte Marghera"
tags:
- Follow UP
slug: follow-up-dal-padiglione-venezia-a-forte-marghera
micropub: h-event
location: true
location_name: Forte Marghera
region: Veneto
latitude: 45.4759568
locality: Venezia
longitude: 12.2610482
country_name: IT
street_address: "30 Via Forte Marghera"
start: 2018-06-07T18:00:00+02:00
end: 2018-06-07T20:00:00+02:00
layout: event
date: '2018-06-07T18:00:00+02:00'
---
# Secondo incontro del Padiglione Venezia a Forte Marghera
Nelle aule seminariali - appena entrati in fondo sulla destra - incontreremo il gruppo di ricerca Visualising Venice, è un'iniziativa di Digital Humanities di studenti, studiosi e architetti con progetti di ricerca per generare modelli digitali e mappe della città di Venezia, dei suoi territori e della sua laguna. Parleremo dei casi di studio presentati al Padiglione Venezia e delle attività di raccolta, analisi e riproduzione della Città dai documenti storici.
Ne parleramo con:
* Caroline Bruzelius (Duke University)
* Donatella Calabi (IUAV)
* Andrea Giordano (Università degli studi di Padova)
* Moderatore Luca Corsato, staff curatoriale Padiglione Venezia (OSD)
https://www.eventbrite.it/e/biglietti-visualising-venice-biennale-architettura-follow-up-dal-padiglione-venezia-al-forte-marghera-46694717156#

View File

@@ -0,0 +1,22 @@
---
title: "Follow UP! Dati dal Padiglione al Forte"
tags:
- Follow UP
slug: follow-up-dati-dal-padiglione-al-forte
micropub: h-event
location: true
location_name: Forte Marghera
region: Veneto
latitude: 45.4759568
locality: Venezia
longitude: 12.2610482
country_name: IT
street_address: "30 Via Forte Marghera"
start: 2018-05-30T18:00:00+02:00
end: 2018-05-30T20:00:00+02:00
layout: event
date: '2018-05-30T18:00:00+02:00'
---
OSD opensensorsdata illustrerà il modello di gestione dati del Padiglione Venezia assieme a DataBeers Venezia, gli analisti dati con la schiuma, e Hacks/Hackers Venezia, gli smanettoni e i parolai con i dati tra giornalisti e hacker.
https://www.eventbrite.it/e/biglietti-follow-up-dati-dal-padiglione-al-forte-46493305729#

View File

@@ -0,0 +1,29 @@
---
title: "Follow UP! Il cantiere Biennale"
tags:
- Follow Up
slug: follow-up-il-cantiere-biennale
micropub: h-event
location: true
location_name: Forte Marghera
region: Veneto
latitude: 45.4759568
locality: Venezia
longitude: 12.2610482
country_name: IT
street_address: "30 Via Forte Marghera"
start: 2018-10-11T18:00:00+02:00
end: 2018-10-11T20:00:00+02:00
layout: event
date: '2018-10-11T18:00:00+02:00'
---
La storia delle trasformazioni dei Giardini in luogo espositivo; la costruzione dei padiglioni nazionali; la "vita" delle mostre e degli allestimenti museali. Ne parleremo con:
* Francesca Castellani (Università Iuav di Venezia)
* Eleonora Charans (Università Iuav di Venezia)
* Chiara Di Stefano (Università per Stranieri di Perugia)
* Cristiano Guarneri (Università degli Studi di Padova)
* Stefano Zaggia (Università degli Studi di Padova)
* Guido Zucconi (Università Iuav di Venezia)
https://www.eventbrite.it/e/biglietti-follow-up-dati-dal-padiglione-al-forte-il-cantiere-biennale-51215275267#

View File

@@ -0,0 +1,32 @@
---
title: "Follow UP! Venezia Conta, dai dati all'ambiente"
tags:
- Follow UP!
slug: follow-up-venezia-conta-dai-dati-allambiente
micropub: h-event
location: true
location_name: Forte Marghera
region: Veneto
latitude: 45.4759568
locality: Venezia
longitude: 12.2610482
country_name: IT
street_address: "30 Via Forte Marghera"
start: 2018-06-25T18:00:00+02:00
end: 2018-06-25T20:00:00+02:00
layout: event
date: '2018-06-25T18:00:00+02:00'
---
Per il terzo incontro per il Padiglione Venezia parleremo di design della comunicazione per usare i dati per informare sullemergenze ambientali e sociali nella città: strumenti interpretativi per affrontare la complessità.
Dal Corso di laurea in disegno industriale e multimedia del Dipartimento di progettazione e pianificazione in ambienti complessi, verranno proposte strategie e metodi per informare sullambiente naturale e civile nel Comune di Venezia. Gli unici strumenti saranno i numeri e dati rilevati sul territorio e "lavorati" per diventare strumenti informativi.
* Sergio Brugiolo (docente di design della comunicazione)
* Claudia Faraone (architetto urbanista)
* Stefano Giacomazzi (presidente Viva Piraghetto associazione culturale)
* Anna Saccani (designer della comunicazione)
* Luca Corsato (moderatore)
https://www.eventbrite.it/e/biglietti-venezia-conta-dai-dati-allambiente-biennale-architettura-follow-up-dal-padiglione-venezia-al-forte-47146147396#

View File

@@ -0,0 +1,22 @@
---
title: "GDG Venezia Tech Talks @ Ca' Foscari"
tags:
- GDG Venezia
slug: gdg-venezia-tech-talks--ca-foscari
micropub: h-event
location: true
location_name: Fabrica
region: Veneto
latitude: 45.7395667
locality: Catena di Villorba
longitude: 12.2657591
country_name: IT
street_address: "54/F Via Postioma"
start: 2017-12-02T09:30:00+02:00
end: 2017-12-02T18:30:00+02:00
layout: event
date: '2017-12-02T09:30:00+02:00'
---
Le DevFest sono delle vere e proprie "feste degli sviluppatori" organizzate dai GDG di tutto il mondo, nel periodo tra settembre e novembre. Sono degli eventi composti da talk, codelab e momenti di networking dedicati a sviluppatori e designer professionisti, ad imprenditori, studenti o semplici appassionati e curiosi. Si tratta di un'occasione per condividere insieme competenze e passioni all'interno dell'universo delle tecnologie Google.
https://gdg-venezia.github.io/devfest1-veneto/

View File

@@ -0,0 +1,107 @@
---
title: "Inaugurazione DEL_FABLAB un laboratorio di Fabbricazione Digitale in laguna"
tags:
- DIGITAL:ENTERPRISE:LAB
- DEL_FABLAB
slug: inaugurazione-delfablab-un-laboratorio-di-fabbricazione-digitale-in-laguna
micropub: h-event
location: true
location_name: Ca' Foscari - Campus Economico San Giobbe
region: Veneto
latitude: 45.4459732
locality: Venezia
longitude: 12.3180178
country_name: IT
street_address: "873 Fondamenta S. Giobbe"
start: 2016-06-08T16:00:00+02:00
end: 2016-06-08T21:30:00+02:00
layout: event
date: '2016-06-08T16:00:00+02:00'
---
DEL_FABLAB, laboratorio universitario di fabbricazione digitale
Digital Enterprise Lab e Università Ca' Foscari Venezia annunciano l'inaugurazione del DEL_FABLAB, primo laboratorio di fabbricazione digitale universitario in Veneto.
L'inaugurazione è prevista il giorno 8 giugno 2016 alle ore 16:00.
Seguiranno comunicazioni con il programma dettagliato dell'evento.
Obiettivo del DEL FabLab è diffondere la conoscenza e studiare limpatto delle nuove tecnologie digitali sui modelli e sui processi produttivi delle imprese del Nord-Est Italiano.
Il DEL FabLab è un laboratorio dotato di tecnologie per la prototipazione rapida e a basso costo dove sperimentare progetti e produrre prototipi, incontrare diverse community di specialisti.
Il progetto è finanziato dalla Regione del Veneto con risorse FAS 2000-2006 FabLab Veneti, realizzato con il contributo di Fondazione Università Ca' Foscari, Stevanato Group, CNA Veneto, Dipartimento di Management.
Programma dettagliato
H 16:00 - Saluti Istituzionali:
- Michele Bugliesi - Rettore Università Ca' Foscari Venezia;
- Gianluca Forcolin - Vice Presidente Regione del Veneto;
- Elvio Tasso - Direttore Sistemi Informativi di Regione Veneto;
- Arch. Luca Battistella - Consigliere Delegato Comune di Venezia
"Dall'Innovazione alla Smart City";
- Alessandro Conte Presidente CNA Veneto;
- Gaetano Zilio Grandi - Direttore di dipartimento management;
H 16:50 - Presentazione DEL_FABLAB:
- Giovanni Vaia - Direttore scientifico DEL_FABLAB;
H 17:00 - Innovazione/Trend/Opportunità:
- Fiore Basile - Presidente FabLab Toscana Co-fondatore Fab Economy
"Stato dell'arte nel network FabLab";
- Gianluigi Cogo - Responsabile del progetto FabLab Veneti per Regione Veneto;
"Dal making alla trasformazione digitale";
- Alfredo Adamo - CEO Alan Adanvtage
"Innovazioni ed applicazioni nel mercato della stampa 3D";
- Kalpesh Tejani - Heineken;
"Progetto: Digital Technology Assist";
H 18:00 - OPENING PARTY:
- Apertura DEL_FABLAB al pubblico
- Video installazioni;
- INIZIO RINFRESCO;
H 18.30 - LIVE MUSIC:
- OPHIR free jazz;
https://www.facebook.com/Ophir-227059067477898/?fref=ts
- WATERPROOF electro acoustic;
https://www.facebook.com/waterproofdnb/?fref=ts
H 21:30 - CONCLUSIONE EVENTO
https://www.eventbrite.com/e/biglietti-inaugurazione-del-fablab-un-laboratorio-di-fabbricazione-digitale-in-laguna-25812167889?keep_tld=1

View File

@@ -0,0 +1,22 @@
---
title: "PyCon 9"
tags:
- Pycon Italia
slug: pycon-9
micropub: h-event
location: true
location_name: FH55 Grand Hotel Mediterraneo
region: Toscana
latitude: 43.7661469
locality: Firenze
longitude: 11.2721791
country_name: IT
street_address: "44 Lungarno del Tempio"
start: 2018-04-19T00:00:00+02:00
end: 2018-04-22T00:00:00+02:00
layout: event
date: '2018-04-19T00:00:00+02:00'
---
PyCon Italia è la conferenza nazionale che raccoglie professionisti, ricercatori e appassionati del linguaggio di programmazione più bello che ci sia. Nella splendida cornice di Firenze, PyCon è un weekend per imparare, confrontarsi e scoprire.
https://www.youtube.com/user/pyconitalia/

View File

@@ -0,0 +1,17 @@
---
title: "Scala Italy"
tags:
- Scala Italy
slug: scala-italy
micropub: h-event
location: true
location_name: Ex Cotonificio Veneziano Santa Marta, Dorsoduro 2196, 30123 Venezia
start: 2016-05-14T00:00:00+02:00
layout: event
date: '2016-05-14T00:00:00+02:00'
---
Scala Italy is the third edition of the annual Italian conference on the Scala Programming Language.
It is brought to you by and for the scala community. All conference talks are peer evaluated by members of the community itself.
https://vimeo.com/channels/scalaitaly2016

View File

@@ -0,0 +1,44 @@
---
title: "DataBeers VCE 10"
tags:
- DataBeers Venezia
slug: databeers-vce-10
micropub: h-event
location: true
location_name: Via Piave, 57
region: Veneto
latitude: 45.48764737275272
locality: Venezia
longitude: 12.234424899999997
country_name: IT
street_address: "57 Via Piave"
start: 2023-04-14T18:30:00+02:00
end: 2023-04-14T20:30:00+02:00
layout: event
date: '2023-04-14T21:00:00+02:00'
---
Siamo tornati! Dopo anni di assenza (forzata e non) eccoci di nuovo in pista per ricominciare a parlare di dati sorseggiando birra!
Vi aspettiamo nella nostra nuova/vecchia sede di via Piave 57 a Mestre, per un ritorno alle radici (e ai bagigi per terra) con tre imperdibili presentazioni!
Shira Fano
Fondazione Nord Est
“E se Twitter ci raccontasse come va leconomia?”
Rocco Tripodi
Università di Bologna
“Che cosè ChatGPT?”
Sara Ferro
Università Ca Foscari
“LAI può aiutare a trascrivere il Medioevo Veneziano”
Grazie a Estrella Damm per il cortese supporto dissetante!
https://www.eventbrite.com/e/biglietti-databeers-venezia-10-587973714207

View File

@@ -0,0 +1,22 @@
---
title: "PyCon 2023"
tags:
- Pycon Italia
slug: pycon-23
micropub: h-event
location: true
location_name: FH55 Grand Hotel Mediterraneo
region: Toscana
latitude: 43.7661469
locality: Firenze
longitude: 11.2721791
country_name: IT
street_address: "44 Lungarno del Tempio"
start: 2023-05-25T00:00:00+02:00
end: 2023-05-28T00:00:00+02:00
layout: event
date: '2023-05-25T00:00:00+02:00'
---
PyCon Italia è la conferenza nazionale che raccoglie professionisti, ricercatori e appassionati del linguaggio di programmazione più bello che ci sia. Nella splendida cornice di Firenze, PyCon è un weekend per imparare, confrontarsi e scoprire.
<https://www.youtube.com/user/pyconitalia/>

5
content/event/_index.md Normal file
View File

@@ -0,0 +1,5 @@
---
title: events
type: event
specialpost: true
---

14
content/feeds.md Normal file
View File

@@ -0,0 +1,14 @@
---
title: "feeds"
specialpost: true
type: page
---
This page collects content I'm producing in some way or the other, and is consumable with RSS. [Learn more about the idea](https://marcus.io/blog/making-rss-more-visible-again-with-slash-feeds).
![RSS logo](/static/img/rss.png)
You can follow me here:
* [All stuff from my blog](https://fundor333.com/index.xml)
* [All my post from my blog](https://fundor333.com/post/index.xml)
* [Rss from my Mastodon](https://mastodon.social/@fundor333.rss)

6
content/hoarding.md Normal file
View File

@@ -0,0 +1,6 @@
---
title: hoarding
type: hoarding
specialpost: true
---
Here are some of the internet stuff i suggest like post, anime, video and others stuff here and there. Good read/watch/stuff with them

46
content/now.md Normal file
View File

@@ -0,0 +1,46 @@
---
title: "now"
type: now
specialpost: true2
---
This is my now page, and if you have your own site, [you should make one too](https://nownownow.com/about).
Here I write what I'm working or studing for now:
## Web
* [Fundor333](https://fundor333.com) - This blog make with Hugo and love. The Css framework change somethime. Now it's boostrap 4 with font awesome
* [DigitalTeaRoom](https://digitaltearoom.com/) - My blog about Tea and other tea related stuff
## Hardware
* [Rioba project](https://riobaproject.it/) - Project about a sensors' system for have a numeric value of the well being of the people in the Venice's area
## Bots and automations
* [MareaBot](https://github.com/Venice-Bot-Center/MareaBot) - Bot for read the HighWater Api of Comune di Venezia and, if there is an allert, post it on a channel on telegram. Written in Python
* [PolliniVeneziaBot](https://github.com/Venice-Bot-Center/PolliniVeneziaBot) - Bot for read the Pollins and Spore Api for the City of Venice and, if there is an allert of any level, post it on a channel on telegram. Written in Python
* [Server Grimoire](https://github.com/fundor333/servergrimoire) - Module for give you some command to check URLs, domains and other things in an automatic way
* [Hubot tea timer](https://github.com/fundor333/hubot-tea-timer) - The last Hubot tea timer you'll ever need
## Minor utilities and other *toys*
* [Dotfiles](https://github.com/fundor333/dotfiles) - My configuration for a Mac, a Windows or a Linux installation.
* [Crontab Dotbot](https://github.com/fundor333/crontab-dotbot) - Plugin for Dotbot for managing crontab
* [Docker Hugo](https://github.com/fundor333/docker-hugo) - A Docker image for the static sites generated Hugo
* [Bofh Oh-My-Zsh](https://github.com/fundor333/bofh) - Plugin for ohmyszh for adding a fortune style message from a BOFH
* [Smile Oh-My-Zsh](https://github.com/fundor333/smile) - An oh-my-zsh plugin for printing smile
<a href="https://tree-nation.com/it/profilo/impatto/matteo-scarpa-2#co2" target="_blank" style="position:relative;cursor:pointer;display:block;z-index:999;">
<img src="https://tree-nation.com/images/tracking/label-co2-website-white-en.png" style="width:157px;height:auto;">
</a>
<script src="https://tree-nation.com/js/track.js"></script>
<script>treenation_track("63adf7543a3b5");</script>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

View File

@@ -0,0 +1,19 @@
---
title: "Fundor333"
date: 2012-08-20T12:00:00+02:00
feature_link: ""
feature_text: ""
tags:
slug: "Fundor333"
categories:
- rant
description: "Primo post"
type: "post"
meta:
---
Studente di informatica, nerd e maschio. Non del tutto convinto di quello che faccio scrivo per essere ascoltato e parlo per scrivere.
Praticamente sposato col mio gatto ho una passione per tutta l'informatica e le cose "non spiegabili".
Possiedo, in oltre, una inspiegabile passione per i giochi Indie e la criptografia

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -0,0 +1,88 @@
---
title: Docker, la balena con i container per software
date: 2016-10-03 00:00:00 +0000
tags:
- docker
- coding
- devops
description: Docker, cos'è e come funziona
slug: docker-la-balena-con-i-container
categories:
- dev
feature_link: "https://unsplash.com/photos/hHntcuiLbOg"
feature_text: "Photo by Antoine Petitteville on Unsplash"
type: "post"
---
Oggi parliamo di balene e di Virtual Machine, ovvero parliamo di
Docker.
![Docker](docker-logo.png)
<!--more-->
La prima volta che ho incontrato Docker è stato leggendo un articolo
sulle macchine virtuali e su come rendere uguale l'ambiente di develop,
testing e di produzione. Quando lo ho letto non capivo bene come
funzionasse ma poi ho trovato degli esempi più semplici che spiegano
bene la differenza tra i due.
## La macchina virtuale
La macchina virtuale solitamente la possiamo vedere come i vecchi hard
disk a cassettoni: installo il sistema operativo, installo tutte le
componenti e poi è pronto per essere inserito nella macchina affinchè
funzioni. In oltre basta copiarlo n volte per averne n ambienti
completamente uguali.
### Pregi
Stabile e interamente contenuto in un unico "ambiente" portabile
(solitamente è un file in cui è salvato l'hd della macchina virtuale).
### Difetti
Molto pesante in termini di spazio e memoria. Se ho due installazioni
identiche che fanno girare due applicazioni diverse sulla stessa
macchina io ho due copie delle librerie, del sistema operativo e delle
configurazioni.
Questa immagine mostra bene come il "guest os" risuta essere duplicato
(in questo caso triplicato) e non possa essere "riutilizzato" dalle
altre applicazioni.
## Docker
Sul serio è un servizio differente? Si e no.
Concettualmente è comunque un sistema di macchina virtuale. Praticamente
è una "torta multistrato" di quello che Docker chiama conteiner.
Ogni livello contiene parte dei prerequisiti divisi per livello in base
a come è stato scritto il Dockerfile (file di configurazione per la
creazione di conteiner docker) e se due "applicativi docker" o immagini
docker utilizzano gli stessi container non genera una copia nell'hard
disk ma utilizza lo stesso container per entrambi.
### Vantaggi
Puoi distribuire il file di configurazione (semplice file di testo,
solitamente anche molto breve) al posto che condividere un intero disco
virtuale e è più compatto rispetto alla virtual machine per quanto
riguarda lo spazio occupato, in quanto c'è solo le librerie richieste e
nessun altra componente del sistema operativo o delle librerie.
In oltre, in caso di multiple istanze di docker risulta spesso più
performante, sopratutto quanto più sono simili le immagini.
### Svantaggi
Bisogna imparare a fare i file docker e, nel caso di una solo istanza di
docker in funzione sulla macchina potrebbe essere più pesante di una
macchina virtuale.
Personalmente ultimamente lo uso molto per sviluppare siti web. Questo
mi permette di avere una unica installazione di php e di mysql senza
dover spostare ogni volta i progetti all'interno della root del web
server ma semplicemente lanciando i file docker di quel progetto, che
ricevono automaticamente un ip e, di conseguenza, posso visualizzarli in
parallelo.
Se quindi volete provare anche voi Docker vi lascio qui il
[link](https://www.docker.com/).

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@@ -0,0 +1,93 @@
---
title: Git, l'albero delle versioni che ci salva il progetto
date: 2016-10-10 00:00:00 +0000
tags:
- git
- coding
slug: git-lalbero-delle-versioni
description: Spesso e volentieri uno dei problemi dello sviluppo di software è avere
backup del codice e condividerlo in modo da poterci lavorare in più persone in contemporanea
senza sovrapporre le modifiche. Queste due richieste vengono soddisfatte con un
software di version controlling che permetta il lavoro di multipli utenti.
categories:
- rant
aliases:
- "/blog/git-lalbero-delle-versioni/"
feature_link: "https://unsplash.com/photos/EwKXn5CapA4"
feature_text: "Photo by Jeremy Bishop on Unsplash"
---
Spesso e volentieri uno dei problemi dello sviluppo di software è avere
backup del codice e condividerlo in modo da poterci lavorare in più
persone in contemporanea senza sovrapporre le modifiche. Queste due
richieste vengono soddisfatte con un software di version controlling che
permetta il lavoro di multipli utenti.
Dopo una analisi ho capito che [Git](https://git-scm.com/) è quello che
fa al caso mio.
![Logo git](git.png)
**Come sono arrivato a Git?**
Ho copiato il più grande progetto Open Source che conosco: il Kernel
Linux.\
Vedendo che il Kernel usa Git per il version controlling ho deciso di
capire perchè lo usano. Linus da alcuni motivi validi:
- E' indipendente dalla piattaforma usata
- Tiene traccia delle modifiche effettuate ai file non a tutto il file
- Non esiste un repository più importante degli altri quindi tutte le
copie del repository possono essere sostituite senza che ci siano
perdite al progetto
- Non necessità della rete per funzionare. La rete la usa solo per
condividere le modifiche con eventuali server o le altre copie del
repository
- Garantisce che "tutto il codice che butti dentro non viene toccato"
- E' facile fare una diramazione del progetto, tenerne traccia e,
finite le modifiche desiderate, farla ritornare nel "ramo"
principale in frazioni di secondo fino a pochi secondi per progetti
particolarmente grandi.
Questa tipologia si chiama software di version controlling distribuito.
Questo si contrappone ad altri software che richiedono un server a cui
bisogna accedere per fare qualunque operazione.
 
**Perchè è la soluzione per me?**
Perchè risponde alle richieste di gratuità, coerenza del codice e
permette di lavorare offline. In oltre mi permette di scaricare i
repository SVN, che è il servizio storico ed è molto usato.
**Come funziona tutto ciò?**
In modo semplice se si capisce come ragiona. Altrimenti è aramaico
antico...
Data una cartella contente il repository Git, se io faccio un
cambiamento questo file viene analizzato da Git con la versione in
memoria. Le differenze tra le versioni sono quelle che Git memorizza. Le
modifiche ai file assumono quindi degli 'stati': registrate, non
controllate, sotto osservazione.
![Visualizzazione struttura](areas.png)
Normalmente le modifiche sono effettuate nella "Working Directory" e
passano nella "Staging Area" dopo che vengono selezionate con il comando
*git add nomefilemodificato.estensione*.
Una volta qui vengono raggruppate con *git commit* e gli viene messo del
testo per spiegare lo scopo delle modifiche. Se si va a vedere cosa
contiene un "commit" si trovano, per ogni modifica fatta, i dati di cosa
è stato tolto o messo per ogni riga e file toccati dalla modifica.
Quindi il tutto può essere inviato attraverso la rete a destinazioni
predefinite col comando *git push* o è possibile recuperare le modifiche
effettuate da altri con un *git pull*.
A tutto questo, si aggiunge il sistema dei *branch* o *ramificazioni*
che permettono di tenere una versione "stabile" del progetto mentre si
lavora a nuove componenti stando tranquilli che, nel caso di problemi, è
possibile tornare indietro alla situazione "tranquilla".

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@@ -0,0 +1,54 @@
---
title: Gource, visualizzare Git repository
date: 2016-11-07 00:00:00 +0000
tags:
- git
slug: gource-visualizzare-git-repository
description: Gource, cos'è e come usarlo al meglio
categories:
- rant
aliases:
- "/blog/gource-visualizzare-git-repository/"
feature_link: "https://unsplash.com/photos/TYUS-cXzy50"
feature_text: "Photo by Mark Tegethoff on Unsplash"
---
Quando hai un progetto Git, normalmente lo usi per fare controllo delle
versioni.\
Una volta che il progetto è nella fase di rilascio tu hai quindi un
repository molto "pieno" di dati temporali e di chi a modificato cosa e
quando. E' solitamente in questo momento che io faccio il "Gource" del
progetto.
<!--more-->
Cos'è questo "Gource" che io faccio dei miei progetti? E' una
rappresentazione grafica dello sviluppo del progetto utilizzando i log
del version controll software utilizzato per il progetto.\
Il video qui sotto è esattamente questo: un progetto sviluppato per il
corso di Ingegneria del software con Git come vcs.
<iframe src="https://www.youtube.com/embed/8cZPHhazUeE" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe>
[Gource](http://gource.io/) quindi è solo un applicativo software per
visualizzare la crescita dei file di un progetto come fosse una pianta
che cresce e muore in base ai file modificati, tolti e aggiunti del
progetto.
Personalmente lo trovo molto utile per capire i momenti in cui ci sono
stati problemi nello sviluppo ad esempio creazione di grandi
quantitativi di file presto eliminati o un gruppo di sviluppo che va a
toccare troppo i file di altri gruppi puo' servire a una revisione di
fine progetto.
Molto interessante risulta essere anche il progetto derivato da Gource
ovvero [Lostalgia](http://logstalgia.io/). Lostalgia è un visualizzatore
di log per server web. Ti permette di visualizzare le richieste ricevute
e servite in modo pratico e veloce.
<iframe width="560" height="315" src="https://www.youtube.com/embed/K8muK-o80ZU" frameborder="0" allowfullscreen></iframe>
In particolare è possibile vedere molto velocemente traffico "sospetto"
come quello nel video qui sopra. Infatti questo video è un attacco
SQLInjection con un successivo DDOS attack. Questo vuole dire che prima
raccoglie tutto quello che può da un unico indirizzo client e
successivamente intasa tutte le richieste

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

View File

@@ -0,0 +1,43 @@
---
title: Parentesys Horror
date: 2016-11-09 00:00:00 +0000
tags:
- coding
- rant
slug: orrori-delle-parentesi
description: How to use parentesies in coding
categories:
- rant
aliases:
- "/blog/orrori-delle-parentesi/"
feature_link: "https://unsplash.com/photos/XMpXzzWrJ6g"
feature_text: "Photo by Annie Spratt on Unsplash"
---
(°,,,°)
This is my face when I open Twitter...
A fragment of code with parentesies at the end of the row...
>Use whatever brace style you prefer.
>
>But not this.
>
>Don't do this.
>
>Seek help instead of this.
>
><a href="https://t.co/1EYb7BLHkb">pic.twitter.com/1EYb7BLHkb</a></p>— hiscursedness@mastodon.art (@HisCursedness) <a href="https://twitter.com/HisCursedness/status/788690145822306304?ref_src=twsrc%5Etfw">October 19, 2016</a></blockquote>
\\|/(x,,,x)\\|/
This is one of the think you must not do.
The *bon ton* of coding show you how you need to write the code.
You need to write in a way which you will can read it easy in eons in the future with different coders.
If you write code like this ***when*** you came back to it, because you will, you will soffer for your older decision, cursing yourself for years to come because you will need to rewrite some part or all of the orrible code you wrote.
So thing allwayse to write good code because the coder-karma is a monster and has your home adress and come when you don't have time to rewrite the horror-code.

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

View File

@@ -0,0 +1,43 @@
---
title: Un Astemio al Tezo Databeers
date: 2017-11-23 00:00:00 +0000
slug: astemio-al-terzo-databeers
tags:
- rant
- convention
description: La mia terza esperienza al DataBeers di Venezia, mio quarto Databeers
categories:
- rant
aliases:
- "/blog/astemio-al-terzo-databeers/"
feature_link: "https://unsplash.com/photos/6ZZh8kOyW-4"
feature_text: "Photo by Adam Wilson on Unsplash"
---
Personalmente io adoro i raduni informatici e di data scienze, sono strani nel senso bello. Uno di quelli a cui riesco a partecipare di più in assoluto è il _*[DataBeers di Venezia](https://databeersvce.tumblr.com)*_.
Ho partecipato dalla prima iterazione a questo evento e, dal mio punto di vista, questa terza iterazione è stata la migliore.
Ci sono stati tre interventi di altrettante persone diverse:
* Data Driven Design
Leonidas Paterakis del FabLab di Venezia presenta il sistema del Data Driven Design.
Attraverso degli algoritmi randomizzati o dati reali è possibile tradurli in oggetti fisici quali tavoli, sedie o lampade.
Hanno utilizzato le "_metaball_" per la costruzione di un tavolo di design
* Icij Realeases Paradise Papers Data from Appleby
Lorenzo Speranzoni di Larus mostra l'utilizzo dei database a grafo (utilizzato con Neo4J) per seguire i dati dei _Paradise Papers_.
Molto interessante a livello di "lezione" in quanto mostra la reale utilità delle connessione dei dati, che risulta essenziale in alcuni casi, rispetto ad avere solo il dato in se.
* Disinformazione ai tempi dei social
Fabiana Zollo, di Ca' Foscari, ci parla delle bufale online e della loro diffusione grazie alla nostra enorme produzione di dati.
Il problema fondamentale di questo periodo è nato dal fatto dal fatto che i media sono stati "materializzati" e resi indipendenti portandoli a essere plasmati dalla volontà del lettore stesso. Questo porta le persone a cercare informazioni che sono già allineate con le nostre ideologie
Personalmente mi sono piaciuti molto tutti gli interventi e ho finalmente trovato una ditta (Appleby) che utilizza _Neo4J_ nei loro progetti.
Il loro prossimo evento sarà l'anno prossimo e non vedo l'ora che arrivi anche se sono astemio.

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 KiB

View File

@@ -0,0 +1,99 @@
---
tags:
- bot
- python
- coding
- post
date: 2017-02-11 00:00:00 +0000
title: Bot, Telegram e programmazione funzionale
slug: bot-telegram-e-programmazione-funzionale
categories:
- dev
description: Come un mio tentativo di imparare a usare i decoratori in python è sfociata
in un bot in Python
aliases:
- "/dev/bot-telegram-e-programmazione-funzionale/"
feature_link: "https://unsplash.com/photos/3WLcQWnHB_Q"
feature_text: "Photo by Mae Mu on Unsplash"
---
Ho voluto provare a imparare a usare i decoratori e mi sono ritrovato a fare un intero bot telegram basato su codice funzionale e decoratori.
## L'inizio di tutto
Ho trovato una libreria Python per lo sviluppo di bot per Telegram (cosa che mi ha sempre affascinato) e ho deciso di provare a scrivere un bot semplice. Quindi inizio a utilizzare questa libreria [python-telegram-bot](https://python-telegram-bot.org/) e inizio a scrivere i primi metodi per gestire i comandi per il bot e noto una cosa: ogni volta che scrivo una funzione devo legarla a "ascoltatore" che la esegue quando riceve il comando.
Ad esempio se io ho definito prima qi questo frammento di codice una funzione _start_ che mi gestisce il comando omonimo, poi io devo registrarla all'updater attraverso il dispatcher come qui sotto.
{{< highlight python "hl_lines=8 15-17">}}
updater.dispatcher.add_handler(CommandHandler('start', start))
{{< / highlight >}}
Visto che devo riscrivere questa riga per ogni volta che voglio scrivere un comando per il bot ho pensato che sarebbe bene avere un "alias" per questa riga di codice che prenda in input la stringa a cui voglio risponda e la funzione.
<!--more-->
## Alla ricerca di una alternativa
Da bravo programmatore ho subito pensato che:
1. Io una cosa così la ho già vista
2. Qualcosa dentro di me dice di guardare il mio codice di prova di _Flask_
Apro quindi il mio file _prova-stupida-flask.py_
{{< highlight python "hl_lines=8 15-17" >}}
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
{{< / highlight >}}
E capisco che _@app.route("")_ è un decoratore che collega la funzione _hello_ a un listener che risponde all'indirizzo _localhost/_. Esattamente quello che mi serve.
Da una sbirciata al sorgente di Flask produco una classe che gestisce il token e contiene il metodo
{{< highlight python "hl_lines=8 15-17" >}}
def command_handler(self, name):
def decorator(f):
self.updater.dispatcher.add_handler(CommandHandler(name, f))
return f
return decorator
{{< / highlight >}}
che mi permette di scrivere una funzione di gestione di un comando con un piccolo decoratore sopra che fa tutto il lavoro
{{< highlight python "hl_lines=8 15-17" >}}
@mybot.command_handler('start')
def start(bot,update):
/_codice che genera il resto_/
{{< / highlight >}}
E qui felice, continuo a scrivere codice fino ad accorgermi che continuavo a riscrivere la stessa funzione a meno di alcuni "parametri".
Ho quindi scritto un nuovo generatore di funzioni in modo tale
{{< highlight python "hl_lines=8 15-17" >}}
def location_generator(bot, name, text, lonlat):
@bot.command_handler(name)
def decoreted(bot, update):
logging.info("Give the " + name + " info")
BOTAN.track(update.message, name)
bot.sendMessage(chat_id=update.message.chat_id, text=text,parse_mode=ParseMode.MARKDOWN)
lon, lat = lonlat
bot.sendLocation(chat_id=update.message.chat_id, latitude=lat, longitude=lon)
return decoreted
{{< / highlight >}}
In questo modo, una volta passati i parametri corretti, questo genererà una funzione per rispondere con un testo seguito da una location al comando assegnato.
## Conclusioni
Personalmente sono molto soddisfatto su come mi è venuto il plugin ma non sono soddisfatto di come è fatto il modulo... Forse ci metterò mano o ne faccio uno io stesso... Vedremo
Fundor333

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

@@ -0,0 +1,45 @@
---
title: DotFile e le mie config
date: 2017-12-04 00:00:00 +0000
slug: dotfile-e-le-mie-config
tags:
- dotfiles
- coding
description: DotFile e la mia configurazione di tutto
categories:
- rant
- dev
feature_link: "https://unsplash.com/photos/rvbd2namR7U"
feature_text: "Photo by Muhammad Haikal Sjukri on Unsplash"
---
Da quasi 10 anni io utilizzo _Linux_ o sistemi _Unix_ su tutti i pc che utilizzo. Questo mi ha portato a creare svariate configurazioni personalizzate legate a i vari servizi/programmi/script che utilizzo tutti i giorni, perdendo un tempo notevole in caso di ripristino a risettare tutto com'era.
Quindi ho imparato a "backappare" i file di configurazione e stavo iniziando a scrivere un orrendo accrocchio per la generazione delle configurazioni in modo automatico partendo da un database sqlite, che, per quanto intelligente come idea, non è una cosa di facile gestione ne adatto alla situazione che si è creata.
Quindi, girando su _GitHub_ ho incontrato il progetto [DotFiles](https://dotfiles.github.io). Questo è una abitudine/gioco/sistema che va "di moda" su _GitHub_. Viene fatto un repository dei propri file di config (che, nei sistemi _Linux/Unix_ iniziano sempre con il punto) con uno script di _install.sh_ che, quando lanciato, installa correttamente le config e permette di partire dopo un ripristino o una reinstallazione in modo molto veloce.
Per quanto mi riguarda io lo ho stutturato in modo da seguire nel modo migliore le mie esigenze e ho utilizzato un software per la gestione dei _dotfile_
* DotBot
Utility scritto in _Python_, gestisce l'installazione dei file di configurazione nella home utilizzando la configurazione presente nel file _install.conf.yaml_
* DotBot Pip
Plugin per il DotBot che mi permette di gestire l'installazione dei moduli python in automatico. Questo mi permette di settare in automatico già alcune mie dipendenze che installo praticamente sempre.
* install.conf.yaml
Il file di configurazione, necessario per il funzionamento di DotBot. Raccoglie tutto ciò che il bot deve fare per ripristinare le config
* I dotfiles
Tutti i file e le cartelle predisposte per essere importate per ripristinare le configurazioni. Si suggerisce la divisione in cartelle anche per poter tenere meglio organizzato il repository/backup
* Aggiornamento
Bisogna tenere sempre i file e per farlo va fatto a mano. Personalmente credo che sia il modo migliore per aggiornarli è farlo a mano. Si ha così controllo e si riesce a mantenere puliti i file di configurazione.
* Per terminare
E' importante rimanere anche aggiornati su come cambiano i config dei programmi e servizi che si usano. Per questo suggerisco di seguire gli aggiornamenti dei programmi/servizi di cui si stanno tenendo i dotfile e di seguire anche i tweet di @EditorConfig che da utili consigli e condivide altri repository di dotfile per confronto/copia.
Comunque la cosa importante è rimanere sempre informati dei cambiamenti che avvengono nei propri dotfile e perchè accadono. Questo permetterà anche di capire meglio le stesse impostazioni e controllare che siano sempre come vorremmo.
Spero che questi consigli vi tornino utili.
Fundor333

Binary file not shown.

After

Width:  |  Height:  |  Size: 1011 KiB

View File

@@ -0,0 +1,75 @@
---
title: E sono passato a Hugo
date: 2017-04-04 00:00:00 +0000
slug: e-sono-passato-a-hugo
tags:
- hugo
- blog
description: Come e perchè sono passato a Hugo da Pelican
categories:
- rant
feature_link: "https://unsplash.com/photos/gy08FXeM2L4"
feature_text: "Photo by Oskar Yildiz on Unsplash"
---
E sono passato a Hugo da Pelican perchè Pelican non mi soddisfa.
Dopo un po' di utilizzo di Pelican ho deciso di prendere e fare due cose a modo mio perchè non mi piacciono o non supportate: una risistema al tema che è vermente una mostrosità di codice e la gestione delle categorie
<!-- more -->
### Problemi personali
Perchè ho deciso di cambiare? Perchè ci sono due cose che sento strette:
- La strutturazione del layout, che sento stretta e strutturata in modo "sbagliato"
- L'impossibilità di avere multiple _category_ per un singolo post senza implementare io stesso un plugin
A questi si aggiunge che non sono mai riuscito a far funzionare correttamente la configurazione che obbliga a renderizzare solo i post "passati" e non "futuri" am credo che questo sia un problema mio.
### La scelta
Ho scelto Hugo rispetto a Jekyll in quanto non ho interesse a lavorare in Ruby ma, invece, sono incuriosito a lavorare in GoLang (linguaggio in cui è interamente scritto Hugo) e me ne hanno parlato molto bene.
Leggendo anche in giro non mi è sembrava particolarmente difficile la conversione Pelican -> Hugo per cui ho dato una occhiata a come eseguirla.
Per avere un blog di Hugo devi avere:
1. Una "installazione" aggiornata di Hugo
2. Uno spazio web dove poterti connettere
3. Un tema per Hugo
### Realizzazione
Scelto il generatore statico di siti è stata la volta di implementareil resto del sito.
#### Installazione
L'installazione di Hugo è la cosa più semplice. Scarichi dal [sito](https://gohugo.io/) e segui le istruzioni per installarlo nel sistema operativo che si possiede.
Una volta installato è stato possibile utilizzare comandi di Hugo da terminale costruendo così lo scheletro del tema e della struttura del blog.
#### Contenuto
Bisogna convertire tutto il contenuto in un formato conpatibile con Hugo. Per mia fortuna il formato è sempre un _Markdown_ per i contenuti mentre uso il formato Toml per i metadata. Hugo supporta anche altri formati per i metadata ma quello in cui mi trovo meglio è il Toml e di conseguenza ho modificato (a mano) tutti i post e le pagine per farli funzionare col nuovo sistema.
#### Tema
Per il porting del sito è stato necessario fare il porting del tema in Hugo da Pelican o usare uno dei temi disponibili online.
Ho quindi deciso di prendere i css e i js del tema pelican e riscriverlo per Hugo. E' stato retalivamente facile una volta capito il sistema di temi di GoLang che risulta diverso da [Jinja](http://jinja.pocoo.org/), che è il sistema utilizzato da Pelican.
#### Publicazione
Fatto questo ho portato tutto su GitLab dove ho configurato il settaggio per la compilazione automatica in modo da porter pushare i file e lui pensa a ricompilare tutti il sito.
image: publysher/hugo
pages:
script:
- hugo
artifacts:
paths:
- public
only:
- source
Con questa configurazione ogni qual volta viene pushato un commit del branch _source_ lui esegue l'elaborazione del sito nella cartella _public_ che viene a sua volta visualizzata da GitLab come _root_ del sito internet e distribuita online a chiunque richieda la pagina.
#### HTTPS
Ho utilizzato [Let's Encrypt](https://letsencrypt.org/) per generare un certificato per il dominio associato al sito e lo ho caricato su _static/.well-known_ come indicato dal servizio ottenendo così una connessione https configurata per il mio dominio

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB

View File

@@ -0,0 +1,46 @@
---
title: Emacs e mai più mouse
date: 2017-02-14 00:00:00 +0000
tags:
- coding
- rant
slug: emacs-e-mai-piu-mouse
description: Cos'è Emacs e perchè ho iniziato a usarlo e rimosso il mouse dal mio
set per il pc
categories:
- rant
feature_link: "https://unsplash.com/photos/oZMUrWFHOB4"
feature_text: "Photo by Paul Esch-Laurent on Unsplash"
---
E ho iniziato a scrivere con Emacs questo blog. Questo mi porta a essere orgoglioso di dire che questo blog è _mouse free_!
Ok posso capire che per la maggior parte di voi non capirà perchè questo cambiamento è rilevante per me ma, dal mio punto di vista, è un _ENORME_ upgrade tecnico. La possibilità di avere un intero editor di testo personalizzabile, multipiattaforma e completamente open source mi ha sempre particolarmente colpito ma non ho mai trovato uno che lo sentissi mio. Attualmente uso molto Atom ma lo sento molto stretto soprattutto perchè, visto che deve supportare molti linguaggi (e di conseguenza molti plugin), risulta rallentato.
<!--more-->
## Come sono arrivato a questa scelta
Io ho bisogno di un software di editor di testo che avesse determinate funzioni:
* __Multipiattaforma__ in generale preferisco software che sia multipiattaforma e che quindi mi permetta di passare senza problemi da un sistema ad un altro.
* __Completamente configurabile__ permettendomi di trasformare l'ide/editor in esattamente quello di cui ho bisogno.
* __Open Source__ personalmente preferisco software open source a quello a pagamento ma non disdegno software a pagamento.
* __Deve poter supportare tutti i linguaggi che voglio__ questo è il problema più grosso. Se il programma scelto ha un buon sistema di plugin, questo permette anche di avere un buon supporto per un ampio numero di linguaggi attraverso i plugin stessi.
## I candidati alla posizione
Ho esaminato alcuni editor di testo e ho analizzato i loro punti di forza e di debolezza. Questa analisi rimane soggettiva e basata sulle mie personali esigenze e non obbligatoriamente quello che per me è un difetto per altri potrebbe essere un pregio.
* __Atom, Code e Sublime__ Gruppo di editor di testo espandibili ma per me poco pratici: Sublime ha il discorso della licenza da pagare e, da quello che ho visto nella versione di prova, per le mie esigenze non è motivata la spesa. Atom e Code di perse funzionerebbero anche bene ma è il sistema di plugin e i limiti dati da Node.js (esempio il fatto che devi aver installato Node.js e che per alcuni file abbastanza grandi soffrono, senza contare crash non comprensibili) risultano troppo "esigenti" rispetto a quello che necessito a livello di funzionalità. Infatti se sovraccaricati di funzionalità/plugin entrambi gli editor ne risentono molto e molto velocemente.
* __Vim__ Editor testuale tra i più vecchi al mondo. Installato in ogni sistema server esegue egregiamente il suo lavoro ma, dopo una brutta esperienza con lui per un commit, non sarei molto per usarlo.
* __Emacs__ Altro editor testuale molto vecchio, completamente open source risulta molto leggero ed è completamente configurabile conoscendo Lisp e usando i plugin appositi
Oltre a questi ce ne sono molti altri che sono troppo situazionali che non ho nemmeno considerato o perché sono close source che amo.
Da qui mi sono informato sui plugin disponibili per Emacs e, dopo aver visto che c'è​ il plugin per pelican e molti per Python, ora sto imparando a usare Emacs

Binary file not shown.

After

Width:  |  Height:  |  Size: 864 KiB

View File

@@ -0,0 +1,195 @@
---
title: Google IO 2017
date: 2017-05-18 00:00:00 +0000
tags:
- convention
slug: google-io-2017
description: Sono nell'evento del GDG di Venezia a vedermi il Google IO 2017 in compagnia
di altri informatici e interessati.
categories:
- rant
aliases:
- "/blog/google-io-2017/"
---
Sono nell&rsquo;evento del GDG di Venezia a vedermi il <span class="underline">**Google IO 2017**</span> in compagnia di altri informatici e interessati.
Questo è il resoconto dell&rsquo;evento.
# Pre evento<a id="sec-1" name="sec-1"></a>
Stiamo soffiando bolle in attesa dell&rsquo;inizio dell&rsquo;evento. Il <span class="underline">**GDG**</span> fa una piccola presentazione di cos&rsquo;è il <span class="underline">**GDG**</span> e cos&rsquo;è il <span class="underline">**Google IO 2017**</span>.
Tutti siamo in fremente attesa dell&rsquo;evento, anche se la location risulta essere una distrazione.
Il posto è la tesa 94 dell&rsquo;Arsenale di Venezia, ove Google ha una delle sedi del <span class="underline">**Grand Tour d&rsquo;Italia**</span>.
Nell&rsquo;attesa Google ci fa soffiare bolle nel nostro telefono che vengono &ldquo;lanciate&rdquo; dalla nostra posizione e arrivano nei loro enormi contatori che, città dopo città, mostrano i risultati raccolti.
E quindi tutto smette e passiamo a un enorme silenzio&#x2026; E con una delle più fighe animazioni di sempre parte il Google IO 2017.
# Presentazione<a id="sec-2" name="sec-2"></a>
Il Ceo fa il grosso elencando tutti i numeri dei servizi &ldquo;maggiori&rdquo; di Google e i loro successi. Ad esempio Android ha raggiunto i 2 Milioni&#x2026; Come se avessero ancora bisogno di mostrare i muscoli&#x2026;
## Mobile to AI first<a id="sec-2-1" name="sec-2-1"></a>
Tutti i servizi vengono ripensati per l&rsquo;utilizzo di IA. Ad esempio per le mail sono riusciti a renderle discorsive le risposte dell&rsquo;AI in modo da permettere di avere risposte fabbricate al volo per l&rsquo;occasione.
E&rsquo; stato cambiato il sistema di imput, ad esempio Voice, se usato su dispositivi diversi, riconosce comunque la persona che parla e usa le sue impostazioni.
Invece, per il riconoscimento di immagini hanno mostrato quello per parti e sono risusciti a migliorare il riconoscimento superando quello dell&rsquo;uomo.
In oltre sono riusciti a migliorare le foto e rimuovere pattern ripetuti, ad esempio una grata.
## Google Lens<a id="sec-2-2" name="sec-2-2"></a>
Nuovo servizio di Google che utilizza la telecamera. Prima vede il prodotto poi ti dice cos&rsquo;è. Riconosce i locali, i codici a barre delle reti e i fiori (gli allergici fanno i salti mortali dalla giocia).
Tutto sviluppato su AI first Data second, come ormai tutti i servizi Google.
## Cloud TPU<a id="sec-2-3" name="sec-2-3"></a>
Nuovo dispositivo per la costruzione di clasters per il machine lerning. Pensata per l&rsquo;educazione e l&rsquo;inferenza per il machine lerning.
La struttura, essendo stata pensata per il clouster, viene anche portato sul Google Engigne.
Si sta lanciando nel Cloud AI computing commerciale&#x2026; Vuole togliere clienti ad Amazon?
# Google Assistant<a id="sec-3" name="sec-3"></a>
Scott Huffman parla dela semplificazione ottenuta dall&rsquo;assistente che impara quelo che vuoi e te lo presenta, sempre pronto a chiaccherare e sempre pronto a fare discussione.
Sono riusciti a creare un sistema sempre più discirsi che riconoscono la persona con cui parla. Ora è possibile anche collegare il cellulare/tablet via Google Lens che permette di interaggire con l&rsquo;assitente.
In oltre ora il Google Assistent è sisponibile anche sull&rsquo;Iphone e esite un SDK per il Google assistent.
In questo modo le app di terze parti possono sviluppare il loro supporto per l&rsquo;assistant.
Il Google Assitant può gestire creazione degli account, pagamenti e discussioni. Per fortuna i pagamenti passano per l&rsquo;impronta digitale anche se Google ha i tuoi dati delle carte di credito e affini.
# Google Home<a id="sec-4" name="sec-4"></a>
Altro dispositivo che puo&rsquo; essere abbinato al Google Assistant.
Permette di segnalare variazioni del calendario causate dal traffico, segnala notifiche attraverso le luci disposte sopra e permette di fare chiamate attraverso Google gratuitamente verso il Canada e USA.
E riconosce la voce in modo da personalizzare l&rsquo;esperienza utilizzando la configurazione personalizzata abbinata alla voce.
Ora Google Home ha anche una infinità di altri servizi di compagnie video/televisive.
Permette di mandare le informazioni nel dispositivo preindicato una volta richiesto un servizio. Tutti i dispositivi Cromecast.
## Youtube TV<a id="sec-4-1" name="sec-4-1"></a>
Altra alternativa a Netflix&#x2026; Guerra aperta? Non so&rsquo;&#x2026; Ne hanno parlato troppo troppo poco per commenti realmente utili.
# Google Photo<a id="sec-5" name="sec-5"></a>
500 Milioni di utenti per utente al mese. Cavolo, tanti&#x2026;
## Photo sharing<a id="sec-5-1" name="sec-5-1"></a>
Ora Google Photo ti suggerisce a chi condividere le foto&#x2026;
Questo permette di condividere le foto migliori con le persone corrette.
E poi, le persone con cui le condivide, possono aggiungere le proprie foto dell&rsquo;evento.
In questo modo si riesce a creare un insieme di album personalizzati da gruppi di persone.
## Shared Libraries<a id="sec-5-2" name="sec-5-2"></a>
Scelti degli account posso automaticamente condividere con loro le foto che rispondono alla query.
In oltre permette di produrre degli automatismi per catalogare le foto condivise con questo meccanismo.
## Google Photo Books<a id="sec-5-3" name="sec-5-3"></a>
Permette di produrre album fisici di foto scegliendo le migliore e preparandole per la stampa.
Per ora SOLO in America :-(&#x2026;
## Google lens into Google Photo<a id="sec-5-4" name="sec-5-4"></a>
Questo permette di avere le informazioni delle foto e e estrarre da essi i dati.
Mi ricorda una vecchia app di Google&#x2026;
Disponibile verso fine anno su Google Photos.
# Youtube<a id="sec-6" name="sec-6"></a>
Susan Wokcicki presenta le novità per Youtube.
Parte tutto dal bilione di utenti al mese che vedono i video.
Più di un bilione di ore di video guardate al giorno.
Ora la maggior parte delle visualizzazioni è da mobile ma la visione dell&rsquo;aumento delle visualizzazioni viene dai televisori attraverso l&rsquo;assistant.
## Youtube on Tv<a id="sec-6-1" name="sec-6-1"></a>
Aumentato il servizio nella TV con l&rsquo;aggiunta dei video 360° controllabile col telecomando.
Questo è valido anche per alcune console e altre piattaforme che possono essere connesse alla TV.
## Super chat<a id="sec-6-2" name="sec-6-2"></a>
Possono essere fatte dei messaggi colorati/personalizzati pagando una piccola cifra che viene, in parte, donata allo streamer.
Disponibile anche una APi per la SuperApi per ottenere azioni nel mondo reale&#x2026;
# Android<a id="sec-7" name="sec-7"></a>
Dave Burke presenta la parte di Android.
2 bilioni di dispositivi attivi al mese con Andoroid.
Questo comprende auto, chromebook, orologi e televisioni.
Installate 82 Bilioni di app finora.
Ora è stato aggiunto un sistema <span class="underline">**Picture in picture**</span> dove mi permette di ridurre in un angolo una view.
Aggiunte le notivication dots che indicano un aumento/attività della app e permette di vedere la notifica tenendoci il dito sopra.
Ora è disponibile avere l&rsquo;autofill di Chrome nelle mie app. Personalizzabile dagli sviluppatori.
Aggiunto un smart text selector che permette di riconoscere il testo che stai selezionando in modo da avere tutto il dato compesso (indirizzo, nomi lunghi, numeri di telefono e email) collegato.
## Tenserflow Lite<a id="sec-7-1" name="sec-7-1"></a>
Permette di creare reti neuronali per app e permette di utilizzare la nuova api del nuovo framework per potenziare questo lavoro.
## Vitals<a id="sec-7-2" name="sec-7-2"></a>
Linea della Google per migliorare la sicurezza, OS migliorie e miglioramento dello sviluppo.
Automatico controllo delle app installati.
Ridotto il tempo di avvio delle app e del sistema operativo.
Possibile aggiungere nuovi vincoli per le app in background.
Aggiunti servizi di controllo su Android Studio.
### Google Play Protect<a id="sec-7-2-1" name="sec-7-2-1"></a>
Permette di scansionare tutte le app del dispositivo e trovare quelle a rischio.
### Play Console Dashboard<a id="sec-7-2-2" name="sec-7-2-2"></a>
Per ogni Issiue ci fa una analisi dei problemi e come correggerli.
### Kotlin<a id="sec-7-2-3" name="sec-7-2-3"></a>
Linguaggio nuovo per lo sviluppo andorid
## Andorid GO<a id="sec-7-3" name="sec-7-3"></a>
Riscrittura di andorid, app e playstore.
Ottimizzato tutto il core e le app in modo di poter girare con memories piccole.
VIene in automatico attivato il save data in alcune app conosciute per il &ldquo;peso&rdquo;.
Aggiunte api per Bilding for Billions per avere un menù per app nel menù personalizzato di app ottimizzate.
### Youtube Go<a id="sec-7-3-1" name="sec-7-3-1"></a>
Youtube per connessioni con pochi dati. In oltre permette di salvare i dati del video e condividerli con un servizio integrato di peer to peer.
# VR<a id="sec-8" name="sec-8"></a>
## Daydream<a id="sec-8-1" name="sec-8-1"></a>
Aumento dei servizi che supportano DayDream.
## Sandalone<a id="sec-8-2" name="sec-8-2"></a>
Prodotto da ditte terze completi senza bisogno di altri dispositivi. Pensato completamente per VR permette una ottivizzazione del dispositivo e i sensori al suo interno.
# AR<a id="sec-9" name="sec-9"></a>
## Seconda generazione di Cellulare Tango<a id="sec-9-1" name="sec-9-1"></a>
Più piccoli e conpatti.
## Supporto con Google Maps<a id="sec-9-2" name="sec-9-2"></a>
Cerca immagini intorno a te (Google Visual Positional System) che permette di trovare le indicazioni di movimento in un area.
Permette, in oltre, di analizzare il mondo che ti circonda e ottenere posizioni reali di oggetti.
## Aggiunto AR to Expeditions<a id="sec-9-3" name="sec-9-3"></a>
Permette di aggiungere un oggetto 3d nella classe e di navigare all&rsquo;interno dello stesso.
# Google for Jobs<a id="sec-10" name="sec-10"></a>
Progetto per connettere persone e ditte per permettere di trovare lavoro più velocemente attraverso il machine learning.
Ora il cerca permette di trovare lavori on il tag &ldquo;retail jobs&rdquo;.
Negli Usa nelle prossime settimane.
# Tensorflow Opensource<a id="sec-11" name="sec-11"></a>
Enormemente contenti dal successo del repository di Tensorflow.

Binary file not shown.

After

Width:  |  Height:  |  Size: 666 KiB

View File

@@ -0,0 +1,32 @@
---
title: Grumpy, come convertire il serpente nel gopher
date: 2017-01-26 00:00:00 +0000
tags:
- python
- coding
slug: grumpy-come-convertire-il-serpente-nel-gopher
description: Cos'è Grumpy e come la penso su questo progetto di Google e le sue conseguenze
categories:
- rant
feature_link: "https://unsplash.com/photos/ICW6QYOcdlg"
feature_text: "Photo by Marius Masalar on Unsplash"
---
Io sono un pythonista che cerca di rimanere informato di quello che succede nel mondo di Python e quello che fanno alcune aziende particolarmente grosse o di mio interesse.
Quindi quando ho visto che Google lancia Grumpy in un articolo nel loro [blog](https://opensource.googleblog.com/2017/01/grumpy-go-running-python.html) non potevo che essere incuriosito e interessato ad avere ancora più notizie sul questo progetto. E, grazie ad un podcast che ascolto ho avuto ancora più notizie.
Io sono iscritto al podcast [Talk Python](https://talkpython.fm/) dove in un [episodio](https://talkpython.fm/episodes/show/95/grumpy-running-python-on-go) è stato intervistato Dylan Trotter, Ingegniere Youtube e un entusiasta di GoLang.
<!--more-->
Questa intervista mi ha permesso approfondire questo progetto che mi incuriosiva molto.
[Grumpy](https://github.com/google/grumpy) è un compilatore source-to-source ovvero un software che, dato del codice in un linguaggio, lo converte in un altro linguaggio di programmazione, con un compilatore che lo compila e esegue.
Personalmente lo trovo molto interessante perchè mappa alcune strutture Python (dico alcune in quanto il 70%-80% delle strutture di Python sono state "mappate" da Grumpy ma non ancora tutte) vengono transposte in GoLang, ottenendo così le ottimizzazioni di GoLang per quanto riguarda i processi concorrenti e alcune strutture, oltre a un tempo migliore in quanto non sarebbe più codice interpretato ma eseguito.
La cosa che, però, a me interessa di più è capire perchè Google ha spinto in questa direzione e qui mi viene in aiuto il podcast di TalkPython: Google, il motore di ricerca e YouTube, il front end per lo meno, sono interamente gestiti da codice Python 2.7.x.
Infatti Google vuole sostituire tutto il codice Python 2.7.x (definito legacy code) con una versione più "nuova e performante" per mantenere il sistema performante e sempre al massimo della potenza. Per questa ragione potrebbe, in futuro, convertire alcune componenti da Python 2.7.x (notare bene che, per ora, Grumpy non supporta la conversione di Python 3.x) in GoLang in modo automatico per semplificare e velocizzare il lavoro. Questo mostra, anche, una grossa intenzione di abbandonare Python 2.7.x (NB: non è possibile fare assunzioni su Python 3.x da Grumpy) in favore di altri linguaggi più moderni/efficaci/adatti al sistema immenso di cluster che Google deve gestire.
Per questo motivo io inizierò a sperimentare con Grumpy per capirne i limiti e i vantaggi rispetto a un CPyhton o Jython e a fare più attenzioni alle librerie per GoLang rilasciate da Google.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@@ -0,0 +1,147 @@
---
date: 2017-05-16 12:27:11 +0200
tags:
- docker
- hugo
- blog
title: Hugo into Docker
categories:
- dev
description: This blog is publish with a docker image with GitLab. But I don't like the image I was using because wasn't update and it's big and havy. So I fork the project for create an update version for my personal blog.
slug: hugo-into-docker
feature_link: "https://unsplash.com/photos/RvPDe41lYBA"
feature_text: "Photo by Grovemade on Unsplash"
---
This blog is publish with a docker image with GitLab. But I don't like the image I was using because wasn't update and it's big and havy. So I fork the project for create an update version for my personal blog.
<!--more-->
![docker logo](docker.png)
So I started with updating the old docker image I was using this image
{{< highlight docker>}}
FROM debian:wheezy
MAINTAINER yigal@publysher.nl
# Install pygments (for syntax highlighting)
RUN apt-get -qq update \
&& DEBIAN_FRONTEND=noninteractive apt-get -qq install -y --no-install-recommends python-pygments git ca-certificates \
&& rm -rf /var/lib/apt/lists/*
# Download and install hugo
ENV HUGO_VERSION 0.20.6
ENV HUGO_BINARY hugo_${HUGO_VERSION}-64bit.deb
ADD https://github.com/spf13/hugo/releases/download/v${HUGO_VERSION}/${HUGO_BINARY} /tmp/hugo.deb
RUN dpkg -i /tmp/hugo.deb \
&& rm /tmp/hugo.deb
# Create working directory
RUN mkdir /usr/share/blog
WORKDIR /usr/share/blog
# Expose default hugo port
EXPOSE 1313
# Automatically build site
ONBUILD ADD site/ /usr/share/blog
ONBUILD RUN hugo -d /usr/share/nginx/html/
# By default, serve site
ENV HUGO_BASE_URL http://localhost:1313
CMD hugo server -b ${HUGO_BASE_URL} --bind=0.0.0.0
{{< / highlight >}}
So I build an image of this container and it was 171 MB in my machine.
But I can do better than this because i can use _*alpine*_ in the place of _*debian:wheezy*_.
I do this because the image for _*debian*_ is bigger than the image for _*alpine*_. But if I will use _*alpine*_ I need to change somethings because I can't install _*.deb*_ into the image. So i use the binary of Hugo for Linux find on Github. And install it on the image
{{< highlight docker "hl_lines=8 15-17" >}}
FROM alpine
LABEL maintainer "fundor333@gmail.com"
# Download and install hugo
ENV HUGO_VERSION 0.20.6
ENV HUGO_DIRECTORY hugo_${HUGO_VERSION}_Linux-64bit
ENV HUGO_BINARY ${HUGO_DIRECTORY}.tar.gz
# Install HUGO
RUN set -x
RUN apk add --update wget ca-certificates
RUN wget https://github.com/spf13/hugo/releases/download/v${HUGO_VERSION}/${HUGO_BINARY}
RUN tar xzf ${HUGO_BINARY}
RUN rm -r ${HUGO_BINARY}
RUN mv hugo /usr/bin/hugo
RUN rm -r LICENSE.md
RUN rm -r README.md
RUN apk del wget ca-certificates
RUN rm /var/cache/apk/*
# Create working directory
RUN mkdir /usr/share/blog
WORKDIR /usr/share/blog
# Expose default hugo port
EXPOSE 1313
# Automatically build site
ONBUILD ADD site/ /usr/share/blog
ONBUILD RUN hugo -d /usr/share/nginx/html/
# By default, serve site
ENV HUGO_BASE_URL http://localhost:1313
CMD hugo server -b ${HUGO_BASE_URL} --bind=0.0.0.0
{{< / highlight >}}
This time the size was 33,5 MB. Good but i can do BETTER.
Whenever you wrote a new line with _*RUN*_ you make the "compiled" into another _*layer*_ so, if you have 22 command (like me) you have 22 layer for the image
{{< highlight docker "hl_lines=8 15-17" >}}
FROM alpine
LABEL maintainer "fundor333@gmail.com"
# Download and install hugo
ENV HUGO_VERSION 0.20.6
ENV HUGO_DIRECTORY hugo_${HUGO_VERSION}_Linux-64bit
ENV HUGO_BINARY ${HUGO_DIRECTORY}.tar.gz
# Install HUGO
RUN set -x && \
apk add --update wget ca-certificates && \
wget https://github.com/spf13/hugo/releases/download/v${HUGO_VERSION}/${HUGO_BINARY} && \
tar xzf ${HUGO_BINARY} && \
rm -r ${HUGO_BINARY} && \
mv hugo /usr/bin/hugo && \
rm -r LICENSE.md && \
rm -r README.md && \
apk del wget ca-certificates && \
rm /var/cache/apk/*
# Create working directory
RUN mkdir /usr/share/blog
WORKDIR /usr/share/blog
# Expose default hugo port
EXPOSE 1313
# Automatically build site
ONBUILD ADD site/ /usr/share/blog
ONBUILD RUN hugo -d /usr/share/nginx/html/
# By default, serve site
ENV HUGO_BASE_URL http://localhost:1313
CMD hugo server -b ${HUGO_BASE_URL} --bind=0.0.0.0
{{< / highlight >}}
Size 3,99 MB in this case.
The maggior part of the total size is caused by the size of the _*Hugo*_ binary itself so I cann't make an image _*lighter*_ than the binary.
Now the image size and number layers can change update after update so I put this image with the allwayes data about the images.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 MiB

View File

@@ -0,0 +1,150 @@
---
title: Il primo periodo con Emacs
date: 2017-04-21 00:00:00 +0000
slug: il-primo-periodo-con-emacs
tags:
- rant
categories:
- dev
description: Diario del mio primo periodo di utilizzo di Emacs
aliases:
- "/dev/il-primo-periodo-con-emacs/"
feature_link: "https://unsplash.com/photos/xf6_UOfnwLw"
feature_text: "Photo by Joshua Oluwagbemiga on Unsplash"
---
Ho iniziato a utilizzare Emacs in modo sempre più completo, dai piccoli file a quelli sempre più grossi fino usarlo come editor unico.
La parte più difficile è stata la parte iniziale dove sono dovuto entrare nella mentalità di Emacs ovvero quando ho dovuto imparare a lavorare su buffer e windows.
<!-- more-->
Da questo punto di vista il tutorial dentro emacs è un ottimo punto di partenza e ambiente ove testare e provare i comandi su un documento "bloccato e non danneggiabile".
Questo primo periodo di utilizzo mi ha permesso di vedere che è un programma completo e molto efficente. In modo particolare ho addirittura iniziato a sviluppare una prima bozza di personalizzazione del mio Emacs attraverso una prima configurazione di _.emacs.d/_ disponibile su [Github](https://github.com/fundor333/emacs.d).
## Prima fase installazione di base
Partiamo con ordine: si inizia con l'installazione e comprensione dei config.
Dopo l'installazione ottenuta attravero il classico
{{< highlight bash "hl_lines=8 15-17" >}}
sudo apt-get install emacs
{{< / highlight >}}
Fatto questo io mi aspettavo che, dopo il primo avvio generasse i file di configurazione. Per come è stato programmato Emacs l'avvio genera solamente il file _.emacs_ se non presente mentre tutto il resto della "struttura" viene generata man mano che si modificano le impostazioni dei singoli elementi.
Quindi ho fatto una piccola ricerca di come cambiare il tema di Emacs che, a mio parere, puo' essere la personalizzazione corretta per iniziare a utilizzare Emacs.
All'avvio Emacs cerca un file _.emacs_ ove dovrebbe trovare i config e, nel caso non lo trovi, va a _.emacs.d/init.el_ ove cerca i config e, nel caso non trova nessuno dei due, genera un file _.emacs_ vuoto o con le configurazioni delle "sessione" corrente. E qui c'è il primo punto di interesse:
## Conviene usare _.emacs_ o _.emacs.d/init.el_?
Per le configurazioni in _Emacs_ ci sono due possibili impostazioni:
* **Impostazione storica** che utilizza _.emacs_ per mettere tutte le configurazioni
* **Impostazione a progetto** che utilizza _.emacs.d/init.el_
La versione storica ha il vantaggio di essere facilmente "condivisa" essendo un unico file ma la versione a progetto ti permette di realizzare un sistema più ordinato di configurazioni e permette di usare sistemi di versioning (nel mio caso git) per ordinare e gestire un backup o comunque un sistema di condivisione delle config.
## La mia configurazione in particolare
Ho impostato Emacs utilizzando una impostazione a progetto, in modo da poterlo condividere facilmente su GitHub o altri servizi di hosting per repository git.
Di base utilizzo _init.el_ ove ho settato le basi e il tema, in modo che sia caricato senza problemi
{{< highlight lisp>}}
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes")
(load "~/.emacs.d/init-packages")
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(custom-enabled-themes (quote (dracula)))
'(custom-safe-themes
(quote
("b97a01622103266c1a26a032567e02d920b2c697ff69d40b7d9956821ab666cc" default))))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
{{< / highlight >}}
Con questa configurazione si divide le variabili di ambiente settate da Emacs (che devo ancora capira a cosa servano), il tema scelto ([Dracula](https://draculatheme.com/emacs) in questo caso) e i settaggi per i pacchetti che vengono definiti nel file _init-packages.el_.
{{< highlight lisp >}}
(require 'package)
(add-to-list 'package-archives
'("elpy" . "http://jorgenschaefer.github.io/packages/"))
(add-to-list 'package-archives
'("marmalade" . "http://marmalade-repo.org/packages/"))
(add-to-list 'package-archives
'("melpa-stable" . "http://melpa-stable.milkbox.net/packages/") t)
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/package/")t)
(add-to-list 'load-path "~/.emacs.d/site-lisp/")
; list the packages you want
(setq package-list
'(magit easy-hugo python dracula-theme))
; activate all the packages
(package-initialize)
; fetch the list of packages available
(unless package-archive-contents
(package-refresh-contents))
; install the missing packages
(dolist (package package-list)
(unless (package-installed-p package)
(package-install package)))
(when (< emacs-major-version 24)
;; For important compatibility libraries like cl-lib
(add-to-list 'package-archives '("gnu" . "https://elpa.gnu.org/packages/")))
(package-initialize)
{{< / highlight >}}
Questo script in Lisp permette di elencare nella prima parte tutta una serie di repository extra da aggiungere all'elenco dei plugin disponibili e li aggiunge all'elenco di Emacs.
{{< highlight lisp "hl_lines=8 15-17" >}}
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/package/")t)
{{< / highlight >}}
Ad esempio questo codice aggiunge il repository [Melpa](https://melpa.org/) all'archivio in modo da rendere disponibili i suoi pacchetti a Emacs.
{{< highlight lisp "hl_lines=8 15-17" >}}
(setq package-list
'(magit easy-hugo python dracula-theme))
{{< / highlight >}}
Questo comando invece permette di elencare i pacchetti di nostro interesse. Ogni pacchetto elencato verrà installato o aggirnato e successivamente attivato all'avvio del server Emacs
{{< highlight lisp "hl_lines=8 15-17" >}}
; install the missing packages
(dolist (package package-list)
(unless (package-installed-p package)
(package-install package)))
{{< / highlight >}}
Questo è infatti il codice per l'installazione dei pacchetti mancanti.
Con questa configurazione e l'aggiunta di un _.gitignore_ abbastanza pulito mi è possibile mantenere una versione di ripristino dell'ambiente di lavoro Emacs compatibile con ogni sistema operativo che supporta Emacs.
Questa è la mia prima esperienza con Emacs e ne sono entusiasta anche se devo ancora consultare appunti per certi shortcut ma credo che andando avanti non ne avrò di bisogno.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

@@ -0,0 +1,94 @@
---
title: Jupyter Notebook Pelican Combo
tags:
- coding
date: 2017-02-14 00:00:00 +0000
slug: jupyter-notebook-pelican-combo
categories:
- dev
description: Come ho combinato Jupyter con questo blog in Pelican
feature_link: "https://unsplash.com/photos/VSNoQdimlQQ"
feature_text: "Photo by Zahrin Lukman on Unsplash"
---
Si sta avvicinando il **Pycon 8** e io ci parteciperò. Questo vuol dire che ho raccolto i soldi e sto preparando la strumentazione necessaria per quest' anno.
Visto quello che è successo l'anno scorso ho deciso di preinstallate Jupyter e essere pronto a fare degli appunti direttamente in notebook. Per questo ho cercato un sistema per convertirli in markdown, così da usarli anche nel blog, o farli leggere direttamente da Pelican e ho fatto una stupenda scoperta: esiste già questo plugin.
<!--more-->
Per rendererizzare i file _.ipynb_ è necessario aver installato il plugin _pelican-ipynb_ e settato i metadati del _.ipynb_ coi i metadata corretti:
* _Title_ titolo del post
* _Slug_ indirizzo del post
* _Date_ data di publicazione del post
* _Category_ categoria del post
* _Tags_ tag del post
* _Author_ autore del post
* _Summary_ riassunto del post
e settare i tipi di markup supportato con
{{< highlight python "hl_lines=8 15-17" >}}
MARKUP = ('md', 'ipynb')
{{< / highlight >}}
facendoli vedere così i file _.ipynb_ come file da eseguire e visualizzare come post.
L'unico difetto di questo plugin è che che non supporta, _per ora_, il metadata _Status_.
# E quindi funziona?
E si arriva alla domanda fondamentale: "Funziona?" La risposta è si, funziona.
```python
print('Hello world!')
```
Hello world!
Come vedete nel blocco di codice sopra è funzionante e permette di fare tutto quello che normalmente faresti con Jupyter.
```python
columnA = ['Temporary','Intermittant','Partial','Redundant','Total',
'Multiplexed','Inherent','Duplicated','Dual-Homed','Synchronous',
'Bidirectional','Serial','Asynchronous','Multiple','Replicated',
'Non-Replicated','Unregistered','Non-Specific','Generic','Migrated',
'Localised','Resignalled','Dereferenced','Nullified','Aborted','Serious',
'Minor','Major','Extraneous','Illegal','Insufficient','Viral',
'Unsupported','Outmoded','Legacy','Permanent','Invalid','Deprecated',
'Virtual','Unreportable','Undetermined','Undiagnosable','Unfiltered',
'Static','Dynamic','Delayed','Immediate','Nonfatal','Fatal','Non-Valid',
'Unvalidated','Non-Static','Unreplicatable','Non-Serious']
columnB = ['Array','Systems','Hardware','Software','Firmware','Backplane',
'Logic-Subsystem','Integrity','Subsystem','Memory','Comms','Integrity',
'Checksum','Protocol','Parity','Bus','Timing','Synchronisation','Topology',
'Transmission','Reception','Stack','Framing','Code','Programming',
'Peripheral','Environmental','Loading','Operation','Parameter','Syntax',
'Initialisation','Execution','Resource','Encryption','Decryption','File',
'Precondition','Authentication','Paging','Swapfile','Service','Gateway',
'Request','Proxy','Media','Registry','Configuration','Metadata',
'Streaming','Retrieval','Installation','Library','Handler']
columnC = ['Interruption','Destabilisation','Destruction','Desynchronisation',
'Failure','Dereferencing','Overflow','Underflow','NMI','Interrupt',
'Corruption','Anomaly','Seizure','Override','Reclock','Rejection',
'Invalidation','Halt','Exhaustion','Infection','Incompatibility',
'Timeout','Expiry','Unavailability','Bug','Condition','Crash','Dump',
'Crashdump','Stackdump','Problem','Lockout']
columnD = ['Error','Problem','Warning','Signal','Flag']
```
```python
from random import randint
bofhExcuse = columnA[randint(0,len(columnA)-1)]+' '
bofhExcuse += columnB[randint(0,len(columnB)-1)]+' '
bofhExcuse += columnC[randint(0,len(columnC)-1)]+' '
if(randint(0,100) > 80):
bofhExcuse += columnD[randint(0,len(columnD)-1)]
print 'Today\'s issue is: '+bofhExcuse
```
Today's issue is: Duplicated Proxy Overflow

Binary file not shown.

After

Width:  |  Height:  |  Size: 916 KiB

View File

@@ -0,0 +1,74 @@
---
title: Pipenv e come tutto è in uno
slug: pipenv-e-come-tutto-e-in-uno
date: 2017-07-01 00:00:00 +0000
categories:
- dev
tags:
- python
- coding
aliases:
- "/dev/pipenv-e-come-tutto-e-in-uno/"
description: Assistiamo al matrimonio di Pipfile, Pip e PipEnv
feature_link: "https://unsplash.com/photos/vYFcHzLYpmU"
feature_text: "Photo by Max Letek on Unsplash"
---
Io sono un appassionato di podcast. Mi piace ascoltarli quando vado in giro e quando vado in palestra. E uno di questi è quello di [Kenneth Reitz](https://www.kennethreitz.org/), autore di svariati moduli python tra cui _Requests_ che tutti i pythonisti conoscono e usano.
L'ultimo progetto suo di mio interesse è PipEnv, _sacro matrimonio di pipfile, pip e virtualenv_.
Partiamo dalla base: per fare un progetto python solitamente si passano 3 fasi obligatorie
* Si crea un _virtualenv_ su cui lavorare, in cui i pacchetti installati non vanno in conflitto con quelli nel sistema ottenendo così un ambiente pulito su cui lavorare
* Si fa una selezione dei moduli necessari per il progetto e li si installa nel _virtualenv_ attraverso _pip_
* Si produce dal _virtualenv_ un file di _requirements.txt_ che indica cosa è installato
Questo porta a dover tenere sempre aggiornato e pulito il _virtualenv_, sempre aggiornato il file _requirements.txt_ e fissare le versioni minime richieste (o addirittura la versione stessa) del modulo nel _requirements.txt_.
PipEnv di conseguenza fa tutto questo per te con pochi e semplici comandi.
## Ad esempio?
Mettiamo caso che io debba creare uno script in python che mi recuperi dei feed rss e me li salvi in locale.
* Creo una cartella per il progetto, in modo da metterci tutto quello di cui ho bisogno
mkdir progetto_python
* Scelgo che versione di python usare, se quella corrente o quella _legacy_
pipenv --three #versione corrente di python 3.x
# alternativamente
pipenv --two #legacy 2.7.x
* Inizio a scrivere codice e a installare pacchetti necessari per il progetto
pipenv install request
pipenv install flask
Questi comandi assieme a quello iniziale, mi permette di creare un _pipfile_ che descrive i moduli da me installati. La cosa più bella di questo _pipfile_ è che permette di avere più "ambienti" indicati nello stesso file. Questo significa che posso avere "testing", "travis", "dev" e "prod" tutti descritti in un unico file e gestiti in modo automatico.
Quindi mi accordo che _flask_ non mi serve più perchè ho riscritto tutto in modo da non usarlo e rendere in codice più leggibile... Quindi cosa faccio?
pipenv uninstall flask
Questo comando elimina dal _pipfile_ flask rendendolo così "pulito" e sempre aggiornato.
Una volta definito il _pipfile_ bisogna creare il _pipfile.lock_, ovvero una versione automatica, generata dall' "installazione corrente" in modo da riprodurre perfettamente l'ambiente.
pipenv lock
Questo fissa i moduli installati con versione, hash e altri dati sia per i pacchetti indicati sia che con le loro dipendenze, in modo da ottenere tutte le indicazioni per riprodurre quel esatto ambiente.
# Tutto qui?
No, il sistema crea all'inizio un _virtualenv_ per il progetto e lo popola secondo le indicazioni passate dal terminale.
Questo ambiente virtuale è accessibile attraverso il comando
pipenv shell
che apre una shell nel _virtualenv_ del progetto e permette di eseguire comandi nella stessa _virtualenv_.
In oltre _PipEnv_ permette di convertire, se non presenti, i _requirements.txt_ in _pipfile_ e di aggiornare tutti i pacchetti attraverso
pipenv update
## Conclusione
Personalmente spero che questo sistema, o per lo meno _pipfile_, diventi lo standard per lo sviluppo di applicazioni python e soppianti i file _requirements.txt_ che trovo particolarmente poco pratici e troppo sintetici anche se fanno esattamente quello per cui sono stati pensati

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 KiB

View File

@@ -0,0 +1,57 @@
---
title: Scrivi, push e publica
date: 2017-01-14 00:00:00 +0000
tags:
- rant
- git
slug: scrivi-push-public
categories:
- dev
description: Come scrivere un blog interamente in pelican, gestito in github e travis
con autopubblicazioni
aliases:
- "/dev/scrivi-push-public/"
feature_link: "https://unsplash.com/photos/ICW6QYOcdlg"
feature_text: "Photo by Galymzhan Abdugalimov on Unsplash"
---
Ho riscritto interamente il blog. Ora gira tutto in Python... Anche se nel server è tutto in HTML5.
Questo perchè sento la necessità di legarmi a una tecnologia più elastica e a me congeniale rispetto a PHP. Prima infatti tutto il blog era basato su wordpress ma, cercando di sviluppare un tema per il blog non ero convinto.
Così sono passato da un blog dinamico a uno statico.
Come mi hanno detto una volta, le storie miglioni non hanno un inizio, si parte già al centro dell'azione e questo è quello che è successo: io stavo scrivendo un layout html per questo blog ma non ero soddisfatto di dover utilizzare PHP come linguaggio di composizione delle pagine. E' qui che ho iniziato a farmi idee su come potermi sganciare da wordpress e PHP verso qualcosa di più _nel mio stile_ più _mio_. Qui è quando ho visto un blog che seguo da tempo nel mio aggregatore di RSS, il blog di [Eevee](https://eev.ee/). E' un blog di questo programmatore che seguo da un po' appassionato di Python e gaming, con una _leggera_ passione per i PokeMon.
Qui avevo notato che, nel footer, c'era l'avviso che il blog è stato realizzato in Python ma con un "_web framework_" che non conoscevo, [Pelican](http://docs.getpelican.com/en/stable/#).
Dopo una prima analisi della documentazione mi rendo conto che è un generatore di siti statici, ovvero dato qualcosa ritorna un sito HTML completamente costruito dai dati che gli dai in pasto (nel mio caso dati in formato [Markdown](https://it.wikipedia.org/wiki/Markdown)) compreso di post e pagine.
* * *
Questo mi ha portato a realizzare un tema basato sulla sintassi utilizzata dal [Jinja2](http://jinja.pocoo.org/docs/dev/).
## Definizione del tema
Il tema in se non è stato difficile da realizzare, molto css era già pronto da miei precedenti tentativi di realizzare un tema personale ma è stato lungo realizzare tutti i cicli per la visualizzazione corretta di pagine, articoli e link più per una questione di mio gusto artistico che che per un reale problema tecnico/limite di Pelican.
Con l'aiuto di [Bootstrap](http://getbootstrap.com/) mi è anche stato facile realizzare il sito in modo responsive, sistemando così anche questo problema.
## Backup da wordpress
Con l'aiuto di un comando integrato di Pelican è stato possibile importare il vecchio sito wordpress. Questo mi ha permesso di poter mantenere i post del blog vecchio assieme alle pagine. Tutto questo è stato quindi salvato in formato Markdown e suddiviso nelle rispettive directory in base alla categoria e ri-etichettate in base al nuovo sistema utilizzato da Pelican.
_Piccola nota a parte sulla cosa: io mi trovo MOLTO meglio con il sistema di gestione di pagine e articoli di Pelican che quello di Wordpress. Qui io posso aggiungere ai miei post un nuovo meta-dato e creare una corretta visualizzazione del metadato stesso senza andare a toccare Pelican stesso (come avresti dovuto fare con Wordpress)._
## Installazione plugin
Inizialmente io ho pensato di utilizzare la "nuova" funzionalità dei sub-moduli di Git ma questo mi ha portato più problemi che altro.
Dopo svariati tentativi e poca comprensione di perchè continua a essere elaborato male da git e dal mio ide ho pensato che i plugin sono più facili da gestire semplicemente copiandoli in una cartella e aggiornando a mano.
## Sistemazione articoli e pagine
Ho fatto un po' di pulizia perchè il meccanismo di importazione automatica lascia dello "sporco" qui e li sotto forma di codice html/css non più desiderato in alcuni punti (precedentemente era usato da plugin e dal tema di wordpress per fare cosucce ma col passaggio è risultato inutile).
Stessa cosa è successa con le pagine ed è stato più veloce. Sono, per ora, in attesa di revisione e correzione, in modo che siano aggiornate e più coerenti con la grafica del nuovo tema.
## Travis e la autopublicazione
Dopo aver elaborato le pagine e gli altricoli ho quindi preparato il repository github seguendo il paradigma di [Git Flow](http://danielkummer.github.io/git-flow-cheatsheet/) e preparando TravisCI per la autopublicazione degli articoli. Questo mi consente di accedere a un qualunque pc collegato a internet, andare sul sito di github, aggiungere il post o editare parte del sito e travis si occupa dell'elaborazione e di mandarmi il log in caso di fallimento, tutto intermente sul server, senza aver niente installato sul pc che sto usando per scrivere.
Il settaggio di Travis in se mi ha tolto circa un ora di sonno perchè non sono stato in grado di capire alcuni piccoli comandi. Ora però il meccanismo funziona e, grazie alle funzionalità beta di Travis ho avuto una idea...
## Progetti per il futuro
Intanto spero di rilanciare il blog, renderlo più attivo e seguito e poi spero di riuscire a scrivere un piccolo plugin per Pelican ma questa è una storia per un altra volta...

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

@@ -0,0 +1,45 @@
---
title: Utilizzi alternativi di Firebase
slug: utilizzi-alternativi-di-farebase
date: 2017-09-04 00:00:00 +0000
tags:
- coding
- rant
description: Utilizzare le funzionalità di Firebase in modo non 'standard'
categories:
- rant
aliases:
- "/blog/utilizzi-alternativi-di-farebase/"
feature_link: "https://unsplash.com/photos/pKeF6Tt3c08"
feature_text: "Photo by Brendan Church on Unsplash"
---
Uno dei problemi che avevamo al lavoro era quello di controllare un insieme di processi remoti. Quando hai un applicativo gestionale che deve visualizzare in breve tempo i dati all'utente senza rallentare mai la visualizzazione, devi avere alcune componenti/operazioni che lavorano in asincrono rispetto alla parte di I/O dell'utente.
Questo obbliga ad avere file di log nella macchina che sta eseguendo il task asincrono e dover leggere da quello l'esecuzione del processo nel caso io voglia vedere come sta andando il alvoro. Questo non sarebbe un problema se ci fosse solo una macchina che svolgie i processi asincroni ma ce ne sono due sempre in funzione che permettono di alleggarire il carico di lavoro e accellerarlo quanto basta per non creare code di task.
Questo ci porta alla necessità di avere una "dashboard/console/roba" che ci permetta di vedere in tempo reale l'andamento dei processi e, nel caso abbiano errori, identificare quale processo si è interrotto.
_NB_ Questo non è un tutorial completo in quanto non porto un esempio di codice in un linguaggio specifico in quanto può essere implementato con tutti i linguaggi di programmazione e di scripting
# Prima fase: strutturare il db
Come prima fase devo andare su [Firebase](https://firebase.google.com/) e creare un progetto in modo da ottenere così un database in tempo reale su cui è possibile leggere e scrivere.
Una volta ottenuto il db, io creo un file json di prova dove inserisco tutti i tipi di task asincroni che posso lanciare e controllo che non ci siano sovrapposizioni di chiavi, in modo da avere il database ad oggetti diviso in parti corrispondenti ai task o gruppi di task.
Non lo faccio direttamente sul db ma su un file apparte perchè se un elemento di firebase non contiene niente viene eliminato dal db stesso, rendendo così inutilizzabile la struttura del db se ho bisogno di un riferimento al risultato per lo sviluppo.
# Seconda fase: preparare il doppio logger
Sovrascrivo la funzione che utilizzo per fare logging in modo che ogni qualvolta scrive nel file di logging, scrive anche nel campo Firebase associato, ottenendo così un hub di tutti i log dei processi asincroni.
Quindi faccio in modo che, quando il processo termina con sucesso, cancella i dati di quel processo da firebase ottenendo così un elenco di solo processi attivi dentro firebase.
Per come è strutturato il resto del codice, il progetto, se il processo asincrono non va a buon fine, non termina il processo e non cancella la voce dentro firebase. Questo mi permette di recuperare i dati di esecuzione di quella task e di lanciarla su un ambiente controllato dove viene poi fatto il debug del problema.
# Terza fase: costruire la visualizzazione
Con HTML e JS è stato possibile creare una pagina statica che mi visualizza i dati dei task asincroni e del loro avanzamento, dividendoli per categorie e ordinadoli in tempo di avvio. Questo punto si puo' anche saltare in quanto è possibile usare la dashboard di firebase stessa per avere lo stesso risultato con meno personalizzazione.
Spero che questo articolo ti sia stato utile e, se vuoi qualche info in più ovuoi condividere la tua esperienza, commenta pure

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

View File

@@ -0,0 +1,34 @@
---
title: E Talk Al Pycon9
date: 2018-02-12 00:00:00 +0000
tags:
- convention
- pycon
- python
- rant
slug: e-talk-al-pycon9
description: E vado a parlare al Pycon9 per colpa di questo blog, della mia piccola
passione per i generatori di siti statici e di un certo informatico
categories:
- rant
feature_link: "https://unsplash.com/photos/C4G18Paw0d4"
feature_text: "Photo by Daniil Kuželev on Unsplash"
---
E per caso mi ritrovo a dover parlare al Pycon... E ovviamente voglio complicarmi la vita perchè se non faccio le cose in modo facile non mi diverto a sufficienza.
Facciamo un po' di ordine:
* Ho un blog gestito attraverso un *generatore di siti statici*
* Passo spesso tra *Pelican* e *Hugo* come generatore del blog, in quanto non mi trovo con entrambi
* Ho una passione per il formato file .TeX e per LaTeX
* Voglio partecipare al Pycon9 spendendo poco ma ho "*perso*" la posizione di studente laureandomi
Questo ha portato a combinare tutto in una unica situazione: sono uno degli speaker del Pycon 9 e porterò *Pelican* come talk... E tutto questo in *LaTeX*.
Questo significa che ho fatto sia delle modifiche sul blog che dei nuovi repository su *[Github](https://github.com/fundor333)*. In particolare ho ristutturato l'intero blog con _**Hugo**_ (che va a sostituire *Pelican*) e preparato due nuove sezioni del sito: *eventi* e *talk*.
Appena disponibili queste due sezioni appariranno nel menù in alto per portarvi a un riassunto degli eventi a cui ho partecipato e a cui voglio partecipare (ovviamente con tutti i dettagli e link del caso) e la parte talk dedicata alle mie presentazioni che, con slide e tutto il materiale annesso, verranno postate anche come articolo di questo blog. Questi articoli, di fatto, costituiscono la mia traccia di appunt con qui io tengo il talk e, ovviamente, per il *Pycon9* prendo pesantemente dai miei articoli di comparazione di *Hugo e Pelican* passati, sia da una ricerca che sto facendo personalmente su *Pelican* e il sistema di plugin, vero punto di forza per questo software.
A questo aggiungo anche che ho bruciato la SSD del mio portatile abituale per cui tutto quello che faccio è nel vecchio Mac BookPro che, borbottando, ci mette 3-4 volte tanto a fare tutto e personalmente, non ci sono più abituato.
A presto altri aggiornamenti sulla cosa e nuovi articoli sul blog.

Binary file not shown.

After

Width:  |  Height:  |  Size: 814 KiB

View File

@@ -0,0 +1,50 @@
+++
categories = ["dev", "rant"]
date = "2018-05-03T23:00:00Z"
description = "Racconto della mia esperienza al Pycon 9"
slug = "floppy-pycon-e-generatori-di-siti-statici"
tags = ["pycon", "rant", "convention"]
title = "Floppy, Pycon e generatori di siti statici"
+++
Anche quest'anno sono stato al Pycon italia, raduno di pythonisti ormai arrivato alla nona riiterazione della cosa. Questo però non vuole dire che per me non è stata una nuova esperienza.
Pc, penna e traveler jurnal, questa é la postazione da PyconQuest'anno, infatti, ho fatto svariate cose diverse dal solito:
* ho tenuto un talk
* ho partecipato a una competizione interna
* ho provato il famoso lampredotto "evitando" la PyFiorentina
# Il Talk
## Pelican e i generatori di siti statici
### e come non farci male
Il talk è stato Pelican e i generatori di siti statici ed è stato, secondo me, un successo. Mentre scrivo questo post non ho ancora ricevuto un feedback "ufficiale" dagli organizzatori ma, viste sia le domande durante che dopo il talk, è piaciuto ed è stato interessante.
Nel prossimo futuro ho intenzione di pubblicare un articolo di approfondimento, a seguito del talk e delle domande che ci sono state e di alcune piattaforme scoperte dopo il talk
# La competizione dei floppy
A ogni partecipante alla convention viene dato un floppy disk con l'adesivo con i dati del partecipante e dietro un piccolo QRCode.
{{< tweet matteo_zuccon 987619049029939200 >}}
E' propio quest'ultimo che ha attirato enormemente la mia attenzione sulla cosa e si è rivelata un bell' easter egg.
Infatti il QRCode ha portato a una serie di piccoli enigmi informatici fino al raggiungimento di un gruppo Telegram, ultima tappa della caccia al tesoro.
Personalmente ho trovato divertentissima questa gara e sto già pensando di strutturarla all'interno di questo dominio in qualche parte, devo solo decidere ancora dove...
In ogni caso mi ha permesso di socializzare con alcune persone e di divertirmi in un modo diverso dal solito, con il sottile piacere degli enigmi.
# Il lampredotto
Quest'anno, sia per un discorso economico che per un discorso di tempi, ho deciso di non partecipare alla Pyfiorentina ma andare a caccia di Lampredotto.
Trovato quindi il locale e mangiato il lampredotto ho avuto una idea per un progetto con i GTFS di Google grazie all'autobus che per poco non mi metteva sotto (troppo distratto io dal lampredotto).
Su questo spero di darvi presto aggiornamento.
In generale è stata una bella esperienza con talk molto belli ma ora bisogna pensare al futuro e a che talk portare l'anno prossimo per pagare di meno visto che comunque non ho più la tariffa studenti.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -0,0 +1,70 @@
---
date: 2018-01-16 00:00:00 +0000
tags:
- rest
- api
- graphql
title: GraphQL and working with it
slug: graphql-and-working-with-it
categories:
- dev
aliases:
- "/dev/graphql-and-working-with-it/"
description: 'This is an article about the future of the api: GraphQL. This is the
natural evolution from the REST API and it''s the best thing for request only part
of the data in the API'
feature_link: "https://unsplash.com/photos/MWXKz_o1Ls0"
feature_text: "Photo by Bryan Trogdon on Unsplash"
---
What is a REST API? REST stand for **Representational state transfer** (**REST**) or **RESTful** web services and it's the most used tipe of API you find online.
If I need some data I need to go to the url of the API and go to the _subpath_ of the data I want.
For example if I need some posts from https://jsonplaceholder.typicode.com/ I need to go to https://jsonplaceholder.typicode.com/posts and download all the posts or pass the id in the url like in https://jsonplaceholder.typicode.com/posts/1 or whatever the path is. Some time I will need only fews posta but the api give me all or one so it's can be some heavy lifting for the connection. And I need to know all the url and the params needed for the datas.
This is why Facebook in 2012 develop **[GraphQL](http://graphql.org)**
#What is GraphQL
![graphql logo](graphql.png)
**GraphQL** is a data query language which request a knowledge about the _schema_ of the api.
One of the best "skill" of **GraphQL** is the multi-db support. You can map multiple database in one api because the graphql server can use multiple source for build the api, and, doing so, add different's types of db or other type of source at the same time.
![rest vs graphql](db.png)
In this way you can use with one unique and uniform interface hidding behind it all the architectural dectail with only one point of comunication (the graphql url) with all the user need from the api.
## Structure of a GraphQL API
If you want a GraphQL's API you need to know how the API works.
All the data into the databases are object named _Type_ with multiple _Field_. Every _Field_ is get by a _Resolvers_ which return a _Value_.
You will need a _Schema_, a collection of _Types_, for describing all the api and make the api working.
You also need to know the difference between _Query_ and _Mutation_ because there are the only action youi can make on a GraphQL API.
* A _Query_ is a _type_ of the _schema_ for getting out the datas you will need for your work.
* A _Mutation_ is a _type_ of the _schema_ for adding or editing the datas in the databases.
#Why use a GraphQL over Rest ?
Which is the difference between Rest API and a GraphQL API? Because you can get only what you want and nothing more.
Thanks to _Relay_[^1] and thanks to the _Query_ you can build a _request_ with a selected number of element[^2] with only the needed _Value_[^3] .
[^1]: Javascript framework integrathed with _GraphQL_
[^2]: Like all the friend of the hero
[^3]: Only the first name
This will be usefull because some type of _Query_ will be resized than the _SQL_ query and you will be writing in a _GraphQL language_ which check for type error and syntactic error and output error if the _Query_ or the _Mutation_ don't respect the _Schema_. In this way the _Api Admin_ will allways be in controll of all the operation on the database and the user must be allways knew all the change into the _Schema_
![graphql gif](graphql-request.gif)
In this way you will have an api with only what you need for your _lightnet app_ which use only the necessary connection, no more.
Now I'm working on an another article about the python implementation of _GraphQL_ so wait another article.

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

View File

@@ -0,0 +1,45 @@
---
categories:
- dev
date: 2018-06-11
description: Now what appen because Microsoft own Github and all theire project?
slug: microsoft-buy-atom-electron-and-open-source
tags:
- rant
title: Microsoft buy Atom, Electron and Open Source
meta:
- github
- microsoft
---
Microsoft now own Github. From this we need to make some talk about the question which all the open source community is doing: "_Whas are going to change into the OpenSource comunity or into the public code?_"
Many developer thinks about this and say something similar to "_I do not want to risc my project so goodby_" and the move to GitLab all theire code.
{{< tweet gitlab 1004143715844124673 >}}
I think a lot about this acquisition of Github and I have a lot of dubts. How much code am I willing to give to a company that i not controll or own?
And this make me think more and more. I have some project I feel value more so I feel the need to have in mi controll.
And now I own a self hosting for my code or realy my personal important work.
And sometime after, I find on twitter an four year old retweet that talk about the acquisition and, for years ago, only Microsot will buy it. And this leave me with more "_I don't understand_" than before
{{< tweet jasonfried 430871267881672704 >}}
And this make me understand that owning Github you don't own Github code (site) but all the service make arrown Github.
- [_Electron_](https://electronjs.org) JS Library for building desktop app
- [_Atom_](https://atom.io) Text Editor, alternative to Visual Studio Code by Microsoft, with lots of plugin
- [_HuBot_](https://hubot.github.com) Framework for bot for Slack and other services
My questions are:
- Github has problems. Microsoft buying it will solve the problems or kill GitHub?
- The want to controll the OpenSource word or the only want to work with it?
- They want more contoll over Electron and his development?
- They want to controll Atom development?
- They want to make more Azure into Github service and all the marketplace?
Only time will tell and i am curious about what will do with GitHub and I only be sad because one of the Big 5[^1] of Tecnology own this OpenSource Colossum.
[^1]: Apple, Microsoft, Amazon, Facebook, Google

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

View File

@@ -0,0 +1,91 @@
---
title: P2P offline come le Spie
date: 2018-02-16 00:00:00 +0000
tags:
- hacking
slug: p2p-offline-da-spie
description: Esistono altri sistemi per la condivisione p2p e quelli offline sono
particolarmente interessanti. Eccone alcuni dei più interessanti
categories:
- rant
---
Da poco ho scoperto che nel 2006 l'agenzia Russa FSB ha accusato gli inglesi di spionaggio attraverso una roccia "_wirless_"[^1] e questo mi ha ricordato di alcuni progetti P2P che seguivo.
Partiamo con ordine: cos'è il P2P?
*P2P* sta per "**P**oint **to** **P**oint" ovvero "*punto a punto*". Significa che la comunicazione è tra il "mittente" e il destinatario senza utilizzare intermediari. Questo, nel mondo moderno di internet e nel mondo delle nuove tecnologie, è rarissimo da trovare. Solo le tecnologie *.torrent* e dei *magnet link* assieme ad alcune rare eccezioni di servizi di chat sono gli unici servizi per l'utente puramente *P2P* (il p2p tra macchine non lo prendo in considerazione perchè esce dal punto dell'articolo anche se è importante notare che c'è ed è molto presente)
Questo ha portato alla creazione di alcuni progetti hardware/software che cercano di creare questa comunicazione "offline" (in modo da evitare terzi) partendo dal concetto di *Dead Drops*.
Nonostante quello che mostrano nei film, lo scambio 'di persona' è molto pericoloso e raramente usato. Viene invece usato il *Dead Drops* o *consegna morta*:
dopo essersi accordati su un punto di consegna, il mittente lascia il "pacchetto" nel punto di consegna dove, il ricevente, lo viene a ritirare
Da questa idea nasce il primo progetto che esamino da lungo tempo: il progetto "*Dead Drops*"
## Dead Drop
![Dead Drop USB](deaddrops.jpg)
Nato come progetto d'arte di Aram Bartholl, un artista con base a Berlino, è un progetto che è stato molto apprezzato nelle comunità underground urbane e di hacking.[^2]
Infatti è considerabile come _hack urbano_ in quanto è, semplicemente, il posizionamento di supporti di memoria fissa nel territorio. Ad esempio il murare una chiavetta usb su una parete o legare, con una sicura, ad un albero un supporto usb.
Tutto questo viene gestito all'interno di un sito internet[^5] che ha anche un database in cui vengono segnalati i dead drop esistenti, il contenuto di partenza e lo stato del supporto stesso per rendere tutto più semplice e funzionale.
Questo sistema risulta essere molto interessante da un punto di vista tecnico ma difficile da mantenere in quanto molto soggetta allo stato della parete stessa e alle condizioni atmosferiche dell'area. In oltre può essere anche intesa come _danneggiamento di suolo pubblico/privato_.
Personalmente lo trovo un sistema molto funzionale nel caso venga applicato in un campus o una situazione controllata come all'interno di un negozio o di un caffè, in quanto riesce a essere più facilmente mantenuta.
[Manifesto Dead Drop](https://deaddrops.com/dead-drops/manifesto/)
---
Invece esistono dispositivi più facilmente mantenibili che ottengono lo stesso risultato di condivisione offline.
## PirateBox
Ispirata dal sistema delle radio pirata, la PiratBox è un sistema hardware di offline sharing che utilizza tecnologie OpenSource (FLOSS per gli amici) per la condivisione dei file e contenuti.
![Pirate Box](piratebox.gif)
Tecnicamente è un router modificato in modo da creare un _hotspot_ "offile" da cui prendere e lasciare file e commenti. Si basa su una "patch" di _OpenWrt_ che trasforma il router compatibile in un hotspot/server.
Attraverso una interfaccia web e collegandosi via WiFi è possibile caricare e scaricare i file contenuti all'interno della _PirateBox_.
Ovviamente, essendo tutto FLOSS è possibile modificare sia la patch che il sito in modo da creare un dispositivo più adatto al proprio scopo.
In particolare sono state effettuate delle "_mod_" della PirateBox basate proprio su questo principio che utilizzano come base la PirateBox per ottenere però la condivisione unilaterale di contenuti di uno specifico tipo:
* __PirateBox Streaming Radio with Icecast__ Utilizzando _IceCast_ è possibile utilizzare la PiratBox come "server" per la radio[^3.1]
* __OpenStreetMap on PirateBox__ Con alcune modifiche è possibile condividere mappe di OpenStreetMap sulla PirateBox[^3.2]
* __Calibre eBook Server on PirateBox__ Utilizzando [COPS](https://blog.slucas.fr/projects/calibre-opds-php-server/) è possibile avere un server contente una biblioteca di Calibre sulla propria PirateBox[^3.3]
In oltre alcune di queste modifiche sono diventate talmente _grosse_ da diventare progetti indipendenti come LibraryBox.
---
## LibraryBox
Mod e poi fork di _PirateBox_, è la versione "per libri" della _PirateBox_.
Risulta utilizzare la stessa base hardware (sempre un router con una unità di memoria) ed è sempre una "_patch_" di _OpenrWrt_ a cui viene cambiata l'interfaccia grafica e alcune funzionalità.
![Library Box](librarybox.png)
Infatti è un sistema di condivisione unidirezionale, pensato per ottenere in una location un mediaserver di condivisione di documenti offline, che permetta la _distribuzione_ di una scelta di documenti/file. Questo ha portato il dispositivo a essere molto aprezzato nel mondo dell'educazione, dove rende possibile la condivisione di documenti _pesanti_ semplicemente attaccandosi al WiFi del dispositivo, senza appesantire le reti della struttura.
In oltre viene molto aprezzato in alcune aree in cui viene _censurato_ l'accesso alla rete, che porta a aver bisogno di costose _VPN_ per il recupero di determinate risorse, che la _LibraryBox_ permette di condividere molto più facilmente.
Questo ha portato molti a sfruttare molto più pesantemente la _LibraryBox_ rispetto alla _PirateBox_ portandone anche a un maggiore sviluppo della stessa, che risulta molto più facile da costumizzare nella parte grafica (cosa molto più complessa nella _PirateBox_).
---
Fondamentalmente queste sono le tecnologie _P2P_ offline che suggerisco e di cui mi sono interessato nel mio tempo libero. Nel caso ne trovi di nuove mi preoccuperò di fare un aggiornamento in quanto l'argomento a me piace in modo particolare e lo trovo anche particolarmente interessante anche dal punto di vista umano, perchè è sempre interessante vedere i nuovi sistemi con cui il genere umano condivide la conoscenza.
[^1]: [The Guardian: Moscow names British 'spies' in NGO row](https://www.theguardian.com/world/2006/jan/23/russia.politics)
[^2]: Sito ufficiale del progetto Dead Drops _Link con problemi_ ~~deaddrops.com~~
[^3.1]: [Thread sulla mod con Icecast](http://forum.piratebox.cc/read.php?2,3764) e [tutorial](https://github.com/janbre/Assorted/tree/master/Piratebox/PirateBoxRadio)
[^3.2]: [Thread sulla mod con OpenStreetMap](http://forum.piratebox.cc/read.php?2,6988) e [tutorial](https://github.com/reinvented/openstreetbox)
[^3.3]: [Tutorial](https://forum.piratebox.cc/read.php?8,7921,7921#msg-7921)
[^4]: [Sito ufficiale del progetto Library Box](http://librarybox.us)
[^5]: Mappa dei dead drop _Link con problemi_ ~~deaddrops.com/dead-drops/db-map~~

Some files were not shown because too many files have changed in this diff Show More