From 83b581f3b77e9769cac2338dc89b428fc51b9ba9 Mon Sep 17 00:00:00 2001 From: boyska Date: Sat, 6 May 2017 02:00:42 +0200 Subject: [PATCH 01/13] Talks generate schedule.ics calendar --- plugins/talks.py | 61 +++++++++++++++++++++++++++++++++++++++++++++--- talks/meta.yaml | 1 + 2 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 talks/meta.yaml diff --git a/plugins/talks.py b/plugins/talks.py index 8c55b42..b7e5e41 100644 --- a/plugins/talks.py +++ b/plugins/talks.py @@ -10,6 +10,7 @@ import logging import re import datetime import shutil +import time from docutils import nodes from docutils.parsers.rst import directives, Directive @@ -44,6 +45,30 @@ def get_talk_names(): ] +def all_talks(): + return [get_talk_data(tn) for tn in get_talk_names()] + + + +@memoize +def get_global_data(): + fname = os.path.join(TALKS_PATH, 'meta.yaml') + if not os.path.isfile(fname): + return None + with io.open(fname, encoding='utf8') as buf: + try: + data = yaml.load(buf) + except Exception as exc: + logging.exception("Syntax error reading %s; skipping", fname) + return None + if data is None: + return None + if 'startdate' not in data: + logging.error("Missing startdate in global data") + data['startdate'] = datetime.datetime.now() + return data + + @memoize def get_talk_data(talkname): fname = os.path.join(TALKS_PATH, talkname, 'meta.yaml') @@ -72,11 +97,14 @@ def get_talk_data(talkname): logging.warn("Talk <{}> has no `room` field".format(talkname)) if 'time' not in data or 'day' not in data: logging.warn("Talk <{}> has no `time` or `day`".format(talkname)) - if 'time' in data: + if 'day' in data: + data['day'] = get_global_data()['startdate'] + datetime.timedelta(days=data['day']) + if 'time' in data and 'day' in data: timeparts = re.findall(r'\d+', str(data['time'])) if 4 > len(timeparts) > 0: timeparts = [int(p) for p in timeparts] - data['time'] = datetime.time(*timeparts) + data['time'] = datetime.datetime.combine(data['day'], + datetime.time(*timeparts)) else: logging.error("Talk <{}> has malformed `time`".format(talkname)) data['id'] = talkname @@ -123,7 +151,32 @@ class TalkDirective(Directive): format='html') ] -# TODO: TalkGridDirective (griglia completa) + +def talks_to_ics(): + content = 'BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:pelican\n' + for t in all_talks(): + content += talk_to_ics(t) + content += 'END:VCALENDAR\n' + return content + + +def talk_to_ics(talk): + start = talk['time'] + end = start + datetime.timedelta(minutes=talk['duration']) + content = 'BEGIN:VEVENT\n' + content += "UID:%s@%d.hackmeeting.org\n" % (talk['id'], talk['day'].year) + content += "SUMMARY:%s\n" % talk['title'] + content += "DTSTAMP:%s\n" % time.strftime('%Y%m%dT%H%M%SZ', + time.gmtime(float(start.strftime('%s')))) + content += "DTSTART:%s\n" % time.strftime('%Y%m%dT%H%M%SZ', + time.gmtime(float( + start.strftime('%s')))) + content += "DTEND:%s\n" % time.strftime('%Y%m%dT%H%M%SZ', + time.gmtime(float( + end.strftime('%s')))) + content += "LOCATION:%s\n" % talk['room'] + content += 'END:VEVENT\n' + return content class TalksGenerator(generators.Generator): @@ -143,6 +196,8 @@ class TalksGenerator(generators.Generator): if os.path.isdir(outdir): shutil.rmtree(outdir) shutil.copytree(self.talks[talkname]['resources'], outdir) + with open(os.path.join(self.output_path, 'talks.ics'), 'w') as buf: + buf.write(talks_to_ics()) def add_talks_option_defaults(pelican): diff --git a/talks/meta.yaml b/talks/meta.yaml new file mode 100644 index 0000000..ca14fca --- /dev/null +++ b/talks/meta.yaml @@ -0,0 +1 @@ +startdate: 2017-06-15 From e16ba4ee2f3983cc19c061708b565c25d15b27d6 Mon Sep 17 00:00:00 2001 From: boyska Date: Sat, 6 May 2017 03:24:17 +0200 Subject: [PATCH 02/13] talk grid --- content/pages/programma.en.rst | 2 + content/pages/programma.rst | 2 + plugins/talks.py | 71 ++++++++++++++++++++++++++++++++-- talks/_templates/grid.html | 39 +++++++++++++++++++ 4 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 talks/_templates/grid.html diff --git a/content/pages/programma.en.rst b/content/pages/programma.en.rst index 668cf5c..44eda1b 100644 --- a/content/pages/programma.en.rst +++ b/content/pages/programma.en.rst @@ -17,6 +17,8 @@ appreciated! Hackmeeting (still) hasn't a proper translation system, but you can find a bunch of people to ask to do translations when you need it. +.. talkgrid:: + .. talklist:: diff --git a/content/pages/programma.rst b/content/pages/programma.rst index daabcda..a98196e 100644 --- a/content/pages/programma.rst +++ b/content/pages/programma.rst @@ -12,5 +12,7 @@ Leggi l'`invito a presentare dei contenuti `_, fatti coraggio e proponi il tuo contenuto in `mailing list <{filename}contatti.rst>`_ +.. talkgrid:: + .. talklist:: diff --git a/plugins/talks.py b/plugins/talks.py index b7e5e41..387c0e0 100644 --- a/plugins/talks.py +++ b/plugins/talks.py @@ -20,6 +20,9 @@ import jinja2 TALKS_PATH = 'talks' +TALK_ATTACHMENT_PATH = 'res' +TALK_ICS = 'schedule.ics' +GRID_STEP = 15 def memoize(function): @@ -49,6 +52,10 @@ def all_talks(): return [get_talk_data(tn) for tn in get_talk_names()] +def unique_attr(iterable, attr): + return {x[attr] for x in iterable + if attr in x} + @memoize def get_global_data(): @@ -108,7 +115,7 @@ def get_talk_data(talkname): else: logging.error("Talk <{}> has malformed `time`".format(talkname)) data['id'] = talkname - resdir = os.path.join(TALKS_PATH, talkname, 'res') + resdir = os.path.join(TALKS_PATH, talkname, TALK_ATTACHMENT_PATH) if os.path.isdir(resdir) and os.listdir(resdir): data['resources'] = resdir return data @@ -152,6 +159,59 @@ class TalkDirective(Directive): ] +class TalkGridDirective(Directive): + '''A complete grid''' + required_arguments = 0 + + optional_arguments = 0 + final_argument_whitespace = True + has_content = True + + def run(self): + tmpl = jinja_env.get_template('grid.html') + output = [] + days = unique_attr(all_talks(), 'day') + for day in sorted(days): + talks = {talk['id'] for talk in all_talks() + if talk.get('day', None) == day + and 'time' in talk + and 'room' in talk} + if not talks: + continue + talks = [get_talk_data(t) for t in talks] + rooms = tuple(sorted(unique_attr(talks, 'room'))) + mintime = min({talk['time'].hour * 60 + + talk['time'].minute + for talk in talks}) / GRID_STEP * GRID_STEP + maxtime = max({talk['time'].hour * 60 + + talk['time'].minute + + talk['duration'] + for talk in talks}) + times = {} + + for t in range(mintime, maxtime, GRID_STEP): + times[t] = [None] * len(rooms) + for talk in talks: + talktime = talk['time'].hour * 60 + talk['time'].minute + position = talktime // GRID_STEP * GRID_STEP # round + assert position in times + roomnum = rooms.index(talk['room']) + times[position][roomnum] = talk + for i in range(1, talk['duration'] / GRID_STEP): + times[position + i*GRID_STEP][roomnum] = 'skip' + + render = tmpl.render(times=times, + rooms=rooms, + mintime=mintime, maxtime=maxtime, + timestep=GRID_STEP, + ) + output.append(nodes.raw('', '

