Rework of blog
- Added support for metadata in blog entries - Modified blog/index.html and blog/entry.html templates to use metadata - Migrated the most recent post over to just a .rst file and added metadata
This commit is contained in:
@ -1,6 +1,74 @@
|
|||||||
=============
|
=============
|
||||||
0.9.4 Release
|
0.9.4 Release
|
||||||
=============
|
=============
|
||||||
|
.. meta::
|
||||||
|
:date: 2012-12-17
|
||||||
|
:category: release
|
||||||
|
:excerpt: 0.9.4 includes a fix for a network capacity bug, introduced in 0.9.2,
|
||||||
|
that was reducing network performance and reliability. It also includes
|
||||||
|
major changes in the in-network update system, and adds the capability
|
||||||
|
to update via in-network torrents.
|
||||||
|
|
||||||
.. raw:: html
|
0.9.4 includes a fix for a network capacity bug, introduced in 0.9.2,
|
||||||
:file: blog/2012/12/17/release-0.9.4.html
|
that was reducing network performance and reliability. It also includes
|
||||||
|
major changes in the in-network update system, and adds the capability
|
||||||
|
to update via in-network torrents.
|
||||||
|
|
||||||
|
We fixed several bugs in the i2psnark DHT implementation that was introduced
|
||||||
|
last release. For those of you using console or http proxy passwords,
|
||||||
|
we converted to the more-secure digest method and improved the security for console forms.
|
||||||
|
|
||||||
|
For those of you already running development builds, your router should automatically
|
||||||
|
update to 0.9.4-0 using the new in-network torrent facility.
|
||||||
|
For those running 0.9.3-0, you will update normally using in-network HTTP, and
|
||||||
|
we will have more information for you when we release 0.9.5.
|
||||||
|
|
||||||
|
Files are available on the `download page`_.
|
||||||
|
|
||||||
|
.. _`download page`: /download.html
|
||||||
|
|
||||||
|
**RELEASE DETAILS**
|
||||||
|
|
||||||
|
**Major Changes**
|
||||||
|
|
||||||
|
- Big rework of the update system; Preliminary support for updates via i2psnark
|
||||||
|
- Add per-destination outbound priorities
|
||||||
|
|
||||||
|
**Bug Fixes**
|
||||||
|
|
||||||
|
- Fix major bug that reduced SSU connection limits which reduced tunnel build success rates
|
||||||
|
- Fix bug with external I2CP that prevented some external apps from working
|
||||||
|
- Fixed several bugs in i2psnark DHT
|
||||||
|
- Fixed bug in i2psnark PEX that inflated peer counts
|
||||||
|
- Handle dropped I2CP messages better
|
||||||
|
- Reduce overhead of I2CP messages
|
||||||
|
- Enforce max size in transport outbound message queues
|
||||||
|
- Fixes for Windows eepget.bat (new installs and PPA only)
|
||||||
|
- Fix a bug that would drop messages of exactly 512 bytes in SSU
|
||||||
|
|
||||||
|
**Other**
|
||||||
|
|
||||||
|
- More performance improvements, memory reduction, and object churn reduction
|
||||||
|
- Better detection of network disconnections
|
||||||
|
- Further improvements in the SSU transport
|
||||||
|
- Add console password form
|
||||||
|
- Convert http proxy and console from basic to digest authentication for added security
|
||||||
|
- Improved verification of console form submissions, using jsp sessions. Cookies may now be required on forms, except when the console password is enabled
|
||||||
|
- Initial work on new interfaces to manage applications started via clients.config
|
||||||
|
- Increase minimum peer port to 1024
|
||||||
|
- Increase granularity of bandwidth limiter for smoother transmissions
|
||||||
|
- Translation updates: Chinese, French, German, Italian, Polish, Portuguese, Swedish, and Ukrainian
|
||||||
|
- Update GeoIP data (new installs and PPA only)
|
||||||
|
- Update wrapper to 3.5.16 (new installs and PPA only)
|
||||||
|
- New ARMv6 wrapper for Raspberry Pi
|
||||||
|
|
||||||
|
**SHA256 Checksums:**
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
c76bea15a6b7d98227466cc8025b1eb9069997e40e9d71ff49e55b2c8ac0b995 i2pinstall_0.9.4_windows.exe
|
||||||
|
8e670ba26c04176ace9246d91a09951975e2965b89628f620f5a3dff917298e4 i2pinstall_0.9.4.jar
|
||||||
|
1b7d9695555ed42142b04ad6bcda083cd1a064f6354b639ad2aef4d9cd474e06 i2psource_0.9.4.tar.bz2
|
||||||
|
0f369d9b85793f157ec67c4d59723a2ad0c1de2a0902d35e11c26a2c74add824 i2pupdate_0.9.4.zip
|
||||||
|
6e55d3c44d79b0727f5cd4075df4248e4d78f1736911e3504f6a8af45d973cfc i2pupdate.su2
|
||||||
|
561e521a707fab457c9dfe166d41b446affbff5bc58ddf770d192235f51f4e90 i2pupdate.sud
|
||||||
|
@ -1,65 +0,0 @@
|
|||||||
<p>0.9.4 includes a fix for a network capacity bug, introduced in 0.9.2,
|
|
||||||
that was reducing network performance and reliability. It also includes
|
|
||||||
major changes in the in-network update system, and adds the capability
|
|
||||||
to update via in-network torrents. </p>
|
|
||||||
|
|
||||||
<p>We fixed several bugs in the i2psnark DHT implementation that was introduced
|
|
||||||
last release. For those of you using console or http proxy passwords,
|
|
||||||
we converted to the more-secure digest method and improved the security for console forms.</p>
|
|
||||||
|
|
||||||
<p>For those of you already running development builds, your router should automatically
|
|
||||||
update to 0.9.4-0 using the new in-network torrent facility.
|
|
||||||
For those running 0.9.3-0, you will update normally using in-network HTTP, and
|
|
||||||
we will have more information for you when we release 0.9.5.</p>
|
|
||||||
|
|
||||||
<p>Files are available on the <a href="/download.html">download page</a>.</p>
|
|
||||||
|
|
||||||
<p><strong>RELEASE DETAILS</strong></p>
|
|
||||||
|
|
||||||
<p><strong>Major Changes</strong></p>
|
|
||||||
|
|
||||||
<p>- Big rework of the update system; Preliminary support for updates via i2psnark
|
|
||||||
<br />- Add per-destination outbound priorities</p>
|
|
||||||
|
|
||||||
<p><strong>Bug Fixes</strong></p>
|
|
||||||
|
|
||||||
<p>- Fix major bug that reduced SSU connection limits which reduced tunnel build success rates
|
|
||||||
<br />- Fix bug with external I2CP that prevented some external apps from working
|
|
||||||
<br />- Fixed several bugs in i2psnark DHT
|
|
||||||
<br />- Fixed bug in i2psnark PEX that inflated peer counts
|
|
||||||
<br />- Handle dropped I2CP messages better
|
|
||||||
<br />- Reduce overhead of I2CP messages
|
|
||||||
<br />- Enforce max size in transport outbound message queues
|
|
||||||
<br />- Fixes for Windows eepget.bat (new installs and PPA only)
|
|
||||||
<br />- Fix a bug that would drop messages of exactly 512 bytes in SSU</p>
|
|
||||||
|
|
||||||
<p><strong>Other</strong></p>
|
|
||||||
|
|
||||||
<p>- More performance improvements, memory reduction, and object churn reduction
|
|
||||||
<br />- Better detection of network disconnections
|
|
||||||
<br />- Further improvements in the SSU transport
|
|
||||||
<br />- Add console password form
|
|
||||||
<br />- Convert http proxy and console from basic to digest authentication for added security
|
|
||||||
<br />- Improved verification of console form submissions, using jsp sessions. Cookies may now be required on forms, except when the console password is enabled
|
|
||||||
<br />- Initial work on new interfaces to manage applications started via clients.config
|
|
||||||
<br />- Increase minimum peer port to 1024
|
|
||||||
<br />- Increase granularity of bandwidth limiter for smoother transmissions
|
|
||||||
<br />- Translation updates: Chinese, French, German, Italian, Polish, Portuguese, Swedish, and Ukrainian
|
|
||||||
<br />- Update GeoIP data (new installs and PPA only)
|
|
||||||
<br />- Update wrapper to 3.5.16 (new installs and PPA only)
|
|
||||||
<br />- New ARMv6 wrapper for Raspberry Pi</p>
|
|
||||||
|
|
||||||
<b>
|
|
||||||
SHA256 Checksums:
|
|
||||||
</b>
|
|
||||||
<pre>
|
|
||||||
|
|
||||||
c76bea15a6b7d98227466cc8025b1eb9069997e40e9d71ff49e55b2c8ac0b995 i2pinstall_0.9.4_windows.exe
|
|
||||||
8e670ba26c04176ace9246d91a09951975e2965b89628f620f5a3dff917298e4 i2pinstall_0.9.4.jar
|
|
||||||
1b7d9695555ed42142b04ad6bcda083cd1a064f6354b639ad2aef4d9cd474e06 i2psource_0.9.4.tar.bz2
|
|
||||||
0f369d9b85793f157ec67c4d59723a2ad0c1de2a0902d35e11c26a2c74add824 i2pupdate_0.9.4.zip
|
|
||||||
6e55d3c44d79b0727f5cd4075df4248e4d78f1736911e3504f6a8af45d973cfc i2pupdate.su2
|
|
||||||
561e521a707fab457c9dfe166d41b446affbff5bc58ddf770d192235f51f4e90 i2pupdate.sud
|
|
||||||
|
|
||||||
|
|
||||||
</pre>
|
|
@ -8,6 +8,14 @@ import os.path
|
|||||||
from i2p2www import BLOG_DIR
|
from i2p2www import BLOG_DIR
|
||||||
|
|
||||||
|
|
||||||
|
SUPPORTED_METATAGS = {
|
||||||
|
'author': u'I2P devs',
|
||||||
|
'category': None,
|
||||||
|
'date': u'1970-01-01',
|
||||||
|
'excerpt': u'',
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
# Blog helper methods
|
# Blog helper methods
|
||||||
|
|
||||||
@ -15,14 +23,14 @@ def get_blog_feed_items(num=0):
|
|||||||
entries = get_blog_entries(num)
|
entries = get_blog_entries(num)
|
||||||
items = []
|
items = []
|
||||||
for entry in entries:
|
for entry in entries:
|
||||||
parts = render_blog_entry(entry[0])
|
meta = entry[3]
|
||||||
if parts:
|
parts = entry[4]
|
||||||
a = {}
|
a = {}
|
||||||
a['title'] = parts['title']
|
a['title'] = parts['title']
|
||||||
a['content'] = parts['fragment']
|
a['content'] = meta['excerpt'] if len(meta['excerpt']) > 0 else parts['fragment']
|
||||||
a['url'] = url_for('blog_entry', lang=g.lang, slug=entry[0])
|
a['url'] = url_for('blog_entry', lang=g.lang, slug=entry[0])
|
||||||
a['updated'] = datetime.datetime.strptime(entry[1], '%Y-%m-%d')
|
a['updated'] = datetime.datetime.strptime(meta['date'], '%Y-%m-%d')
|
||||||
items.append(a)
|
items.append(a)
|
||||||
return items
|
return items
|
||||||
|
|
||||||
def get_blog_entries(num=0):
|
def get_blog_entries(num=0):
|
||||||
@ -32,10 +40,13 @@ def get_blog_entries(num=0):
|
|||||||
slugs = get_blog_slugs(num)
|
slugs = get_blog_slugs(num)
|
||||||
entries= []
|
entries= []
|
||||||
for slug in slugs:
|
for slug in slugs:
|
||||||
date = get_date_from_slug(slug)
|
parts = render_blog_entry(slug)
|
||||||
titlepart = slug.rsplit('/', 1)[1]
|
if parts:
|
||||||
title = ' '.join(titlepart.split('_'))
|
meta = get_metadata_from_meta(parts['meta'])
|
||||||
entries.append((slug, date, title))
|
date = get_date_from_slug(slug)
|
||||||
|
titlepart = slug.rsplit('/', 1)[1]
|
||||||
|
title = ' '.join(titlepart.split('_'))
|
||||||
|
entries.append((slug, date, title, meta, parts))
|
||||||
return entries
|
return entries
|
||||||
|
|
||||||
def get_blog_slugs(num=0):
|
def get_blog_slugs(num=0):
|
||||||
@ -80,3 +91,11 @@ def render_blog_entry(slug):
|
|||||||
content = fd.read()
|
content = fd.read()
|
||||||
|
|
||||||
return publish_parts(source=content, source_path=BLOG_DIR, writer_name="html")
|
return publish_parts(source=content, source_path=BLOG_DIR, writer_name="html")
|
||||||
|
|
||||||
|
def get_metadata_from_meta(meta):
|
||||||
|
metaLines = meta.split('\n')
|
||||||
|
ret = {}
|
||||||
|
for metaTag in SUPPORTED_METATAGS:
|
||||||
|
metaLine = [s for s in metaLines if 'name="%s"' % metaTag in s]
|
||||||
|
ret[metaTag] = metaLine[0].split('content="')[1].split('"')[0] if len(metaLine) > 0 else SUPPORTED_METATAGS[metaTag]
|
||||||
|
return ret
|
||||||
|
@ -2,7 +2,7 @@ from flask import abort, render_template, request
|
|||||||
from werkzeug.contrib.atom import AtomFeed
|
from werkzeug.contrib.atom import AtomFeed
|
||||||
|
|
||||||
from i2p2www import BLOG_ENTRIES_PER_PAGE
|
from i2p2www import BLOG_ENTRIES_PER_PAGE
|
||||||
from i2p2www.blog.helpers import get_blog_entries, get_blog_feed_items, render_blog_entry
|
from i2p2www.blog.helpers import get_blog_entries, get_blog_feed_items, get_metadata_from_meta, render_blog_entry
|
||||||
from i2p2www.helpers import Pagination, get_for_page
|
from i2p2www.helpers import Pagination, get_for_page
|
||||||
|
|
||||||
|
|
||||||
@ -22,8 +22,9 @@ def blog_entry(slug):
|
|||||||
parts = render_blog_entry(slug)
|
parts = render_blog_entry(slug)
|
||||||
|
|
||||||
if parts:
|
if parts:
|
||||||
|
meta = get_metadata_from_meta(parts['meta'])
|
||||||
# now just pass to simple template file and we are done
|
# now just pass to simple template file and we are done
|
||||||
return render_template('blog/entry.html', parts=parts, title=parts['title'], body=parts['fragment'], slug=slug)
|
return render_template('blog/entry.html', parts=parts, title=parts['title'], body=parts['fragment'], slug=slug, meta=meta)
|
||||||
else:
|
else:
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
{% extends "global/layout.html" %}
|
{% extends "global/layout.html" %}
|
||||||
{% block title %}{{ title }} - Blog{% endblock %}
|
{% block title %}{{ title }} - Blog{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<ul id="blog-entry-info">
|
||||||
|
<li class="date">{{ meta.date }}</li>
|
||||||
|
<li class="author">{{ meta.author }}</li>
|
||||||
|
<li class="category">{{ meta.category }}</li>
|
||||||
|
</ul>
|
||||||
{% autoescape false %}
|
{% autoescape false %}
|
||||||
{{ body }}
|
{{ body }}
|
||||||
{% endautoescape %}
|
{% endautoescape %}
|
||||||
|
@ -5,10 +5,25 @@
|
|||||||
{%- endblock %}
|
{%- endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<p>Some descriptive text.</p>
|
<p>Some descriptive text.</p>
|
||||||
<ul class="infolist">
|
<ul id="blog-entries">
|
||||||
{% for entry in entries -%}
|
{% for entry in entries %}
|
||||||
<li>{{ entry[1] }} - <a href="{{ url_for('blog_entry', slug=entry[0]) }}">{{ entry[2] }}</a></li>
|
<li>
|
||||||
{%- endfor %}
|
<article>
|
||||||
|
<header>
|
||||||
|
<a href="{{ url_for('blog_entry', slug=entry[0]) }}">{{ entry[2] }}</a>
|
||||||
|
</header>
|
||||||
|
{%- if entry[3].excerpt %}
|
||||||
|
<p>{{ entry[3].excerpt }}</p>
|
||||||
|
{%- endif %}
|
||||||
|
<footer>
|
||||||
|
<ul>
|
||||||
|
<li>{{ entry[1] }}</li>
|
||||||
|
<li>{{ entry[3].author }}</li>
|
||||||
|
</ul>
|
||||||
|
</footer>
|
||||||
|
</article>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
{%- from "global/macros" import render_pagination with context -%}
|
{%- from "global/macros" import render_pagination with context -%}
|
||||||
{{ render_pagination(pagination) | safe }}
|
{{ render_pagination(pagination) | safe }}
|
||||||
|
Reference in New Issue
Block a user