fix
48
.editorconfig
Normal 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
|
||||||
1
.frontmatter/database/mediaDb.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
12
.github/dependabot.yml
vendored
Normal 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
@@ -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
@@ -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
@@ -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
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"schedule": "daily", // daily|weekly|monthly
|
||||||
|
"aggressiveCompression": "true" // true|false
|
||||||
|
}
|
||||||
5
README.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# Fundor333.com
|
||||||
|
|
||||||
|
[](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
@@ -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)
|
||||||
@@ -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
|
||||||
26
config/_default/.forestry/settings.yml
Normal 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
|
||||||
57
config/_default/config.yaml
Normal 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
|
||||||
9
config/_default/markup.yaml
Normal 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
@@ -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"
|
||||||
8
config/_default/params.yaml
Normal 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
|
||||||
12
config/_default/privacy.yaml
Normal 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
@@ -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
@@ -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
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
title: "books"
|
||||||
|
type: books
|
||||||
|
specialpost: true
|
||||||
|
---
|
||||||
BIN
content/cv/cv.jpg
Normal file
|
After Width: | Height: | Size: 1.7 MiB |
16
content/cv/index.md
Normal 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).
|
||||||
52
content/event/2022/databeers-tuscany-3.md
Normal 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
|
||||||
39
content/event/2022/databeers-vce-1.md
Normal 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 can’t wait to see all of you there, but please REGISTER and CONFIRM your attendance, so we’ll 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, we’re 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
|
||||||
52
content/event/2022/databeers-vce-2.md
Normal 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… we’re back! Databeers Venice #2 is live! We’re 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 sull’occupazione
|
||||||
|
|
||||||
|
---
|
||||||
|
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
|
||||||
41
content/event/2022/databeers-vce-3.md
Normal 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! We’re 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
|
||||||
48
content/event/2022/databeers-vce-4.md
Normal 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>
|
||||||
54
content/event/2022/databeers-venezia-6.md
Normal 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#
|
||||||
39
content/event/2022/del---cosa-fanno-gli-hacker.md
Normal 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 nell’identificare e neutralizzare le vulnerabilità informatiche. Qual’è il ruolo degli hacker etici nell’era digitale?
|
||||||
|
|
||||||
|
Biografia
|
||||||
|
|
||||||
|
Domenico Raguseo ha conseguito la Laurea in Scienze dell’Informazione presso l’Università 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
|
||||||
30
content/event/2022/devfest-triveneto-2022.md
Normal 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: quest’anno 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 dall’altra 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/
|
||||||
34
content/event/2022/devfest-veneto-19.md
Normal 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
|
||||||
31
content/event/2022/follow-up-abitare-a-venezia.md
Normal 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 all’interno del Laboratorio di Analisi urbana e del territorio e del ClusterLab: H-City Housing in the city. Abitare e rigenerare, dell’Università 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#
|
||||||
@@ -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#
|
||||||
@@ -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#
|
||||||
22
content/event/2022/follow-up-dati-dal-padiglione-al-forte.md
Normal 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#
|
||||||
29
content/event/2022/follow-up-il-cantiere-biennale.md
Normal 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#
|
||||||
@@ -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 sull’emergenze 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 sull’ambiente 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#
|
||||||
22
content/event/2022/gdg-venezia-tech-talks--ca-foscari.md
Normal 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/
|
||||||
@@ -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 l’impatto 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
|
||||||
22
content/event/2022/pycon-9.md
Normal 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/
|
||||||
17
content/event/2022/scala-italy.md
Normal 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
|
||||||
44
content/event/2023/databeer_ve_10.md
Normal 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 l’economia?”
|
||||||
|
|
||||||
|
Rocco Tripodi
|
||||||
|
|
||||||
|
Università di Bologna
|
||||||
|
|
||||||
|
“Che cos’è ChatGPT?”
|
||||||
|
|
||||||
|
Sara Ferro
|
||||||
|
|
||||||
|
Università Ca’ Foscari
|
||||||
|
|
||||||
|
“L’AI 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
|
||||||
22
content/event/2023/pycon-23.md
Normal 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
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
title: events
|
||||||
|
type: event
|
||||||
|
specialpost: true
|
||||||
|
---
|
||||||
14
content/feeds.md
Normal 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).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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
@@ -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
@@ -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>
|
||||||
BIN
content/post/2012/fundor333/cover.png
Normal file
|
After Width: | Height: | Size: 2.5 MiB |
19
content/post/2012/fundor333/index.md
Normal 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
|
||||||
BIN
content/post/2016/docker-la-balena-con-i-container/cover.jpg
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 47 KiB |
88
content/post/2016/docker-la-balena-con-i-container/index.md
Normal 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.
|
||||||
|

|
||||||
|
|
||||||
|
<!--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/).
|
||||||
BIN
content/post/2016/git-lalbero-delle-versioni/areas.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
content/post/2016/git-lalbero-delle-versioni/cover.jpg
Normal file
|
After Width: | Height: | Size: 4.7 MiB |
BIN
content/post/2016/git-lalbero-delle-versioni/git.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
93
content/post/2016/git-lalbero-delle-versioni/index.md
Normal 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.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**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.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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".
|
||||||
BIN
content/post/2016/gource-visualizzare-git-repository/cover.jpg
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
@@ -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
|
||||||
BIN
content/post/2016/orrori-delle-parentesi/cover.jpg
Normal file
|
After Width: | Height: | Size: 138 KiB |
43
content/post/2016/orrori-delle-parentesi/index.md
Normal 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.
|
||||||
|
|
||||||
BIN
content/post/2017/astemio-al-terzo-databeers/cover.jpg
Normal file
|
After Width: | Height: | Size: 784 KiB |
43
content/post/2017/astemio-al-terzo-databeers/index.md
Normal 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.
|
||||||
|
After Width: | Height: | Size: 420 KiB |
@@ -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
|
||||||
BIN
content/post/2017/dotfile-e-le-mie-config/cover.jpg
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
45
content/post/2017/dotfile-e-le-mie-config/index.md
Normal 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
|
||||||
BIN
content/post/2017/e-sono-passato-a-hugo/cover.jpg
Normal file
|
After Width: | Height: | Size: 1011 KiB |
75
content/post/2017/e-sono-passato-a-hugo/index.md
Normal 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
|
||||||
BIN
content/post/2017/emacs-e-mai-piu-mouse/cover.jpg
Normal file
|
After Width: | Height: | Size: 3.8 MiB |
46
content/post/2017/emacs-e-mai-piu-mouse/index.md
Normal 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
|
||||||
BIN
content/post/2017/google-io-2017/cover.jpg
Normal file
|
After Width: | Height: | Size: 864 KiB |
195
content/post/2017/google-io-2017/index.md
Normal 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’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’evento.
|
||||||
|
|
||||||
|
# Pre evento<a id="sec-1" name="sec-1"></a>
|
||||||
|
|
||||||
|
Stiamo soffiando bolle in attesa dell’inizio dell’evento. Il <span class="underline">**GDG**</span> fa una piccola presentazione di cos’è il <span class="underline">**GDG**</span> e cos’è il <span class="underline">**Google IO 2017**</span>.
|
||||||
|
Tutti siamo in fremente attesa dell’evento, anche se la location risulta essere una distrazione.
|
||||||
|
Il posto è la tesa 94 dell’Arsenale di Venezia, ove Google ha una delle sedi del <span class="underline">**Grand Tour d’Italia**</span>.
|
||||||
|
Nell’attesa Google ci fa soffiare bolle nel nostro telefono che vengono “lanciate” 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… 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 “maggiori” di Google e i loro successi. Ad esempio Android ha raggiunto i 2 Milioni… Come se avessero ancora bisogno di mostrare i muscoli…
|
||||||
|
|
||||||
|
## Mobile to AI first<a id="sec-2-1" name="sec-2-1"></a>
|
||||||
|
|
||||||
|
Tutti i servizi vengono ripensati per l’utilizzo di IA. Ad esempio per le mail sono riusciti a renderle discorsive le risposte dell’AI in modo da permettere di avere risposte fabbricate al volo per l’occasione.
|
||||||
|
E’ 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’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’è. 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’educazione e l’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… Vuole togliere clienti ad Amazon?
|
||||||
|
|
||||||
|
# Google Assistant<a id="sec-3" name="sec-3"></a>
|
||||||
|
|
||||||
|
Scott Huffman parla dela semplificazione ottenuta dall’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’assitente.
|
||||||
|
In oltre ora il Google Assistent è sisponibile anche sull’Iphone e esite un SDK per il Google assistent.
|
||||||
|
In questo modo le app di terze parti possono sviluppare il loro supporto per l’assistant.
|
||||||
|
|
||||||
|
|
||||||
|
Il Google Assitant può gestire creazione degli account, pagamenti e discussioni. Per fortuna i pagamenti passano per l’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’ 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’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… Guerra aperta? Non so’… 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…
|
||||||
|
|
||||||
|
## Photo sharing<a id="sec-5-1" name="sec-5-1"></a>
|
||||||
|
|
||||||
|
Ora Google Photo ti suggerisce a chi condividere le foto…
|
||||||
|
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’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 :-(…
|
||||||
|
|
||||||
|
## 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…
|
||||||
|
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’aumento delle visualizzazioni viene dai televisori attraverso l’assistant.
|
||||||
|
|
||||||
|
## Youtube on Tv<a id="sec-6-1" name="sec-6-1"></a>
|
||||||
|
|
||||||
|
Aumentato il servizio nella TV con l’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…
|
||||||
|
|
||||||
|
|
||||||
|
# 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’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 “peso”.
|
||||||
|
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’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 “retail jobs”.
|
||||||
|
Negli Usa nelle prossime settimane.
|
||||||
|
|
||||||
|
# Tensorflow Opensource<a id="sec-11" name="sec-11"></a>
|
||||||
|
|
||||||
|
Enormemente contenti dal successo del repository di Tensorflow.
|
||||||
|
After Width: | Height: | Size: 666 KiB |
@@ -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.
|
||||||
BIN
content/post/2017/hugo-into-docker/cover.jpg
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
BIN
content/post/2017/hugo-into-docker/docker.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
147
content/post/2017/hugo-into-docker/index.md
Normal 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-->
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
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.
|
||||||
BIN
content/post/2017/il-primo-periodo-con-emacs/cover.jpg
Normal file
|
After Width: | Height: | Size: 4.6 MiB |
150
content/post/2017/il-primo-periodo-con-emacs/index.md
Normal 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.
|
||||||
BIN
content/post/2017/jupyter-notebook-pelican-combo/cover.jpg
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
94
content/post/2017/jupyter-notebook-pelican-combo/index.md
Normal 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
|
||||||
BIN
content/post/2017/pipenv-e-come-tutto-e-in-uno/cover.jpg
Normal file
|
After Width: | Height: | Size: 916 KiB |
74
content/post/2017/pipenv-e-come-tutto-e-in-uno/index.md
Normal 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
|
||||||
BIN
content/post/2017/scrivi-push-public/cover.jpg
Normal file
|
After Width: | Height: | Size: 323 KiB |
57
content/post/2017/scrivi-push-public/index.md
Normal 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...
|
||||||
BIN
content/post/2017/utilizzi-alternativi-di-farebase/cover.jpg
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
45
content/post/2017/utilizzi-alternativi-di-farebase/index.md
Normal 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
|
||||||
BIN
content/post/2018/e-talk-al-pycon9/cover.jpg
Normal file
|
After Width: | Height: | Size: 3.0 MiB |
34
content/post/2018/e-talk-al-pycon9/index.md
Normal 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.
|
||||||
|
After Width: | Height: | Size: 814 KiB |
@@ -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.
|
||||||
BIN
content/post/2018/graphql-and-working-with-it/cover.jpg
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
content/post/2018/graphql-and-working-with-it/db.png
Normal file
|
After Width: | Height: | Size: 129 KiB |
|
After Width: | Height: | Size: 334 KiB |
BIN
content/post/2018/graphql-and-working-with-it/graphql.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
70
content/post/2018/graphql-and-working-with-it/index.md
Normal 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** 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.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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_
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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.
|
||||||
|
After Width: | Height: | Size: 97 KiB |
@@ -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
|
||||||
BIN
content/post/2018/p2p-offline-da-spie/cover.jpg
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
content/post/2018/p2p-offline-da-spie/deaddrops.jpg
Normal file
|
After Width: | Height: | Size: 71 KiB |
91
content/post/2018/p2p-offline-da-spie/index.md
Normal 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
|
||||||
|

|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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à.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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~~
|
||||||