From e73a68ec536a27268ef8b05eaa121d2b678389d4 Mon Sep 17 00:00:00 2001
From: scateu
Date: Wed, 27 Feb 2019 01:01:47 +0800
Subject: [PATCH] MIME multipart/alternative: Plain text first. (RFC2046)
---
feed2exec/email.py | 15 +-
feed2exec/tests/cassettes/planet-debian.mbx | 6930 +++++++++----------
feed2exec/tests/files/breaking_news.mbx | 18 +-
feed2exec/tests/files/planet-debian.mbx | 1616 ++---
feed2exec/tests/files/restic.mbx | 20 +-
feed2exec/tests/files/rsswithpermalink.mbx | 64 +
feed2exec/tests/files/udd.mbx | 12 +-
feed2exec/tests/files/weird-dates.mbx | 18 +-
feed2exec/tests/test_plugins.py | 12 +-
9 files changed, 4389 insertions(+), 4316 deletions(-)
create mode 100644 feed2exec/tests/files/rsswithpermalink.mbx
diff --git a/feed2exec/email.py b/feed2exec/email.py
index 848327a..0cb9607 100644
--- a/feed2exec/email.py
+++ b/feed2exec/email.py
@@ -48,6 +48,9 @@ def make_message(feed, item, to_addr=None, cls=email.message.Message):
cs.body_encoding = '8bit'
msg = MIMEMultipart('alternative', boundary)
html_parts = []
+ msg_attach_queue_plain = []
+ msg_attach_queue_html = []
+ msg_attach_queue_part = []
for content in params.get('content', []):
if not content.value:
continue
@@ -62,7 +65,7 @@ def make_message(feed, item, to_addr=None, cls=email.message.Message):
html.replace_header('Content-Transfer-Encoding', '8bit')
if subtype == 'html':
html_parts.append(content.value)
- msg.attach(html)
+ msg_attach_queue_html.append(html)
if not msg.get_payload() and params.get('summary'):
# no content found, fallback on summary
@@ -74,9 +77,11 @@ def make_message(feed, item, to_addr=None, cls=email.message.Message):
_subtype=subtype, _charset=cs)
if subtype == 'plain':
msg = part
+ # clear HTML attach queue
+ msg_attach_queue_html = []
else:
html_parts.append(params.get('summary'))
- msg.attach(part)
+ msg_attach_queue_part.append(part)
for content in html_parts:
# plain text version available
params['content_plain'] = html2text_filter.parse(content)
@@ -86,7 +91,11 @@ def make_message(feed, item, to_addr=None, cls=email.message.Message):
text = MIMEText(body.encode('utf-8'),
_subtype='plain', _charset=cs)
text.replace_header('Content-Transfer-Encoding', '8bit')
- msg.attach(text)
+ msg_attach_queue_plain.append(text)
+
+ for _m in msg_attach_queue_plain + msg_attach_queue_part + msg_attach_queue_html: # final output
+ msg.attach(_m) # According to RFC 2046, plain text comes first, better.
+
payload = msg.get_payload()
if len(payload) == 1:
msg = payload.pop()
diff --git a/feed2exec/tests/cassettes/planet-debian.mbx b/feed2exec/tests/cassettes/planet-debian.mbx
index d78c212..1296aba 100644
--- a/feed2exec/tests/cassettes/planet-debian.mbx
+++ b/feed2exec/tests/cassettes/planet-debian.mbx
@@ -6,120 +6,11 @@ To: to@example.com
From: planet-debian
Subject: Steinar H. Gunderson: Introducing Narabu, part 2: Meet the GPU
Message-ID: http-blog-sesse-net-blog-tech-2017-10-19-19-16_introducing_narabu_part_2_meet_the_gpu-html
-User-Agent: feed2exec (0.8.0)
+User-Agent: feed2exec (0.13.1.dev9+g360c01d.d20190227)
Precedence: list
Auto-Submitted: auto-generated
Archived-At: http://blog.sesse.net/blog/tech/2017-10-19-19-16_introducing_narabu_part_2_meet_the_gpu.html
---===============testboundary==
-Content-Type: text/html; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 8bit
-
-
Narabu is a new intraframe video codec. You may or may not want to read
-part 1
-first.
-
-The GPU, despite being extremely more flexible than it was fifteen years
-ago, is still a very different beast from your CPU, and not all problems
-map well to it performance-wise. Thus, before designing a codec, it's
-useful to know what our platform looks like.
-
-A GPU has lots of special functionality for graphics (well, duh), but we'll
-be concentrating on the compute shader subset in this context, ie., we
-won't be drawing any polygons. Roughly, a GPU (as I understand it!) is built
-up about as follows:
-
-A GPU contains 1–20 cores; NVIDIA calls them SMs (shader multiprocessors),
-Intel calls them subslices. (Trivia: A typical mid-range Intel GPU contains two cores,
-and thus is designated GT2.) One such core usually runs the same program,
-although on different data; there are exceptions, but typically, if your
-program can't fill an entire core with parallelism, you're wasting energy.
-Each core, in addition to tons (thousands!) of registers, also has some
-“shared memory” (also called “local memory” sometimes, although that term
-is overloaded), typically 32–64 kB, which you can think of in two ways:
-Either as a sort-of explicit L1 cache, or as a way to communicate
-internally on a core. Shared memory is a limited, precious resource in
-many algorithms.
-
-Each core/SM/subslice contains about 8 execution units (Intel
-calls them EUs, NVIDIA/AMD calls them something else) and some memory
-access logic. These multiplex a bunch of threads (say, 32) and run in
-a round-robin-ish fashion. This means that a GPU can handle memory stalls
-much better than a typical CPU, since it has so many streams to pick from;
-even though each thread runs in-order, it can just kick off an operation
-and then go to the next thread while the previous one is working.
-
-Each execution unit has a bunch of ALUs (typically 16) and executes code in a SIMD
-fashion. NVIDIA calls these ALUs “CUDA cores”, AMD calls them “stream
-processors”. Unlike on CPU, this SIMD has full scatter/gather support
-(although sequential access, especially in certain patterns, is much more efficient
-than random access), lane enable/disable so it can work with conditional
-code, etc.. The typically fastest operation is a 32-bit float muladd;
-usually that's single-cycle. GPUs love 32-bit FP code. (In fact, in some
-GPU languages, you won't even have 8-, 16-bit or 64-bit types. This is
-annoying, but not the end of the world.)
-
-The vectorization is not exposed to the user in typical code (GLSL has some
-vector types, but they're usually just broken up into scalars, so that's a
-red herring), although in some programming languages you can get to swizzle
-the SIMD stuff internally to gain advantage of that (there's also schemes for
-broadcasting bits by “voting” etc.). However, it is crucially important to
-performance; if you have divergence within a warp, this means the GPU needs
-to execute both sides of the if. So less divergent code is good.
-
-Such a SIMD group is called a warp by NVIDIA (I don't know if the others have
-names for it). NVIDIA has SIMD/warp width always 32; AMD used to be 64 but
-is now 16. Intel supports 4–32 (the compiler will autoselect based on a bunch of
-factors), although 16 is the most common.
-
-The upshot of all of this is that you need massive amounts of parallelism
-to be able to get useful performance out of a CPU. A rule of thumb is that
-if you could have launched about a thousand threads for your problem on CPU,
-it's a good fit for a GPU, although this is of course just a guideline.
-
-There's a ton of APIs available to write compute shaders. There's CUDA (NVIDIA-only, but the
-dominant player), D3D compute (Windows-only, but multi-vendor),
-OpenCL (multi-vendor, but highly variable implementation quality),
-OpenGL compute shaders (all platforms except macOS, which has too old drivers),
-Metal (Apple-only) and probably some that I forgot. I've chosen to go for
-OpenGL compute shaders since I already use OpenGL shaders a lot, and this
-saves on interop issues. CUDA probably is more mature, but my laptop is
-Intel. :-) No matter which one you choose, the programming model looks very
-roughly like this pseudocode:
-
-for (size_t workgroup_idx = 0; workgroup_idx < NUM_WORKGROUPS; ++workgroup_idx) { // in parallel over cores
- char shared_mem[REQUESTED_SHARED_MEM]; // private for each workgroup
- for (size_t local_idx = 0; local_idx < WORKGROUP_SIZE; ++local_idx) { // in parallel on each core
- main(workgroup_idx, local_idx, shared_mem);
- }
-}
-
-
-except in reality, the indices will be split in x/y/z for your convenience
-(you control all six dimensions, of course), and if you haven't asked for too
-much shared memory, the driver can silently make larger workgroups if it
-helps increase parallelity (this is totally transparent to you). main()
-doesn't return anything, but you can do reads and writes as you wish;
-GPUs have large amounts of memory these days, and staggering amounts of
-memory bandwidth.
-
-Now for the bad part: Generally, you will have no debuggers, no way of
-logging and no real profilers (if you're lucky, you can get to know how long
-each compute shader invocation takes, but not what takes time within the
-shader itself). Especially the latter is maddening; the only real recourse
-you have is some timers, and then placing timer probes or trying to comment
-out sections of your code to see if something goes faster. If you don't
-get the answers you're looking for, forget printf—you need to set up a
-separate buffer, write some numbers into it and pull that buffer down to
-the GPU. Profilers are an essential part of optimization, and I had really
-hoped the world would be more mature here by now. Even CUDA doesn't give
-you all that much insight—sometimes I wonder if all of this is because
-GPU drivers and architectures are meant to be shrouded in mystery for
-competitiveness reasons, but I'm honestly not sure.
-
-So that's it for a crash course in GPU architecture. Next time, we'll start
-looking at the Narabu codec itself.
--===============testboundary==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
@@ -234,6 +125,115 @@ So that's it for a crash course in GPU architecture. Next time, we'll start
looking at the Narabu codec itself.
+--===============testboundary==
+Content-Type: text/html; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 8bit
+
+
Narabu is a new intraframe video codec. You may or may not want to read
+part 1
+first.
+
+The GPU, despite being extremely more flexible than it was fifteen years
+ago, is still a very different beast from your CPU, and not all problems
+map well to it performance-wise. Thus, before designing a codec, it's
+useful to know what our platform looks like.
+
+A GPU has lots of special functionality for graphics (well, duh), but we'll
+be concentrating on the compute shader subset in this context, ie., we
+won't be drawing any polygons. Roughly, a GPU (as I understand it!) is built
+up about as follows:
+
+A GPU contains 1–20 cores; NVIDIA calls them SMs (shader multiprocessors),
+Intel calls them subslices. (Trivia: A typical mid-range Intel GPU contains two cores,
+and thus is designated GT2.) One such core usually runs the same program,
+although on different data; there are exceptions, but typically, if your
+program can't fill an entire core with parallelism, you're wasting energy.
+Each core, in addition to tons (thousands!) of registers, also has some
+“shared memory” (also called “local memory” sometimes, although that term
+is overloaded), typically 32–64 kB, which you can think of in two ways:
+Either as a sort-of explicit L1 cache, or as a way to communicate
+internally on a core. Shared memory is a limited, precious resource in
+many algorithms.
+
+Each core/SM/subslice contains about 8 execution units (Intel
+calls them EUs, NVIDIA/AMD calls them something else) and some memory
+access logic. These multiplex a bunch of threads (say, 32) and run in
+a round-robin-ish fashion. This means that a GPU can handle memory stalls
+much better than a typical CPU, since it has so many streams to pick from;
+even though each thread runs in-order, it can just kick off an operation
+and then go to the next thread while the previous one is working.
+
+Each execution unit has a bunch of ALUs (typically 16) and executes code in a SIMD
+fashion. NVIDIA calls these ALUs “CUDA cores”, AMD calls them “stream
+processors”. Unlike on CPU, this SIMD has full scatter/gather support
+(although sequential access, especially in certain patterns, is much more efficient
+than random access), lane enable/disable so it can work with conditional
+code, etc.. The typically fastest operation is a 32-bit float muladd;
+usually that's single-cycle. GPUs love 32-bit FP code. (In fact, in some
+GPU languages, you won't even have 8-, 16-bit or 64-bit types. This is
+annoying, but not the end of the world.)
+
+The vectorization is not exposed to the user in typical code (GLSL has some
+vector types, but they're usually just broken up into scalars, so that's a
+red herring), although in some programming languages you can get to swizzle
+the SIMD stuff internally to gain advantage of that (there's also schemes for
+broadcasting bits by “voting” etc.). However, it is crucially important to
+performance; if you have divergence within a warp, this means the GPU needs
+to execute both sides of the if. So less divergent code is good.
+
+Such a SIMD group is called a warp by NVIDIA (I don't know if the others have
+names for it). NVIDIA has SIMD/warp width always 32; AMD used to be 64 but
+is now 16. Intel supports 4–32 (the compiler will autoselect based on a bunch of
+factors), although 16 is the most common.
+
+The upshot of all of this is that you need massive amounts of parallelism
+to be able to get useful performance out of a CPU. A rule of thumb is that
+if you could have launched about a thousand threads for your problem on CPU,
+it's a good fit for a GPU, although this is of course just a guideline.
+
+There's a ton of APIs available to write compute shaders. There's CUDA (NVIDIA-only, but the
+dominant player), D3D compute (Windows-only, but multi-vendor),
+OpenCL (multi-vendor, but highly variable implementation quality),
+OpenGL compute shaders (all platforms except macOS, which has too old drivers),
+Metal (Apple-only) and probably some that I forgot. I've chosen to go for
+OpenGL compute shaders since I already use OpenGL shaders a lot, and this
+saves on interop issues. CUDA probably is more mature, but my laptop is
+Intel. :-) No matter which one you choose, the programming model looks very
+roughly like this pseudocode:
+
+for (size_t workgroup_idx = 0; workgroup_idx < NUM_WORKGROUPS; ++workgroup_idx) { // in parallel over cores
+ char shared_mem[REQUESTED_SHARED_MEM]; // private for each workgroup
+ for (size_t local_idx = 0; local_idx < WORKGROUP_SIZE; ++local_idx) { // in parallel on each core
+ main(workgroup_idx, local_idx, shared_mem);
+ }
+}
+
+
+except in reality, the indices will be split in x/y/z for your convenience
+(you control all six dimensions, of course), and if you haven't asked for too
+much shared memory, the driver can silently make larger workgroups if it
+helps increase parallelity (this is totally transparent to you). main()
+doesn't return anything, but you can do reads and writes as you wish;
+GPUs have large amounts of memory these days, and staggering amounts of
+memory bandwidth.
+
+Now for the bad part: Generally, you will have no debuggers, no way of
+logging and no real profilers (if you're lucky, you can get to know how long
+each compute shader invocation takes, but not what takes time within the
+shader itself). Especially the latter is maddening; the only real recourse
+you have is some timers, and then placing timer probes or trying to comment
+out sections of your code to see if something goes faster. If you don't
+get the answers you're looking for, forget printf—you need to set up a
+separate buffer, write some numbers into it and pull that buffer down to
+the GPU. Profilers are an essential part of optimization, and I had really
+hoped the world would be more mature here by now. Even CUDA doesn't give
+you all that much insight—sometimes I wonder if all of this is because
+GPU drivers and architectures are meant to be shrouded in mystery for
+competitiveness reasons, but I'm honestly not sure.
+
+So that's it for a crash course in GPU architecture. Next time, we'll start
+looking at the Narabu codec itself.
--===============testboundary==--
From planet-debian Thu Oct 19 14:21:14 2017
@@ -244,20 +244,11 @@ To: to@example.com
From: planet-debian
Subject: Norbert Preining: Analysing Debian packages with Neo4j
Message-ID: https-www-preining-info-blog-p-6831
-User-Agent: feed2exec (0.8.0)
+User-Agent: feed2exec (0.13.1.dev9+g360c01d.d20190227)
Precedence: list
Auto-Submitted: auto-generated
Archived-At: https://www.preining.info/blog/2017/10/analysing-debian-packages-with-neo4j/
---===============testboundary==
-Content-Type: text/html; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-
-
I just finished the presentation at the Neo4j Online Meetup on getting the Debian UDD into a Neo4j graph database. Besides the usual technical quibbles it did work out quite well.
-
-The code for pulling the data from the UDD, as well as converting and importing it into Neo4j is available on Github Debian-Graph. The slides are also available on Github: preining-debian-packages-neo4j.pdf.
-There are still some things I want to implement, time permitting, because it would be a great tool for better integration for Debian. In any case, graph databases are lots of fun to play around.
--===============testboundary==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
@@ -285,6 +276,15 @@ would be a great tool for better integration for Debian. In any case, graph
databases are lots of fun to play around.
+--===============testboundary==
+Content-Type: text/html; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+
+
I just finished the presentation at the Neo4j Online Meetup on getting the Debian UDD into a Neo4j graph database. Besides the usual technical quibbles it did work out quite well.
+
+The code for pulling the data from the UDD, as well as converting and importing it into Neo4j is available on Github Debian-Graph. The slides are also available on Github: preining-debian-packages-neo4j.pdf.
+There are still some things I want to implement, time permitting, because it would be a great tool for better integration for Debian. In any case, graph databases are lots of fun to play around.
--===============testboundary==--
From planet-debian Thu Oct 19 08:33:31 2017
@@ -295,90 +295,13 @@ To: to@example.com
From: planet-debian
Subject: Daniel Pocock: FOSDEM 2018 Real-Time Communications Call for Participation
Message-ID: https-danielpocock-com-341-at-https-danielpocock-com
-User-Agent: feed2exec (0.8.0)
+User-Agent: feed2exec (0.13.1.dev9+g360c01d.d20190227)
Precedence: list
Auto-Submitted: auto-generated
Archived-At: https://danielpocock.com/fosdem-2018-rtc-cfp
--===============testboundary==
-Content-Type: text/html; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 8bit
-
-
FOSDEM is one of the world's premier meetings of free software developers, with over five thousand people attending each year. FOSDEM 2018 takes place 3-4 February 2018 in Brussels, Belgium.
-
This email contains information about:
-
- Real-Time communications dev-room and lounge,
-- speaking opportunities,
-- volunteering in the dev-room and lounge,
-- related events around FOSDEM, including the XMPP summit,
-- social events (the legendary FOSDEM Beer Night and Saturday night dinners provide endless networking opportunities),
-- the Planet aggregation sites for RTC blogs
-
Call for participation - Real Time Communications (RTC)
-
The Real-Time dev-room and Real-Time lounge is about all things involving real-time communication, including: XMPP, SIP, WebRTC, telephony, mobile VoIP, codecs, peer-to-peer, privacy and encryption. The dev-room is a successor to the previous XMPP and telephony dev-rooms. We are looking for speakers for the dev-room and volunteers and participants for the tables in the Real-Time lounge.
-
The dev-room is only on Sunday, 4 February 2018. The lounge will be present for both days.
-
To discuss the dev-room and lounge, please join the FSFE-sponsored Free RTC mailing list.
-
To be kept aware of major developments in Free RTC, without being on the discussion list, please join the Free-RTC Announce list.
-
Speaking opportunities
-
Note: if you used FOSDEM Pentabarf before, please use the same account/username
-
Real-Time Communications dev-room: deadline 23:59 UTC on 30 November. Please use the Pentabarf system to submit a talk proposal for the dev-room. On the "General" tab, please look for the "Track" option and choose "Real Time Communications devroom". Link to talk submission.
-
Other dev-rooms and lightning talks: some speakers may find their topic is in the scope of more than one dev-room. It is encouraged to apply to more than one dev-room and also consider proposing a lightning talk, but please be kind enough to tell us if you do this by filling out the notes in the form.
-
You can find the full list of dev-rooms on this page and apply for a lightning talk at https://fosdem.org/submit
-
Main track: the deadline for main track presentations is 23:59 UTC 3 November. Leading developers in the Real-Time Communications field are encouraged to consider submitting a presentation to the main track.
-
First-time speaking?
-
FOSDEM dev-rooms are a welcoming environment for people who have never given a talk before. Please feel free to contact the dev-room administrators personally if you would like to ask any questions about it.
-
Submission guidelines
-
The Pentabarf system will ask for many of the essential details. Please remember to re-use your account from previous years if you have one.
-
In the "Submission notes", please tell us about:
-
- the purpose of your talk
-- any other talk applications (dev-rooms, lightning talks, main track)
-- availability constraints and special needs
-
You can use HTML and links in your bio, abstract and description.
-
If you maintain a blog, please consider providing us with the URL of a feed with posts tagged for your RTC-related work.
-
We will be looking for relevance to the conference and dev-room themes, presentations aimed at developers of free and open source software about RTC-related topics.
-
Please feel free to suggest a duration between 20 minutes and 55 minutes but note that the final decision on talk durations will be made by the dev-room administrators based on the received proposals. As the two previous dev-rooms have been combined into one, we may decide to give shorter slots than in previous years so that more speakers can participate.
-
Please note FOSDEM aims to record and live-stream all talks. The CC-BY license is used.
-
Volunteers needed
-
To make the dev-room and lounge run successfully, we are looking for volunteers:
-
- FOSDEM provides video recording equipment and live streaming, volunteers are needed to assist in this
-- organizing one or more restaurant bookings (dependending upon number of participants) for the evening of Saturday, 4 February
-- participation in the Real-Time lounge
-- helping attract sponsorship funds for the dev-room to pay for the Saturday night dinner and any other expenses
-- circulating this Call for Participation (text version) to other mailing lists
-
Related events - XMPP and RTC summits
-
The XMPP Standards Foundation (XSF) has traditionally held a summit in the days before FOSDEM. There is discussion about a similar summit taking place on 2 February 2018. XMPP Summit web site - please join the mailing list for details.
-
Social events and dinners
-
The traditional FOSDEM beer night occurs on Friday, 2 February.
-
On Saturday night, there are usually dinners associated with each of the dev-rooms. Most restaurants in Brussels are not so large so these dinners have space constraints and reservations are essential. Please subscribe to the Free-RTC mailing list for further details about the Saturday night dinner options and how you can register for a seat.
-
Spread the word and discuss
-
If you know of any mailing lists where this CfP would be relevant, please forward this email (text version). If this dev-room excites you, please blog or microblog about it, especially if you are submitting a talk.
-
If you regularly blog about RTC topics, please send details about your blog to the planet site administrators:
-
Please also link to the Planet sites from your own blog or web site as this helps everybody in the free real-time communications community.
-
Contact
-
For any private queries, contact us directly using the address fosdem-rtc-admin@freertc.org and for any other queries please ask on the Free-RTC mailing list.
-
The dev-room administration team:
-
---===============testboundary==
-Content-Type: text/plain; charset="utf-8"
+Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
@@ -581,6 +504,83 @@ The dev-room administration team:
[30]:
+--===============testboundary==
+Content-Type: text/html; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 8bit
+
+
FOSDEM is one of the world's premier meetings of free software developers, with over five thousand people attending each year. FOSDEM 2018 takes place 3-4 February 2018 in Brussels, Belgium.
+
This email contains information about:
+
- Real-Time communications dev-room and lounge,
+- speaking opportunities,
+- volunteering in the dev-room and lounge,
+- related events around FOSDEM, including the XMPP summit,
+- social events (the legendary FOSDEM Beer Night and Saturday night dinners provide endless networking opportunities),
+- the Planet aggregation sites for RTC blogs
+
Call for participation - Real Time Communications (RTC)
+
The Real-Time dev-room and Real-Time lounge is about all things involving real-time communication, including: XMPP, SIP, WebRTC, telephony, mobile VoIP, codecs, peer-to-peer, privacy and encryption. The dev-room is a successor to the previous XMPP and telephony dev-rooms. We are looking for speakers for the dev-room and volunteers and participants for the tables in the Real-Time lounge.
+
The dev-room is only on Sunday, 4 February 2018. The lounge will be present for both days.
+
To discuss the dev-room and lounge, please join the FSFE-sponsored Free RTC mailing list.
+
To be kept aware of major developments in Free RTC, without being on the discussion list, please join the Free-RTC Announce list.
+
Speaking opportunities
+
Note: if you used FOSDEM Pentabarf before, please use the same account/username
+
Real-Time Communications dev-room: deadline 23:59 UTC on 30 November. Please use the Pentabarf system to submit a talk proposal for the dev-room. On the "General" tab, please look for the "Track" option and choose "Real Time Communications devroom". Link to talk submission.
+
Other dev-rooms and lightning talks: some speakers may find their topic is in the scope of more than one dev-room. It is encouraged to apply to more than one dev-room and also consider proposing a lightning talk, but please be kind enough to tell us if you do this by filling out the notes in the form.
+
You can find the full list of dev-rooms on this page and apply for a lightning talk at https://fosdem.org/submit
+
Main track: the deadline for main track presentations is 23:59 UTC 3 November. Leading developers in the Real-Time Communications field are encouraged to consider submitting a presentation to the main track.
+
First-time speaking?
+
FOSDEM dev-rooms are a welcoming environment for people who have never given a talk before. Please feel free to contact the dev-room administrators personally if you would like to ask any questions about it.
+
Submission guidelines
+
The Pentabarf system will ask for many of the essential details. Please remember to re-use your account from previous years if you have one.
+
In the "Submission notes", please tell us about:
+
- the purpose of your talk
+- any other talk applications (dev-rooms, lightning talks, main track)
+- availability constraints and special needs
+
You can use HTML and links in your bio, abstract and description.
+
If you maintain a blog, please consider providing us with the URL of a feed with posts tagged for your RTC-related work.
+
We will be looking for relevance to the conference and dev-room themes, presentations aimed at developers of free and open source software about RTC-related topics.
+
Please feel free to suggest a duration between 20 minutes and 55 minutes but note that the final decision on talk durations will be made by the dev-room administrators based on the received proposals. As the two previous dev-rooms have been combined into one, we may decide to give shorter slots than in previous years so that more speakers can participate.
+
Please note FOSDEM aims to record and live-stream all talks. The CC-BY license is used.
+
Volunteers needed
+
To make the dev-room and lounge run successfully, we are looking for volunteers:
+
- FOSDEM provides video recording equipment and live streaming, volunteers are needed to assist in this
+- organizing one or more restaurant bookings (dependending upon number of participants) for the evening of Saturday, 4 February
+- participation in the Real-Time lounge
+- helping attract sponsorship funds for the dev-room to pay for the Saturday night dinner and any other expenses
+- circulating this Call for Participation (text version) to other mailing lists
+
Related events - XMPP and RTC summits
+
The XMPP Standards Foundation (XSF) has traditionally held a summit in the days before FOSDEM. There is discussion about a similar summit taking place on 2 February 2018. XMPP Summit web site - please join the mailing list for details.
+
Social events and dinners
+
The traditional FOSDEM beer night occurs on Friday, 2 February.
+
On Saturday night, there are usually dinners associated with each of the dev-rooms. Most restaurants in Brussels are not so large so these dinners have space constraints and reservations are essential. Please subscribe to the Free-RTC mailing list for further details about the Saturday night dinner options and how you can register for a seat.
+
Spread the word and discuss
+
If you know of any mailing lists where this CfP would be relevant, please forward this email (text version). If this dev-room excites you, please blog or microblog about it, especially if you are submitting a talk.
+
If you regularly blog about RTC topics, please send details about your blog to the planet site administrators:
+
Please also link to the Planet sites from your own blog or web site as this helps everybody in the free real-time communications community.
+
Contact
+
For any private queries, contact us directly using the address fosdem-rtc-admin@freertc.org and for any other queries please ask on the Free-RTC mailing list.
+
The dev-room administration team:
+
--===============testboundary==--
From planet-debian Wed Oct 18 19:31:14 2017
@@ -591,286 +591,65 @@ To: to@example.com
From: planet-debian
Subject: Joey Hess: extending Scuttlebutt with Annah
Message-ID: http-joeyh-name-blog-entry-extending_scuttlebutt_with_annah
-User-Agent: feed2exec (0.8.0)
+User-Agent: feed2exec (0.13.1.dev9+g360c01d.d20190227)
Precedence: list
Auto-Submitted: auto-generated
Archived-At: http://joeyh.name/blog/entry/extending_Scuttlebutt_with_Annah/
--===============testboundary==
-Content-Type: text/html; charset="utf-8"
+Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
+Content-Transfer-Encoding: 8bit
-
This post has it all. Flotillas of sailboats, peer-to-peer wikis, games,
-and de-frogging. But, I need to start by talking about some tech you may not
-have heard of yet...
+http://joeyh.name/blog/entry/extending_Scuttlebutt_with_Annah/
-
-Scuttlebutt is way for friends to share feeds
-of content-addressed messages, peer-to-peer. Most Scuttlebutt clients
-currently look something like facebook, but there are also github clones,
-chess games, etc. Many private encrypted conversations going on.
-All entirely decentralized.
-(My scuttlebutt feed can be viewed here)
-Annah is a purely
-functional, strongly typed language. Its design allows individual atoms
-of the language to be put in content-addressed storage, right down to
-data types. So the value True
and a hash of the definition of what
-True
is can both be treated the same by Annah's compiler.
-(Not to be confused with my sister, Anna, or part of the Debian Installer
-with the same name that I wrote long ago.)
-
+This post has it all. Flotillas of sailboats, peer-to-peer wikis, games, and
+de-frogging. But, I need to start by talking about some tech you may not have
+heard of yet...
+ * [Scuttlebutt][1] is way for friends to share feeds of content-addressed messages, peer-to-peer. Most Scuttlebutt clients currently look something like facebook, but there are also github clones, chess games, etc. Many private encrypted conversations going on. All entirely decentralized.
+(My scuttlebutt feed can be viewed [here][2])
-So, how could these be combined together, and what might the result look
-like?
+ [1]:
+ [2]:
-Well, I could start by posting a Scuttlebutt message that defines what
-True is. And another
-Scuttlebutt message defining
-False. And then,
-another Scuttlebutt message to
-define the AND function,
-which would link to my messages for True
and False
. Continue this until
-I've built up enough Annah code to write some almost useful programs.
+ * [Annah][3] is a purely functional, strongly typed language. Its design allows individual atoms of the language to be put in content-addressed storage, right down to data types. So the value `True` and a hash of the definition of what `True` is can both be treated the same by Annah's compiler.
+(Not to be confused with my sister, Anna, or part of the Debian Installer with
+the same name that I wrote long ago.)
-Annah can't do any IO on its own (though it can model IO similarly to how
-Haskell does), so for programs to be actually useful, there needs to be
-Scuttlebutt client support. The way typing works in Annah, a program's type
-can be expressed as a Scuttlebutt link. So a Scuttlebutt client that wants
-to run Annah programs of a particular type can pick out programs that link
-to that type, and will know what type of data the program consumes and
-produces.
+ [3]:
-Here are a few ideas of what could be built, with fairly simple client-side
-support for different types of Annah programs...
+So, how could these be combined together, and what might the result look like?
-
-Shared dashboards.
-Boats in a flotilla are communicating via Scuttlebutt,
-and want to share a map of their planned courses. Coders collaborating
-via Scuttlebutt want to see an overview of the state of their project.
+Well, I could start by posting a Scuttlebutt message that [defines what True
+is][4]. And another Scuttlebutt message defining [False][5]. And then, another
+Scuttlebutt message to [define the AND function][6], which would link to my
+messages for `True` and `False`. Continue this until I've built up enough
+Annah code to write some almost useful programs.
-For this, the Scuttlebutt client needs a way to run a selected Annah
-program of type Dashboard
, and display its output like a Scuttlebutt
-message, in a dashboard window. The dashboard message gets updated
-whenever other Scuttlebutt messages come in. The Annah program picks out
-the messages it's interested in, and generates the dashboard message.
+ [4]:
+ [5]:
+ [6]:
-So, send a message updating your boat's position, and everyone sees it
-update on the map. Send a message with updated weather forecasts as
-they're received, and everyone can see the storm developing.
-Send another message updating a waypoint to avoid the storm,
-and steady as you go...
+Annah can't do any IO on its own (though it can model IO similarly to how
+Haskell does), so for programs to be actually useful, there needs to be
+Scuttlebutt client support. The way typing works in Annah, a program's type
+can be expressed as a Scuttlebutt link. So a Scuttlebutt client that wants to
+run Annah programs of a particular type can pick out programs that link to
+that type, and will know what type of data the program consumes and produces.
-The coders, meanwhile, probably tweak their dashboard's code every day.
-As they add git-ssb repos, they make the dashboard display an
-overview of their bugs. They get CI systems hooked in and feeding
-messages to Scuttlebutt, and make the dashboard go green or red. They
-make the dashboard A-B test itself to pick the right shade of red.
-And so on...
+Here are a few ideas of what could be built, with fairly simple client-side
+support for different types of Annah programs...
-The dashboard program is stored in Scuttlebutt so everyone is on the same
-page, and the most recent version of it posted by a team member gets
-used. (Just have the old version of the program notice when there's a
-newer version, and run that one..)
+ * **Shared dashboards.** [Boats in a flotilla are communicating via Scuttlebutt][7], and want to share a map of their planned courses. Coders collaborating via Scuttlebutt want to see an overview of the state of their project.
-(Also could be used in disaster response scenarios, where the data
-and visualization tools get built up on the fly in response to local needs,
-and are shared peer-to-peer in areas without internet.)
-Smart hyperlinks. When a hyperlink in a Scuttlebutt message points to a
-Annah program, optionally with some Annah data, clicking on it can
-run the program and display the messages that the program generates.
+ [7]:
-This is the most basic way a Scuttlebutt client could support Annah
-programs, and it could be used for tons of stuff. A few examples:
-
-
-- Hiding spoilers.
-Click on the link and it'll display a spoiler about a book/movie.
-- A link to whatever I was talking about one year ago today.
-That opens different messages as time goes by. Put it in your Scuttlebutt
-profile or something. (Requires a way for Annah to get the current
-date, which it normally has no way of accessing.)
-- Choose your own adventure or twine style games.
-Click on the link and the program starts the game, displaying
-links to choose between, and so on.
-- Links to custom views.
-For example, a link could lead to a combination of messages from
-several different, related channels. Or could filter messages in some
-way.
-
-
-Collaborative filtering. Suppose I don't want to see
-frog-related memes in my Scuttlebutt client. I can write a
-Annah program that calculates a message's frogginess, and outputs a
-Filtered Message
. It can leave a message unchanged, or filter it out,
-or perhaps minimize its display. I publish the Annah program on my feed,
-and tell my Scuttlebutt client to filter all messages through it before
-displaying them to me.
-
-I published the program in my Scuttlebutt feed, and so my friends
-can use it too. They can build other filtering functions for other
-stuff (such an an excess of orange in photos), and integrate my
-frog filter into their filter program by simply composing the two.
-
-If I like their filter, I can switch my client to using it. Or not.
-Filtering is thus subjective, like Scuttlebutt, and the subjectivity is
-expressed by picking the filter you want to use, or developing a
-better one.
-Wiki pages. Scuttlebutt is built on immutable append-only logs; it
-doesn't have editable wiki pages. But they can be built on top using
-Annah.
-
-A smart link to a wiki page is a reference to the Annah program
-that renders it. Of course being a wiki, there will be more smart
-links on the wiki page going to other wiki pages, and so on.
-
-The wiki page includes a smart link to edit it. The editor needs basic
-form support in the Scuttlebutt client; when the edited wiki page is
-posted, the Annah program diffs it against the previous version and
-generates an Edit
which gets posted to the user's feed. Rendering the
-page is just a matter of finding the Edit
messages for it from
-people who are allowed to edit it, and combining them.
-
-Anyone can fork a wiki page by posting an Edit
to their feed. And can
-then post a smart link to their fork of the page.
-
-And anyone can merge other forks into their wiki page (this posts a
-control message that makes the Annah program implementing the wiki accept
-those forks' Edit
messages). Or grant other users permission to edit
-the wiki page (another control message). Or grant other users
-permissions to grant other users permissions.
-
-There are lots of different ways you might want your wiki to work.
-No one wiki implementation, but lots of Annah programs. Others
-can interact with your wiki using the program you picked, or fork it and
-even switch the program used. Subjectivity again.
-User-defined board games. The Scuttlebutt client finds
-Scuttlebutt messages containing Annah programs of type Game
,
-and generates a tab with a list of available games.
-
-The players of a particular game all experience the same game interface,
-because the code for it is part of their shared Scuttlebutt message pool,
-and the code to use gets agreed on at the start of a game.
-
-To play a game, the Scuttlebutt client runs the Annah program, which
-generates a description of the current contents of the game board.
-
-So, for chess, use Annah to define a ChessMove
data type,
-and the Annah program takes the feeds of the two players, looks
-for messages containing a ChessMove
, and builds up a description
-of the chess board.
-
-As well as the pieces on the game board, the game board description
-includes Annah functions that get called when the user moves a
-game piece. That generates a new ChessMove
which gets recorded
-in the user's Scuttlebutt feed.
-
-This could support a wide variety of board games. If you don't mind the
-possibility that your opponent might cheat by peeking at the random seed,
-even games involving things like random card shuffles and dice rolls
-could be built. Also there can be games like Core Wars where the gamers
-themselves write Annah programs to run inside the game.
-
-Variants of games can be developed by modifying and reusing game
-programs. For example, timed chess is just the chess program
-with an added check on move time, and time clock display.
-Decentralized chat bots. Chat bots are all the rage (or were a few
-months ago, tech fads move fast), but in a decentralized system like
-Scuttlebutt, a bot running on a server somewhere would be a ugly point
-of centralization. Instead, write a Annah program for the bot.
-
-To launch the bot, publish a message in your own personal Scuttlebutt
-feed that contains the bot's program, and a nonce.
-
-The user's Scuttlebutt client takes care of the rest. It looks for messages
-with bot programs, and runs the bot's program. This generates or updates
-a Scuttlebutt message feed for the bot.
-
-The bot's program signs the messages in its feed using a private key
-that's generated by combining the user's public key, and the bot's nonce.
-So, the bot has one feed per user it talks to, with deterministic
-content, which avoids a problem with forking a Scuttlebutt feed.
-
-The bot-generated messages can be stored in the Scuttlebutt database like any
-other messages and replicated around. The bot appears as if it were a
-Scuttlebutt user. But you can have conversations with it while you're
-offline.
-
-(The careful reader may have noticed that deeply private messages sent to
-the bot can be decrypted by anyone! This bot thing is probably a bad idea
-really, but maybe the bot fad is over anyway. We can only hope. It's
-important that there be at least one bad idea in this list..)
-
-
-
-This kind of extensibility in a peer-to-peer system is exciting! With these
-new systems, we can consider lessons from the world wide web and replicate
-some of the good parts, while avoiding the bad. Javascript has been both
-good and bad for the web. The extensibility is great, and yet it's a
-neverending security and privacy nightmare, and it ties web pages ever more
-tightly to programs hidden away on servers. I believe that Annah combined
-with Scuttlebutt will comprehensively avoid those problems. Shall we build it?
-
-
-
-This exploration was sponsored by Jake Vosloo on
-Patreon.
---===============testboundary==
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 8bit
-
-http://joeyh.name/blog/entry/extending_Scuttlebutt_with_Annah/
-
-This post has it all. Flotillas of sailboats, peer-to-peer wikis, games, and
-de-frogging. But, I need to start by talking about some tech you may not have
-heard of yet...
-
- * [Scuttlebutt][1] is way for friends to share feeds of content-addressed messages, peer-to-peer. Most Scuttlebutt clients currently look something like facebook, but there are also github clones, chess games, etc. Many private encrypted conversations going on. All entirely decentralized.
-(My scuttlebutt feed can be viewed [here][2])
-
- [1]:
- [2]:
-
- * [Annah][3] is a purely functional, strongly typed language. Its design allows individual atoms of the language to be put in content-addressed storage, right down to data types. So the value `True` and a hash of the definition of what `True` is can both be treated the same by Annah's compiler.
-(Not to be confused with my sister, Anna, or part of the Debian Installer with
-the same name that I wrote long ago.)
-
- [3]:
-
-So, how could these be combined together, and what might the result look like?
-
-Well, I could start by posting a Scuttlebutt message that [defines what True
-is][4]. And another Scuttlebutt message defining [False][5]. And then, another
-Scuttlebutt message to [define the AND function][6], which would link to my
-messages for `True` and `False`. Continue this until I've built up enough
-Annah code to write some almost useful programs.
-
- [4]:
- [5]:
- [6]:
-
-Annah can't do any IO on its own (though it can model IO similarly to how
-Haskell does), so for programs to be actually useful, there needs to be
-Scuttlebutt client support. The way typing works in Annah, a program's type
-can be expressed as a Scuttlebutt link. So a Scuttlebutt client that wants to
-run Annah programs of a particular type can pick out programs that link to
-that type, and will know what type of data the program consumes and produces.
-
-Here are a few ideas of what could be built, with fairly simple client-side
-support for different types of Annah programs...
-
- * **Shared dashboards.** [Boats in a flotilla are communicating via Scuttlebutt][7], and want to share a map of their planned courses. Coders collaborating via Scuttlebutt want to see an overview of the state of their project.
-
- [7]:
-
-For this, the Scuttlebutt client needs a way to run a selected Annah program
-of type `Dashboard`, and display its output like a Scuttlebutt message, in a
-dashboard window. The dashboard message gets updated whenever other
-Scuttlebutt messages come in. The Annah program picks out the messages it's
-interested in, and generates the dashboard message.
+For this, the Scuttlebutt client needs a way to run a selected Annah program
+of type `Dashboard`, and display its output like a Scuttlebutt message, in a
+dashboard window. The dashboard message gets updated whenever other
+Scuttlebutt messages come in. The Annah program picks out the messages it's
+interested in, and generates the dashboard message.
So, send a message updating your boat's position, and everyone sees it update
on the map. Send a message with updated weather forecasts as they're received,
@@ -1005,53 +784,255 @@ This exploration was sponsored by Jake Vosloo on [Patreon][8].
[8]:
---===============testboundary==--
-
-From planet-debian Wed Oct 18 10:00:19 2017
-Content-Type: multipart/alternative; boundary="===============testboundary=="
-MIME-Version: 1.0
-Date: Wed, 18 Oct 2017 10:00:19 -0000
-To: to@example.com
-From: planet-debian
-Subject: Michal Čihař: Gammu 1.38.5
-Message-ID: https-blog-cihar-com-archives-2017-10-18-gammu-1385-utm_source-rss2
-User-Agent: feed2exec (0.8.0)
-Precedence: list
-Auto-Submitted: auto-generated
-Archived-At: https://blog.cihar.com/archives/2017/10/18/gammu-1385/?utm_source=rss2
-
--===============testboundary==
Content-Type: text/html; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-
Today, Gammu 1.38.5 has been released. After long period of bugfix only releases, this comes with several new noteworthy features.
-The biggest feature probably is that SMSD can now handle USSD messages as well. Those are usually used for things like checking remaining credit, but it's certainly not limited to this. This feature has been contributed thanks to funding on BountySource.
-You can read more information in the release announcement.
+
This post has it all. Flotillas of sailboats, peer-to-peer wikis, games,
+and de-frogging. But, I need to start by talking about some tech you may not
+have heard of yet...
-
-Filed under:
+
+Scuttlebutt is way for friends to share feeds
+of content-addressed messages, peer-to-peer. Most Scuttlebutt clients
+currently look something like facebook, but there are also github clones,
+chess games, etc. Many private encrypted conversations going on.
+All entirely decentralized.
+(My scuttlebutt feed can be viewed here)
+Annah is a purely
+functional, strongly typed language. Its design allows individual atoms
+of the language to be put in content-addressed storage, right down to
+data types. So the value True
and a hash of the definition of what
+True
is can both be treated the same by Annah's compiler.
+(Not to be confused with my sister, Anna, or part of the Debian Installer
+with the same name that I wrote long ago.)
+
-Debian
-English
+So, how could these be combined together, and what might the result look
+like?
-Gammu
+Well, I could start by posting a Scuttlebutt message that defines what
+True is. And another
+Scuttlebutt message defining
+False. And then,
+another Scuttlebutt message to
+define the AND function,
+which would link to my messages for True
and False
. Continue this until
+I've built up enough Annah code to write some almost useful programs.
-
---===============testboundary==
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 8bit
+Annah can't do any IO on its own (though it can model IO similarly to how
+Haskell does), so for programs to be actually useful, there needs to be
+Scuttlebutt client support. The way typing works in Annah, a program's type
+can be expressed as a Scuttlebutt link. So a Scuttlebutt client that wants
+to run Annah programs of a particular type can pick out programs that link
+to that type, and will know what type of data the program consumes and
+produces.
-https://blog.cihar.com/archives/2017/10/18/gammu-1385/?utm_source=rss2
+Here are a few ideas of what could be built, with fairly simple client-side
+support for different types of Annah programs...
-Today, [Gammu 1.38.5][1] has been released. After long period of bugfix only
-releases, this comes with several new noteworthy features.
+
+Shared dashboards.
+Boats in a flotilla are communicating via Scuttlebutt,
+and want to share a map of their planned courses. Coders collaborating
+via Scuttlebutt want to see an overview of the state of their project.
- [1]:
+For this, the Scuttlebutt client needs a way to run a selected Annah
+program of type Dashboard
, and display its output like a Scuttlebutt
+message, in a dashboard window. The dashboard message gets updated
+whenever other Scuttlebutt messages come in. The Annah program picks out
+the messages it's interested in, and generates the dashboard message.
-The biggest feature probably is that SMSD can now handle USSD messages as
+So, send a message updating your boat's position, and everyone sees it
+update on the map. Send a message with updated weather forecasts as
+they're received, and everyone can see the storm developing.
+Send another message updating a waypoint to avoid the storm,
+and steady as you go...
+
+The coders, meanwhile, probably tweak their dashboard's code every day.
+As they add git-ssb repos, they make the dashboard display an
+overview of their bugs. They get CI systems hooked in and feeding
+messages to Scuttlebutt, and make the dashboard go green or red. They
+make the dashboard A-B test itself to pick the right shade of red.
+And so on...
+
+The dashboard program is stored in Scuttlebutt so everyone is on the same
+page, and the most recent version of it posted by a team member gets
+used. (Just have the old version of the program notice when there's a
+newer version, and run that one..)
+
+(Also could be used in disaster response scenarios, where the data
+and visualization tools get built up on the fly in response to local needs,
+and are shared peer-to-peer in areas without internet.)
+Smart hyperlinks. When a hyperlink in a Scuttlebutt message points to a
+Annah program, optionally with some Annah data, clicking on it can
+run the program and display the messages that the program generates.
+
+This is the most basic way a Scuttlebutt client could support Annah
+programs, and it could be used for tons of stuff. A few examples:
+
+
+- Hiding spoilers.
+Click on the link and it'll display a spoiler about a book/movie.
+- A link to whatever I was talking about one year ago today.
+That opens different messages as time goes by. Put it in your Scuttlebutt
+profile or something. (Requires a way for Annah to get the current
+date, which it normally has no way of accessing.)
+- Choose your own adventure or twine style games.
+Click on the link and the program starts the game, displaying
+links to choose between, and so on.
+- Links to custom views.
+For example, a link could lead to a combination of messages from
+several different, related channels. Or could filter messages in some
+way.
+
+
+Collaborative filtering. Suppose I don't want to see
+frog-related memes in my Scuttlebutt client. I can write a
+Annah program that calculates a message's frogginess, and outputs a
+Filtered Message
. It can leave a message unchanged, or filter it out,
+or perhaps minimize its display. I publish the Annah program on my feed,
+and tell my Scuttlebutt client to filter all messages through it before
+displaying them to me.
+
+I published the program in my Scuttlebutt feed, and so my friends
+can use it too. They can build other filtering functions for other
+stuff (such an an excess of orange in photos), and integrate my
+frog filter into their filter program by simply composing the two.
+
+If I like their filter, I can switch my client to using it. Or not.
+Filtering is thus subjective, like Scuttlebutt, and the subjectivity is
+expressed by picking the filter you want to use, or developing a
+better one.
+Wiki pages. Scuttlebutt is built on immutable append-only logs; it
+doesn't have editable wiki pages. But they can be built on top using
+Annah.
+
+A smart link to a wiki page is a reference to the Annah program
+that renders it. Of course being a wiki, there will be more smart
+links on the wiki page going to other wiki pages, and so on.
+
+The wiki page includes a smart link to edit it. The editor needs basic
+form support in the Scuttlebutt client; when the edited wiki page is
+posted, the Annah program diffs it against the previous version and
+generates an Edit
which gets posted to the user's feed. Rendering the
+page is just a matter of finding the Edit
messages for it from
+people who are allowed to edit it, and combining them.
+
+Anyone can fork a wiki page by posting an Edit
to their feed. And can
+then post a smart link to their fork of the page.
+
+And anyone can merge other forks into their wiki page (this posts a
+control message that makes the Annah program implementing the wiki accept
+those forks' Edit
messages). Or grant other users permission to edit
+the wiki page (another control message). Or grant other users
+permissions to grant other users permissions.
+
+There are lots of different ways you might want your wiki to work.
+No one wiki implementation, but lots of Annah programs. Others
+can interact with your wiki using the program you picked, or fork it and
+even switch the program used. Subjectivity again.
+User-defined board games. The Scuttlebutt client finds
+Scuttlebutt messages containing Annah programs of type Game
,
+and generates a tab with a list of available games.
+
+The players of a particular game all experience the same game interface,
+because the code for it is part of their shared Scuttlebutt message pool,
+and the code to use gets agreed on at the start of a game.
+
+To play a game, the Scuttlebutt client runs the Annah program, which
+generates a description of the current contents of the game board.
+
+So, for chess, use Annah to define a ChessMove
data type,
+and the Annah program takes the feeds of the two players, looks
+for messages containing a ChessMove
, and builds up a description
+of the chess board.
+
+As well as the pieces on the game board, the game board description
+includes Annah functions that get called when the user moves a
+game piece. That generates a new ChessMove
which gets recorded
+in the user's Scuttlebutt feed.
+
+This could support a wide variety of board games. If you don't mind the
+possibility that your opponent might cheat by peeking at the random seed,
+even games involving things like random card shuffles and dice rolls
+could be built. Also there can be games like Core Wars where the gamers
+themselves write Annah programs to run inside the game.
+
+Variants of games can be developed by modifying and reusing game
+programs. For example, timed chess is just the chess program
+with an added check on move time, and time clock display.
+Decentralized chat bots. Chat bots are all the rage (or were a few
+months ago, tech fads move fast), but in a decentralized system like
+Scuttlebutt, a bot running on a server somewhere would be a ugly point
+of centralization. Instead, write a Annah program for the bot.
+
+To launch the bot, publish a message in your own personal Scuttlebutt
+feed that contains the bot's program, and a nonce.
+
+The user's Scuttlebutt client takes care of the rest. It looks for messages
+with bot programs, and runs the bot's program. This generates or updates
+a Scuttlebutt message feed for the bot.
+
+The bot's program signs the messages in its feed using a private key
+that's generated by combining the user's public key, and the bot's nonce.
+So, the bot has one feed per user it talks to, with deterministic
+content, which avoids a problem with forking a Scuttlebutt feed.
+
+The bot-generated messages can be stored in the Scuttlebutt database like any
+other messages and replicated around. The bot appears as if it were a
+Scuttlebutt user. But you can have conversations with it while you're
+offline.
+
+(The careful reader may have noticed that deeply private messages sent to
+the bot can be decrypted by anyone! This bot thing is probably a bad idea
+really, but maybe the bot fad is over anyway. We can only hope. It's
+important that there be at least one bad idea in this list..)
+
+
+
+This kind of extensibility in a peer-to-peer system is exciting! With these
+new systems, we can consider lessons from the world wide web and replicate
+some of the good parts, while avoiding the bad. Javascript has been both
+good and bad for the web. The extensibility is great, and yet it's a
+neverending security and privacy nightmare, and it ties web pages ever more
+tightly to programs hidden away on servers. I believe that Annah combined
+with Scuttlebutt will comprehensively avoid those problems. Shall we build it?
+
+
+
+This exploration was sponsored by Jake Vosloo on
+Patreon.
+--===============testboundary==--
+
+From planet-debian Wed Oct 18 10:00:19 2017
+Content-Type: multipart/alternative; boundary="===============testboundary=="
+MIME-Version: 1.0
+Date: Wed, 18 Oct 2017 10:00:19 -0000
+To: to@example.com
+From: planet-debian
+Subject: Michal Čihař: Gammu 1.38.5
+Message-ID: https-blog-cihar-com-archives-2017-10-18-gammu-1385-utm_source-rss2
+User-Agent: feed2exec (0.13.1.dev9+g360c01d.d20190227)
+Precedence: list
+Auto-Submitted: auto-generated
+Archived-At: https://blog.cihar.com/archives/2017/10/18/gammu-1385/?utm_source=rss2
+
+--===============testboundary==
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 8bit
+
+https://blog.cihar.com/archives/2017/10/18/gammu-1385/?utm_source=rss2
+
+Today, [Gammu 1.38.5][1] has been released. After long period of bugfix only
+releases, this comes with several new noteworthy features.
+
+ [1]:
+
+The biggest feature probably is that SMSD can now handle USSD messages as
well. Those are usually used for things like checking remaining credit, but
it's certainly not limited to this. This feature has been contributed thanks
to funding on [BountySource][2].
@@ -1069,6 +1050,25 @@ Filed under: [Debian][4] [English][5] [Gammu][6]
[6]:
+--===============testboundary==
+Content-Type: text/html; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+
+
Today, Gammu 1.38.5 has been released. After long period of bugfix only releases, this comes with several new noteworthy features.
+The biggest feature probably is that SMSD can now handle USSD messages as well. Those are usually used for things like checking remaining credit, but it's certainly not limited to this. This feature has been contributed thanks to funding on BountySource.
+You can read more information in the release announcement.
+
+
+Filed under:
+
+Debian
+
+English
+
+Gammu
+
+
--===============testboundary==--
From planet-debian Wed Oct 18 08:25:00 2017
@@ -1079,52 +1079,128 @@ To: to@example.com
From: planet-debian
Subject: Steinar H. Gunderson: Introducing Narabu, part 1: Introduction
Message-ID: http-blog-sesse-net-blog-tech-2017-10-18-09-25_introducing_narabu_part_1_introduction-html
-User-Agent: feed2exec (0.8.0)
+User-Agent: feed2exec (0.13.1.dev9+g360c01d.d20190227)
Precedence: list
Auto-Submitted: auto-generated
Archived-At: http://blog.sesse.net/blog/tech/2017-10-18-09-25_introducing_narabu_part_1_introduction.html
--===============testboundary==
-Content-Type: text/html; charset="utf-8"
+Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
-
Narabu is a new intraframe video codec, from the Japanese verb
-narabu (並ぶ), which means to line up or be parallel.
+http://blog.sesse.net/blog/tech/2017-10-18-09-25_introducing_narabu_part_1_introduction.html
-Let me first state straight up that Narabu isn't where I hoped it would be at
+Narabu is a new intraframe video codec, from the Japanese verb _narabu_ (並ぶ),
+which means to line up or be parallel.
+
+Let me first state straight up that Narabu isn't where I hoped it would be at
this stage; the encoder isn't fast enough, and I have to turn my attention to
other projects for a while. Nevertheless, I think it is interesting as a
research project in its own right, and I don't think it should stop me from
-trying to write up a small series. :-)
+trying to write up a small series. :-)
-In the spirit of Leslie
-Lamport,
-I'll be starting off with describing what problem I was trying to solve,
-which will hopefully make the design decisions a lot clearer. Subsequent
-posts will dive into background information and then finally Narabu itself.
+In the spirit of [Leslie Lamport][1], I'll be starting off with describing
+what problem I was trying to solve, which will hopefully make the design
+decisions a lot clearer. Subsequent posts will dive into background
+information and then finally Narabu itself.
-I want a codec to send signals between different instances of
-Nageru, my free software video mixer,
-and also longer-term between other software, such as recording or
-playout. The reason is pretty
-obvious for any sort of complex configuration; if you are doing e.g.
-both a stream mix and a bigscreen mix, they will naturally want to use
-many of the same sources, and sharing them over a single GigE connection
-might be easier than getting SDI repeaters/splitters, especially when
-you have a lot of them. (Also, in some cases, you might want to share
-synthetic signals, such as graphics, that never existed on SDI in the
-first place.)
+ [1]:
-This naturally leads to the following demands:
+I want a codec to send signals between different instances of [Nageru][2], my
+free software video mixer, and also longer-term between other software, such
+as recording or playout. The reason is pretty obvious for any sort of complex
+configuration; if you are doing e.g. both a stream mix and a bigscreen mix,
+they will naturally want to use many of the same sources, and sharing them
+over a single GigE connection might be easier than getting SDI
+repeaters/splitters, especially when you have a lot of them. (Also, in some
+cases, you might want to share synthetic signals, such as graphics, that never
+existed on SDI in the first place.)
-
-- Intraframe-only; every frame must be compressed independently.
-(This isn't strictly needed for all use cases, but is much more
-flexible, and common in any kind of broadcast.)
-- Need to handle 4:2:2 color, since that's what most capture sources
-give out, and we want to transmit the raw signals as much as possible.
-Fairly flexible in input resolution (divisible by 16 is okay, limited
+ [2]:
+
+This naturally leads to the following demands:
+
+ * Intraframe-only; every frame must be compressed independently. (This isn't strictly needed for all use cases, but is much more flexible, and common in any kind of broadcast.)
+ * Need to handle 4:2:2 color, since that's what most capture sources give out, and we want to transmit the raw signals as much as possible. Fairly flexible in input resolution (divisible by 16 is okay, limited to only a given set of resolutions is not).
+ * 720p60 video in less than one CPU core (ideally much less); the CPU can already pretty be busy with other work, like x264 encoding of the finished stream, and sharing four more inputs at the same time is pretty common. What matters is mostly a single encode+decode cycle, so fast decode doesn't help if the encoder is too slow.
+ * Target bitrates around 100-150 Mbit/sec, at similar quality to MJPEG (ie. 45 dB PSNR for most content). Multiple signals should fit into a normal GigE link at the same time, although getting it to work over 802.11 isn't a big priority.
+ * Both encoder and decoder robust to corrupted or malicious data; a dropped frame is fine, a crash is not.
+ * Does not depend on uncommon or expensive hardware, or GPUs from a specific manufacturer.
+ * GPLv3-compatible implementation. I already link to GPLv3 software, so I don't have a choice here; I cannot link to something non-free (and no antics with dlopen(), please).
+
+There's a bunch of intraframe formats around. The most obvious thing to do
+would be to use Intel Quick Sync to produce H.264 (intraframe H.264 blows
+basically everything else out of the sky in terms of PSNR, and QSV hardly uses
+any power at all), but sadly, that's limited to 4:2:0. I thought about
+encoding the three color planes as three different monochrome streams, but
+monochrome is not supported either.
+
+Then there's a host of software solutions. x264 can do 4:2:2, but even on
+ultrafast, it gobbles up an entire core or more at 720p60 at the target
+bitrates (mostly in entropy coding). FFmpeg has implementations of all kinds
+of other codecs, like DNxHD, CineForm, MJPEG and so on, but they all use much
+more CPU for encoding than the target. NDI would seem to fit the bill exactly,
+but fails the licensing check, and also isn't robust to corrupted or malicious
+data. (That, and their claims about video quality are dramatically overblown
+for any kinds of real video data I've tried.)
+
+So, sadly, this leaves only really one choice, namely rolling my own. I
+quickly figured I couldn't beat the world on CPU video codec speed, and didn't
+really want to spend my life optimizing AVX2 DCTs anyway, so again, the GPU
+will come to our rescue in the form of compute shaders. (There are some other
+GPU codecs out there, but all that I've found depend on CUDA, so they are
+NVIDIA-only, which I'm not prepared to commit to.) Of course, the GPU is quite
+busy in Nageru, but if one can make an efficient enough codec that one stream
+can work at only 5% or so of the GPU (meaning 1200 fps or so), it wouldn't
+really make a dent. (As a spoiler, the current Narabu encoder isn't there for
+720p60 on my GTX 950, but the decoder is.)
+
+In the next post, we'll look a bit at the GPU programming model, and what it
+means for how our codec needs to look like on the design level.
+
+
+--===============testboundary==
+Content-Type: text/html; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 8bit
+
+
Narabu is a new intraframe video codec, from the Japanese verb
+narabu (並ぶ), which means to line up or be parallel.
+
+Let me first state straight up that Narabu isn't where I hoped it would be at
+this stage; the encoder isn't fast enough, and I have to turn my attention to
+other projects for a while. Nevertheless, I think it is interesting as a
+research project in its own right, and I don't think it should stop me from
+trying to write up a small series. :-)
+
+In the spirit of Leslie
+Lamport,
+I'll be starting off with describing what problem I was trying to solve,
+which will hopefully make the design decisions a lot clearer. Subsequent
+posts will dive into background information and then finally Narabu itself.
+
+I want a codec to send signals between different instances of
+Nageru, my free software video mixer,
+and also longer-term between other software, such as recording or
+playout. The reason is pretty
+obvious for any sort of complex configuration; if you are doing e.g.
+both a stream mix and a bigscreen mix, they will naturally want to use
+many of the same sources, and sharing them over a single GigE connection
+might be easier than getting SDI repeaters/splitters, especially when
+you have a lot of them. (Also, in some cases, you might want to share
+synthetic signals, such as graphics, that never existed on SDI in the
+first place.)
+
+This naturally leads to the following demands:
+
+
-This week's edition was written by Ximin Luo, Chris Lamb and Holger Levsen &
-reviewed by a bunch of Reproducible Builds folks on IRC & the mailing lists.
+Misc.
+This week's edition was written by Ximin Luo, Chris Lamb and Holger Levsen &
+reviewed by a bunch of Reproducible Builds folks on IRC & the mailing lists.
--===============testboundary==--
From planet-debian Tue Oct 17 11:33:56 2017
@@ -2042,11 +2042,82 @@ To: to@example.com
From: planet-debian
Subject: Jonathan Dowland: Electric Dreams
Message-ID: http-jmtd-net-log-electric_dreams
-User-Agent: feed2exec (0.8.0)
+User-Agent: feed2exec (0.13.1.dev9+g360c01d.d20190227)
Precedence: list
Auto-Submitted: auto-generated
Archived-At: http://jmtd.net/log/electric_dreams/
+--===============testboundary==
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 8bit
+
+http://jmtd.net/log/electric_dreams/
+
+_No spoilers, for those who have yet to watch it..._
+
+Channel 4 have been broadcasting a new 10-part series called _Electric Dreams_
+, based on some of the short fiction of Philip K Dick. The series was
+commissioned after Channel 4 lost _Black Mirror_ to Netflix, perhaps to try
+and find something tonally similar. _Electric Dreams_ is executive-produced by
+Brian Cranston, who also stars in one of the episodes yet to broadcast.
+
+I've read all of PKD's short fiction[1][1] but it was a long time ago so I
+have mostly forgotten the stories upon which the series is based. I've quite
+enjoyed going back and re-reading them after watching the corresponding
+episodes to see what changes they've made. In some cases the changes are
+subtle or complementary, in other cases they've whittled the original story
+right out and installed a new one inside the shell. A companion compilation
+has been published with just the relevant short stories in it, and from what
+I've seen browsing it in a book shop it also contains short introductions
+which might be worth a read.
+
+ [1]:
+
+Things started strong with _The Hood Maker_ , which my wife also enjoyed,
+although she was disappointed to realise we wouldn't be revisiting those
+characters in the future. The world-building was strong enough that it seemed
+like a waste for a single episode.
+
+My favourite episode of those broadcast so far was _The Commuter_ , starring
+Timothy Spall. The changes made were complementary and immensely expanded the
+emotional range of the story. In some ways, a key aspect of the original story
+was completely inverted, which I found quite funny: my original take on Dick's
+story was Dick implying a particular outcome was horrific, whereas it becomes
+desirable in the TV episode.
+
+[Episode 4, *Crazy Diamond*][2]
+
+ [2]:
+
+Episode 4, _Crazy Diamond_
+
+One of the stories most hollowed-out was _Sales Pitch_ which was the basis for
+Tony Grisoni’s episode _Crazy Diamond_ , starring Steve Buscemi and Sidse
+Babett Knudsen. Buscemi was good but Knudsen totally stole every frame she was
+in. Fans of the cancelled Channel 4 show _Utopia_ should enjoy this one: both
+were directed by Marc Munden and the directing, photography and colour balance
+really recall it.
+
+The last episode broadcast was _Real Life_ directed by Ronald D Moore of
+_Battlestar Galactica_ reboot fame and starring Anna Paquin. Like _Sales
+Pitch_ it bears very little resemblance to the original story. It played
+around with similar ideas explored in a lot of Sci-Fi movies and TV shows but
+left me a little flat; I didn't think it contributed much that I hadn't seen
+before. I was disappointed that there was a relatively conclusive ending.
+There was a subversive humour in the Dick short that was completely lost in
+the retelling. The world design seemed pretty generic.
+
+I'm looking forward to _Autofac_ , which is one of the shorts I can remember
+particularly enjoying.
+
+* * *
+
+ 1. as collected in the 5 volumes of _The Collected Stories of Philip K Dick_ , although I don't doubt there are some stragglers that were missed out when that series was compiled.[ ↩][3]
+
+ [3]:
+
+
--===============testboundary==
Content-Type: text/html; charset="utf-8"
MIME-Version: 1.0
@@ -2117,91 +2188,147 @@ when that series was compiled.