%s

' % + day.strftime('%A %d').title(), + format='html')) + output.append(nodes.raw('', render, format='html')) + return output + + def talks_to_ics(): content = 'BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:pelican\n' for t in all_talks(): @@ -161,6 +221,8 @@ def talks_to_ics(): def talk_to_ics(talk): + if 'time' not in talk: + return '' start = talk['time'] end = start + datetime.timedelta(minutes=talk['duration']) content = 'BEGIN:VEVENT\n' @@ -191,12 +253,12 @@ class TalksGenerator(generators.Generator): def generate_output(self, writer=None): for talkname in self.talks: if 'resources' in self.talks[talkname]: - outdir = os.path.join(self.output_path, 'talks', talkname, - 'res') + outdir = os.path.join(self.output_path, TALKS_PATH, talkname, + TALK_ATTACHMENT_PATH) if os.path.isdir(outdir): shutil.rmtree(outdir) shutil.copytree(self.talks[talkname]['resources'], outdir) - with open(os.path.join(self.output_path, 'talks.ics'), 'w') as buf: + with open(os.path.join(self.output_path, TALK_ICS), 'w') as buf: buf.write(talks_to_ics()) @@ -222,3 +284,4 @@ else: signals.initialized.connect(add_talks_option_defaults) directives.register_directive('talklist', TalkListDirective) directives.register_directive('talk', TalkDirective) + directives.register_directive('talkgrid', TalkGridDirective) diff --git a/talks/_templates/grid.html b/talks/_templates/grid.html new file mode 100644 index 0000000..99d9c57 --- /dev/null +++ b/talks/_templates/grid.html @@ -0,0 +1,39 @@ + + + + + + {% for room in rooms %} + + {% endfor %} + + + + {% for time in range (mintime, maxtime, timestep) %} + + + {% for talk in times[time / timestep * timestep] %} + {% if talk == None %} + + {% elif talk != 'skip' %} + + {% endif %} + {% endfor %} + + {% endfor %} + +
{{room}}
{{time//60}}:{{time % 60}} + {{talk.title}} +
+{# vim: set ft=jinja: #} From 4c6d21d006b84c38067dcdffa4b676919b33ad6b Mon Sep 17 00:00:00 2001 From: boyska Date: Sun, 7 May 2017 00:15:46 +0200 Subject: [PATCH 03/13] python3 compatibility --- plugins/talks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/talks.py b/plugins/talks.py index 387c0e0..8d881f5 100644 --- a/plugins/talks.py +++ b/plugins/talks.py @@ -182,7 +182,7 @@ class TalkGridDirective(Directive): rooms = tuple(sorted(unique_attr(talks, 'room'))) mintime = min({talk['time'].hour * 60 + talk['time'].minute - for talk in talks}) / GRID_STEP * GRID_STEP + for talk in talks}) // GRID_STEP * GRID_STEP maxtime = max({talk['time'].hour * 60 + talk['time'].minute + talk['duration'] @@ -197,7 +197,7 @@ class TalkGridDirective(Directive): assert position in times roomnum = rooms.index(talk['room']) times[position][roomnum] = talk - for i in range(1, talk['duration'] / GRID_STEP): + for i in range(1, talk['duration'] // GRID_STEP): times[position + i*GRID_STEP][roomnum] = 'skip' render = tmpl.render(times=times, From 896997f093940530e060dd1b86f92eadadece525 Mon Sep 17 00:00:00 2001 From: boyska Date: Sun, 7 May 2017 01:07:08 +0200 Subject: [PATCH 04/13] unicode fix, py2 ti odio --- plugins/talks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/talks.py b/plugins/talks.py index 8d881f5..072cd57 100644 --- a/plugins/talks.py +++ b/plugins/talks.py @@ -65,7 +65,7 @@ def get_global_data(): with io.open(fname, encoding='utf8') as buf: try: data = yaml.load(buf) - except Exception as exc: + except Exception: logging.exception("Syntax error reading %s; skipping", fname) return None if data is None: @@ -205,7 +205,7 @@ class TalkGridDirective(Directive): mintime=mintime, maxtime=maxtime, timestep=GRID_STEP, ) - output.append(nodes.raw('', '

%s

' % + output.append(nodes.raw('', u'

%s

' % day.strftime('%A %d').title(), format='html')) output.append(nodes.raw('', render, format='html')) From 043c9d24998b28ccbb577b009c5fe814f9f84460 Mon Sep 17 00:00:00 2001 From: lesion Date: Sun, 7 May 2017 01:27:08 +0200 Subject: [PATCH 05/13] utf8 charset morte male --- plugins/talks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/talks.py b/plugins/talks.py index 072cd57..0864022 100644 --- a/plugins/talks.py +++ b/plugins/talks.py @@ -206,7 +206,7 @@ class TalkGridDirective(Directive): timestep=GRID_STEP, ) output.append(nodes.raw('', u'

%s

' % - day.strftime('%A %d').title(), + day.strftime('%A %d').decode('utf8').title(), format='html')) output.append(nodes.raw('', render, format='html')) return output From ee8837fbb1678588383fa88ad374a6822f0b4085 Mon Sep 17 00:00:00 2001 From: boyska Date: Sun, 7 May 2017 01:42:55 +0200 Subject: [PATCH 06/13] FIX explicitly set minimum possible duration --- plugins/talks.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/talks.py b/plugins/talks.py index 0864022..231b8d6 100644 --- a/plugins/talks.py +++ b/plugins/talks.py @@ -100,6 +100,10 @@ def get_talk_data(talkname): .format(talkname)) data['duration'] = 50 data['duration'] = int(data['duration']) + if data['duration'] < GRID_STEP: + logging.info("Talk <{}> lasts only {} minutes; changing to {}" + .format(talkname, data['duration'], GRID_STEP)) + data['duration'] = GRID_STEP if 'room' not in data: logging.warn("Talk <{}> has no `room` field".format(talkname)) if 'time' not in data or 'day' not in data: From bb009388aecff6cffae003961aefb67b7756af70 Mon Sep 17 00:00:00 2001 From: lesion Date: Sun, 7 May 2017 01:44:13 +0200 Subject: [PATCH 07/13] 00 --- talks/_templates/grid.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/talks/_templates/grid.html b/talks/_templates/grid.html index 99d9c57..aa20d46 100644 --- a/talks/_templates/grid.html +++ b/talks/_templates/grid.html @@ -22,7 +22,7 @@ td.talk { {% for time in range (mintime, maxtime, timestep) %} - {{time//60}}:{{time % 60}} + {{time//60}}:{{ "%02d" % (time % 60)}} {% for talk in times[time / timestep * timestep] %} {% if talk == None %} From 27eb51e5a73b051afc913b47a283f729f23ace05 Mon Sep 17 00:00:00 2001 From: lesion Date: Sun, 7 May 2017 02:11:25 +0200 Subject: [PATCH 08/13] add markdown support for talk description --- plugins/talks.py | 4 ++++ talks/_templates/talk.html | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/talks.py b/plugins/talks.py index 231b8d6..5da0cd3 100644 --- a/plugins/talks.py +++ b/plugins/talks.py @@ -11,6 +11,7 @@ import re import datetime import shutil import time +import markdown from docutils import nodes from docutils.parsers.rst import directives, Directive @@ -129,6 +130,9 @@ jinja_env = jinja2.Environment( loader=jinja2.FileSystemLoader(os.path.join(TALKS_PATH, '_templates')), autoescape=True, ) +jinja_env.filters['markdown'] = lambda text: \ + jinja2.Markup(markdown.Markdown(extensions=['meta']). + convert(text)) class TalkListDirective(Directive): diff --git a/talks/_templates/talk.html b/talks/_templates/talk.html index 55f35a4..560a1f4 100644 --- a/talks/_templates/talk.html +++ b/talks/_templates/talk.html @@ -11,7 +11,7 @@

Stanza {{ room }}

{% endif %} -
{{text}}
+
{{text | markdown}}
{% if links is defined or resources is defined or mail is defined %}

Link utili:

From dcba2e692cf6c564233c8bbe1f581f67367f2d88 Mon Sep 17 00:00:00 2001 From: boyska Date: Sun, 7 May 2017 02:18:04 +0200 Subject: [PATCH 09/13] talk conflicts detect --- plugins/talks.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/plugins/talks.py b/plugins/talks.py index 5da0cd3..2a45373 100644 --- a/plugins/talks.py +++ b/plugins/talks.py @@ -11,8 +11,9 @@ import re import datetime import shutil import time -import markdown +from copy import copy +import markdown from docutils import nodes from docutils.parsers.rst import directives, Directive @@ -199,14 +200,21 @@ class TalkGridDirective(Directive): for t in range(mintime, maxtime, GRID_STEP): times[t] = [None] * len(rooms) - for talk in talks: + for talk in sorted(talks, key=lambda x: x['time']): talktime = talk['time'].hour * 60 + talk['time'].minute position = talktime // GRID_STEP * GRID_STEP # round assert position in times roomnum = rooms.index(talk['room']) - times[position][roomnum] = talk + if times[position][roomnum] is not None: + logging.error("Talk {} and {} overlap! " + .format(times[position][roomnum]['id'], + talk['id'])) + continue + times[position][roomnum] = copy(talk) + times[position][roomnum]['skip'] = False for i in range(1, talk['duration'] // GRID_STEP): - times[position + i*GRID_STEP][roomnum] = 'skip' + times[position + i*GRID_STEP][roomnum] = copy(talk) + times[position + i*GRID_STEP][roomnum]['skip'] = True render = tmpl.render(times=times, rooms=rooms, From fa97cac5cabc04a0223d6c8907fe6fa7e354f0d4 Mon Sep 17 00:00:00 2001 From: dbz Date: Wed, 17 May 2017 12:56:02 +0200 Subject: [PATCH 10/13] TALK cable --- talks/cable/meta.yaml | 47 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 talks/cable/meta.yaml diff --git a/talks/cable/meta.yaml b/talks/cable/meta.yaml new file mode 100644 index 0000000..2ad1474 --- /dev/null +++ b/talks/cable/meta.yaml @@ -0,0 +1,47 @@ +# File di esempio; copialo e cambialo +title: "Cable: una rete federata di server Signal" +text: | + Signal è riconosciuto come uno degli strumenti più validi per quanto + riguarda la messaggistica privata, avendo tutte le caratteristiche + desiderabili a livello di protocollo e algoritmi e un'usabilità pari ai + più diffusi prodotti commerciali. Si tratta purtroppo di un servizio + centralizzato, i cui server sono interamente gestiti da una specifica + entità. + + I software che implementano il servizio (server e client) supportano + però la federazione, è quindi possibile costruire una rete + decentralizzata e indipendente. Il talk vuole esporre il lavoro che + abbiamo fatto in questo senso in HacklabBo. + + Programma di massima: + + 0. Il senso di questo lavoro + 1. Infrastruttura del servizio Signal + 2. Liberazione di client e server da servizi commerciali + 3. Federazione di due server + 4. Call for federation + 5. Discussione + + Materiale necessario: proiettore +# Se ancora non è stata assegnata una stanza al talk, commentala. Non usare un valore tipo "qualunque" o +# cose del genere, che ci si incasina tutto +# room: "" +# Ci vanno le virgolette intorno! altrimenti 17.30 viene interpretato come un numero decimale +duration: 90 +# time: "17.30" +# day: 1 +tags: + - comunicazione + - servizi autogestiti +# Devono essere dei link validi! +links: + - https://github.com/WhisperSystems/Signal-Server/wiki/API-Protocol +# mail dovrebbe contenere un link alla mail con cui il talk è stato proposto +# così si può sapere chi contattare e se c'è stata una discussione +mail: http://lists.autistici.org/message/20170515.205020.ba238125.en.html +contacts: + - torn + - gine + +# Devi usare UTF-8, non t'inventare scuse, sappiamo ndo abiti +# vim: set fileencoding=utf-8: From eb965dc766a8ef68869496e9892b27b359c5887d Mon Sep 17 00:00:00 2001 From: dbz Date: Wed, 17 May 2017 13:01:25 +0200 Subject: [PATCH 11/13] readme talk --- README.md | 12 ++++++++++++ talks/_talk_example/meta.yaml | 15 ++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f9cf352..3f04282 100644 --- a/README.md +++ b/README.md @@ -19,3 +19,15 @@ firefox output/index.html Also, `make help` is your friend. **Morte ai nemici dell'UTF-8** + +Aggiungere un talk +-------------------- + +```sh +cp -r talks/_talk_example/ talks/MIOTALK/ +vim talks/MIOTALK/meta.yaml +``` + +Quindi rifai `make publish` come spiegato prima: l'output ti informa di eventuali errori nei campi o +sovrapposizioni con altri talk, leggilo! + diff --git a/talks/_talk_example/meta.yaml b/talks/_talk_example/meta.yaml index 39b6e17..c7eb090 100644 --- a/talks/_talk_example/meta.yaml +++ b/talks/_talk_example/meta.yaml @@ -1,16 +1,25 @@ # File di esempio; copialo e cambialo -title: Il titolo del talk +title: "Il titolo del talk" text: | Descrizione del talk divisa in molte righe Puoi scrivere quanto vuoi ma devi rimanere indentato Puoi anche mettere delle spaziature. -# Se ancora non è stata assegnata una stanza al talk, lasciala vuota. Non usare un valore tipo "qualunque" o + +# Se ancora non è stata assegnata una stanza al talk, commentala. Non usare un valore tipo "qualunque" o # cose del genere, che ci si incasina tutto room: antani + +# duration è la durata in minuti del talk +# duration: 50 + # Ci vanno le virgolette intorno! altrimenti 17.30 viene interpretato come un numero decimale time: "17.30" +# day è il giorno in cui avverrà il talk. Finché non decommenti il talk non sarà schedulato +# 0=giovedì, 1=venerdì, 2=sabato, 3=domenica +# day: 0 + tags: - tante - cose @@ -20,7 +29,7 @@ links: - https://git.lattuga.net/asd/foo # mail dovrebbe contenere un link alla mail con cui il talk è stato proposto # così si può sapere chi contattare e se c'è stata una discussione -mail: blabla +mail: "blabla" # Devi usare UTF-8, non t'inventare scuse, sappiamo ndo abiti # vim: set fileencoding=utf-8: From 6bf642a5b46fca94d0dd0793690081db83927cc5 Mon Sep 17 00:00:00 2001 From: dbz Date: Wed, 17 May 2017 13:21:35 +0200 Subject: [PATCH 12/13] piu link: contatti, cose necessarie --- plugins/talks.py | 6 ++++++ talks/_templates/talk.html | 14 ++++++++++++-- talks/cable/meta.yaml | 3 ++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/plugins/talks.py b/plugins/talks.py index 2a45373..971d37b 100644 --- a/plugins/talks.py +++ b/plugins/talks.py @@ -106,6 +106,12 @@ def get_talk_data(talkname): logging.info("Talk <{}> lasts only {} minutes; changing to {}" .format(talkname, data['duration'], GRID_STEP)) data['duration'] = GRID_STEP + if 'links' not in data or not data['links']: + data['links'] = [] + if 'contacts' not in data or not data['contacts']: + data['contacts'] = [] + if 'needs' not in data or not data['needs']: + data['needs'] = [] if 'room' not in data: logging.warn("Talk <{}> has no `room` field".format(talkname)) if 'time' not in data or 'day' not in data: diff --git a/talks/_templates/talk.html b/talks/_templates/talk.html index 560a1f4..f367379 100644 --- a/talks/_templates/talk.html +++ b/talks/_templates/talk.html @@ -10,15 +10,25 @@ {% if room is defined %}

Stanza {{ room }}

{% endif %} +{% if needs: %} +
+Materiale necessario: +{{needs|join(", ")}} +
+{% endif %}
-
{{text | markdown}}
+
{{text | markdown}} + {% if contacts: %} +

A cura di {{contacts|join(', ')}}

+ {% endif %} +
{% if links is defined or resources is defined or mail is defined %}

Link utili:

    {% if links is defined: %} {% for link in links %} -
  • {{link}}
  • +
  • {{link|urlize}}
  • {% endfor %} {% endif %} {% if resources is defined: %} diff --git a/talks/cable/meta.yaml b/talks/cable/meta.yaml index 2ad1474..0b9bac0 100644 --- a/talks/cable/meta.yaml +++ b/talks/cable/meta.yaml @@ -22,7 +22,6 @@ text: | 4. Call for federation 5. Discussione - Materiale necessario: proiettore # Se ancora non è stata assegnata una stanza al talk, commentala. Non usare un valore tipo "qualunque" o # cose del genere, che ci si incasina tutto # room: "" @@ -39,6 +38,8 @@ links: # mail dovrebbe contenere un link alla mail con cui il talk è stato proposto # così si può sapere chi contattare e se c'è stata una discussione mail: http://lists.autistici.org/message/20170515.205020.ba238125.en.html +needs: + - proiettore contacts: - torn - gine From 4b6962ead83dac4a8db36f84217ad50b3098aefd Mon Sep 17 00:00:00 2001 From: dbz Date: Wed, 17 May 2017 13:21:48 +0200 Subject: [PATCH 13/13] TALK copia forense --- talks/copiaforense/meta.yaml | 48 ++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 talks/copiaforense/meta.yaml diff --git a/talks/copiaforense/meta.yaml b/talks/copiaforense/meta.yaml new file mode 100644 index 0000000..4158c17 --- /dev/null +++ b/talks/copiaforense/meta.yaml @@ -0,0 +1,48 @@ +# File di esempio; copialo e cambialo +title: "Copia forense, un'esperienza da tecnico di parte e il problema del pranzo" +text: | + Ripercorriamo la prima esperienza sul campo di hacklabbo/ams da + consulenti tecnici di parte per una copia forense. + Analizzeremo assieme il sequestro, la nomina e le operazioni compiute. + + Parleremo di: + + * imballi, sigilli e come devo essere maneggiati i dispositivi dal CTU + * quale materiale il CTP deve portarsi il giorno della copia + * il problema del pranzo + * una piccola panoramica su Deft Zero + * i formati di acquisizione + * Ufed Cellbrite Touch, per l'estrapolazione dei dati dal telefono + * la parti del verbale e cosa far scrivere + * curiose anomalie + * la figura del CTP, serve? Non serve? Cosa possiamo fare come hacklab + per i/le compagni/e inguiati/e? + +needs: + - proiettore +# Se ancora non è stata assegnata una stanza al talk, commentala. Non usare un valore tipo "qualunque" o +# cose del genere, che ci si incasina tutto +# room: antani + +# duration è la durata in minuti del talk +duration: 60 + +# Ci vanno le virgolette intorno! altrimenti 17.30 viene interpretato come un numero decimale +# time: "17.30" +# day è il giorno in cui avverrà il talk. Finché non decommenti il talk non sarà schedulato +# 0=giovedì, 1=venerdì, 2=sabato, 3=domenica +# day: 0 + +tags: + - legale +# Devono essere dei link validi! +links: +# mail dovrebbe contenere un link alla mail con cui il talk è stato proposto +# così si può sapere chi contattare e se c'è stata una discussione +mail: "http://lists.autistici.org/message/20170516.235536.3e0103ea.en.html" +contacts: + - jops + - gine + +# Devi usare UTF-8, non t'inventare scuse, sappiamo ndo abiti +# vim: set fileencoding=utf-8: