CSS : Improve appearance of list of tags;

Python : Add an error message to page URL;
Python : Limit number of tags of each entry to 5 tags;
README : Update Subtitle, Future features and Instructions.
XHTML  : Add titles to templates;
XHTML  : Add control characters U+200A HAIR SPACE and U+200B ZERO WIDTH SPACE (temporary);
XHTML  : Various of minor corrections and fixes.
This commit is contained in:
Schimon Jehudah, Adv. 2024-08-25 12:44:59 +03:00
parent 100ccdd489
commit 3d9e5b2e02
30 changed files with 339 additions and 142 deletions

View file

@ -15,7 +15,7 @@ types adc, dweb, ed2k, feed, ftp, gemini, geo, gopher, http, ipfs, irc, magnet,
mailto, monero, mms, news, sip, udp, xmpp and any scheme and type that you mailto, monero, mms, news, sip, udp, xmpp and any scheme and type that you
desire. desire.
# Technicalities ## Technicalities
Blasta is a federated bookmarking system which is based on XMPP and stores Blasta is a federated bookmarking system which is based on XMPP and stores
bookmarks on your own XMPP account; to achieve this task, Blasta utilizes the bookmarks on your own XMPP account; to achieve this task, Blasta utilizes the
@ -48,8 +48,9 @@ The connection to the Blasta system is made with XMPP accounts.
- Atom Syndication Format; - Atom Syndication Format;
- Federation; - Federation;
- Filters; - Filters;
- Pin directory; - Pin;
- Publish-Subscribe. - Publish-Subscribe;
- Report.
## Requirements ## Requirements
@ -67,7 +68,7 @@ Use the following commands to start Blasta.
```shell ```shell
$ git clone https://git.xmpp-it.net/sch/Blasta $ git clone https://git.xmpp-it.net/sch/Blasta
$ cd Blasta/ $ cd Blasta/
python -m uvicorn blasta:app --reload $ python -m uvicorn blasta:app --reload
``` ```
Open URL http://localhost:8000/ and connect with your Jabber ID. Open URL http://localhost:8000/ and connect with your Jabber ID.

View file

@ -751,6 +751,10 @@ class HttpInstance:
# It does not seem to actually filter tags. # It does not seem to actually filter tags.
# NOTE Yes. It does work. # NOTE Yes. It does work.
# See function "cache_items_and_tags". # See function "cache_items_and_tags".
# TODO Search by query
#if param_query:
if param_tags or param_tld or param_filetype or param_protocol: if param_tags or param_tld or param_filetype or param_protocol:
tags_list = param_tags.split('+') tags_list = param_tags.split('+')
if len(tags_list) == 1: if len(tags_list) == 1:
@ -1834,15 +1838,16 @@ class HttpInstance:
exist = True exist = True
break break
else: else:
print('IQ ISSUE?') message = 'XMPP system message » Error: {}.'.format(iq)
breakpoint() description = 'The requested bookmark could not be retrieved'
print('IQ ISSUE?') path = 'error'
return result_post(request, jabber_id, description, message, path)
if exist: if exist:
# TODO Perhaps adding a paragraph with "your tags" and "who else has tagged this link" # TODO Perhaps adding a paragraph with "your tags" and "who else has tagged this link"
# and keep the (5 item) limit. # and keep the (5 item) limit.
#entry = Syndication.extract_items(item_payload, limit=True) #entry = Syndication.extract_items(item_payload)
entry = Syndication.extract_items(item_payload) # NOTE Display only 5 items, as all the other tags appear at the list of "Related tags".
entry = Syndication.extract_items(item_payload, limit=True)
if entry: if entry:
#url_hash = iq_item['id'] #url_hash = iq_item['id']
url_hash = Utilities.hash_url_to_md5(entry['link']) url_hash = Utilities.hash_url_to_md5(entry['link'])
@ -1854,11 +1859,12 @@ class HttpInstance:
entry['name'] = name entry['name'] = name
entry['url_hash'] = url_hash entry['url_hash'] = url_hash
entry['published_mod'] = Utilities.convert_iso8601_to_readable(entry['published']) entry['published_mod'] = Utilities.convert_iso8601_to_readable(entry['published'])
#entry['tags'] = entry['tags'][:5]
entries.append(entry) entries.append(entry)
tags_list = {} tags_list = {}
tags_and_instances = SQLite.get_tags_and_instances_by_url_hash(db_file, url_hash) tags_and_instances = SQLite.get_tags_and_instances_by_url_hash(db_file, url_hash)
for tag, instances in tags_and_instances: tags_list[tag] = instances for tag, instances in tags_and_instances: tags_list[tag] = instances
else: else: # NOTE Is it possible to activate this else statement? Consider removal.
# https://fastapi.tiangolo.com/tutorial/handling-errors/ # https://fastapi.tiangolo.com/tutorial/handling-errors/
#raise HTTPException(status_code=404, detail="Item not found") #raise HTTPException(status_code=404, detail="Item not found")
message = 'Blasta system message » Error: Not found.' message = 'Blasta system message » Error: Not found.'
@ -1930,7 +1936,6 @@ class HttpInstance:
description = 'The requested bookmark does not exist' description = 'The requested bookmark does not exist'
path = 'error' path = 'error'
return result_post(request, jabber_id, description, message, path) return result_post(request, jabber_id, description, message, path)
return response
message = 'Information for URL {}'.format(entries[0]['link']) # entry[2] message = 'Information for URL {}'.format(entries[0]['link']) # entry[2]
description = 'Discover new links and see who shares them' description = 'Discover new links and see who shares them'
template_file = 'browse.xhtml' template_file = 'browse.xhtml'
@ -1977,12 +1982,13 @@ class HttpInstance:
db_file = 'main.sqlite' db_file = 'main.sqlite'
instances = SQLite.get_entry_instances_by_url_hash(db_file, url_hash) instances = SQLite.get_entry_instances_by_url_hash(db_file, url_hash)
timestamp = datetime.now().isoformat() timestamp = datetime.now().isoformat()
tags_new = Data.organize_tags(tags) if tags else ''
entry = {'title' : title.strip(), entry = {'title' : title.strip(),
'link' : url.strip(), 'link' : url.strip(),
'summary' : summary.strip() if summary else '', 'summary' : summary.strip() if summary else '',
'published' : published, 'published' : published,
'updated' : timestamp, 'updated' : timestamp,
'tags' : Data.organize_tags(tags) if tags else '', 'tags' : tags_new,
'url_hash' : url_hash, 'url_hash' : url_hash,
'jid' : jabber_id, 'jid' : jabber_id,
'name' : name, 'name' : name,
@ -2051,18 +2057,22 @@ class HttpInstance:
if node == 'public': if node == 'public':
tags_valid = [] tags_valid = []
tags_invalid = [] tags_invalid = []
tags_list = tags.split(',') #tags_list_new = tags.split(',')
tags_old_list = tags_old.split(',') tags_list_new = tags_new
for tag in tags_old_list: tags_list_old = tags_old.split(',')
if tag not in tags_list: for tag in tags_list_old:
if tag not in tags_list_new:
tags_invalid.append(tag) tags_invalid.append(tag)
for tag in tags_list: for tag in tags_list_new:
if tag not in tags_old_list: if tag not in tags_list_old:
tags_valid.append(tag) tags_valid.append(tag)
# FIXME Variable tags_valid is not in use.
# NOTE Variable tags_valid might not be needed. See function associate_entries_tags_jids.
await SQLite.delete_combination_row_by_entry_id_and_tag_id_and_jid_id(db_file, url_hash, tags_invalid, jabber_id) await SQLite.delete_combination_row_by_entry_id_and_tag_id_and_jid_id(db_file, url_hash, tags_invalid, jabber_id)
await SQLite.add_tags(db_file, [entry]) await SQLite.add_tags(db_file, [entry])
# Slow (high I/O) # Slow (high I/O)
if not SQLite.get_entry_id_by_url_hash(db_file, url_hash): entry_id = SQLite.get_entry_id_by_url_hash(db_file, url_hash)
if not entry_id:
await SQLite.add_new_entries(db_file, [entry]) # Is this line needed? await SQLite.add_new_entries(db_file, [entry]) # Is this line needed?
await SQLite.associate_entries_tags_jids(db_file, entry) await SQLite.associate_entries_tags_jids(db_file, entry)
#elif not SQLite.is_jid_associated_with_url_hash(db_file, jabber_id, url_hash): #elif not SQLite.is_jid_associated_with_url_hash(db_file, jabber_id, url_hash):
@ -2072,12 +2082,14 @@ class HttpInstance:
# Entry for HTML # Entry for HTML
entry['published_mod'] = Utilities.convert_iso8601_to_readable(published) entry['published_mod'] = Utilities.convert_iso8601_to_readable(published)
entry['updated_mod'] = Utilities.convert_iso8601_to_readable(timestamp) entry['updated_mod'] = Utilities.convert_iso8601_to_readable(timestamp)
entry['tags'] = entry['tags'][:5]
entries = [entry] entries = [entry]
template_file = 'browse.xhtml' template_file = 'browse.xhtml'
template_dict = { template_dict = {
'request': request, 'request': request,
'description': description, 'description': description,
'entries': entries, 'entries': entries,
'exist': True,
'jabber_id': jabber_id, 'jabber_id': jabber_id,
'journal': journal, 'journal': journal,
'message': message, 'message': message,
@ -2085,7 +2097,8 @@ class HttpInstance:
'param_hash': param_hash, 'param_hash': param_hash,
'path': path, 'path': path,
'pubsub_jid': jabber_id_pubsub, 'pubsub_jid': jabber_id_pubsub,
'syndicate': syndicate} 'syndicate': syndicate,
'tags' : tags_new}
response = templates.TemplateResponse(template_file, template_dict) response = templates.TemplateResponse(template_file, template_dict)
response.headers["Content-Type"] = "application/xhtml+xml" response.headers["Content-Type"] = "application/xhtml+xml"
return response return response
@ -4556,6 +4569,10 @@ class SQLite:
cur = conn.cursor() cur = conn.cursor()
cur.execute(sql, par) cur.execute(sql, par)
# NOTE The result was ordered by number of instances
# ORDER BY main_tags.instances DESC
# And has been changed to order of alphabet
# ORDER BY main_tags.tag ASC
def get_tags_by_entry_id(db_file, entry_id): def get_tags_by_entry_id(db_file, entry_id):
""" """
Get tags by an ID entry. Get tags by an ID entry.
@ -4577,11 +4594,11 @@ class SQLite:
# .format(function_name, db_file, index_first)) # .format(function_name, db_file, index_first))
sql = ( sql = (
""" """
SELECT main_tags.tag SELECT DISTINCT main_tags.tag
FROM main_tags FROM main_tags
INNER JOIN combination_entries_tags_jids ON main_tags.id = combination_entries_tags_jids.tag_id INNER JOIN combination_entries_tags_jids ON main_tags.id = combination_entries_tags_jids.tag_id
WHERE combination_entries_tags_jids.entry_id = ? WHERE combination_entries_tags_jids.entry_id = ?
ORDER BY main_tags.instances DESC ORDER BY main_tags.tag ASC
LIMIT 5; LIMIT 5;
""" """
) )

View file

@ -147,7 +147,19 @@ form > * {
width: 15%; width: 15%;
/* float: right; */ /* float: right; */
/* width: 200px; */ /* width: 200px; */
}
#related-tags dd {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
#related-tags dd:hover {
overflow: unset;
overflow-wrap: break-word; overflow-wrap: break-word;
text-overflow: unset;
white-space: unset;
} }
#content { #content {

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / about</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / {{path}}</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / atomsub</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
@ -53,8 +53,12 @@
<div id="main" class="row"> <div id="main" class="row">
<div id="content"> <div id="content">
<h2>&nbsp; PubSub Bookmarks</h2> <h2>&nbsp; PubSub Bookmarks</h2>
<p>» The master standard for HTML.</p> <p>
<h3>Atomsub</h3> » The master standard for HTML.
</p>
<h3>
Atomsub
</h3>
<p> <p>
Atomsub, or Atom Over XMPP, is a simple and yet ingenious Atomsub, or Atom Over XMPP, is a simple and yet ingenious
idea which was realized by the gentlemen: Peter Saint-Andre; idea which was realized by the gentlemen: Peter Saint-Andre;
@ -82,7 +86,9 @@
<p> <p>
<a href="https://datatracker.ietf.org/meeting/66/materials/slides-66-atompub-1.pdf"> <a href="https://datatracker.ietf.org/meeting/66/materials/slides-66-atompub-1.pdf">
datatracker.ietf.org datatracker.ietf.org
</a> (PDF) </a>
&#8203;&#8202;
(PDF)
</p> </p>
</li> </li>
<li> <li>
@ -134,6 +140,7 @@
<a href="https://xmpp.org/extensions/xep-0277.html"> <a href="https://xmpp.org/extensions/xep-0277.html">
xmpp.org xmpp.org
</a> </a>
&#8203;&#8202;
<a href="https://libervia.org/"> <a href="https://libervia.org/">
libervia.org libervia.org
</a> </a>
@ -153,6 +160,7 @@
<a href="https://xmpp.org/extensions/xep-0472.html"> <a href="https://xmpp.org/extensions/xep-0472.html">
xmpp.org xmpp.org
</a> </a>
&#8203;&#8202;
<a href="https://movim.eu/"> <a href="https://movim.eu/">
movim.eu movim.eu
</a> </a>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / {{path}}</title>
<link rel="shortcut icon" href="/graphic/blasta.svg" /> <link rel="shortcut icon" href="/graphic/blasta.svg" />
<link rel="icon" type="image/svg+xml" href="/graphic/blasta.svg" /> <link rel="icon" type="image/svg+xml" href="/graphic/blasta.svg" />
<link rel="stylesheet" type="text/css" media="screen" <link rel="stylesheet" type="text/css" media="screen"
@ -135,6 +135,7 @@
href="{% if jid %}/jid/{{jid}}{% elif path in ('query', 'url') %}/{% endif %}?tags={{tag}}"> href="{% if jid %}/jid/{{jid}}{% elif path in ('query', 'url') %}/{% endif %}?tags={{tag}}">
{{tag}} {{tag}}
</a> </a>
&#8203;&#8202;
{% endfor %} {% endfor %}
{% endif %} {% endif %}
by by
@ -166,6 +167,7 @@
<span>details</span> <span>details</span>
{% endif %} {% endif %}
</a> </a>
&#8203;&#8202;
at at
<span class="dt-published date" <span class="dt-published date"
datetime="{{entry['published']}}"> datetime="{{entry['published']}}">
@ -186,7 +188,10 @@
<a href="{% if jid %}/jid/{{jid}}{% elif path in ('query', 'url') %}/{% endif %}?tags={{tag}}"> <a href="{% if jid %}/jid/{{jid}}{% elif path in ('query', 'url') %}/{% endif %}?tags={{tag}}">
{{tag}} {{tag}}
</a> </a>
({{tags[tag]}}) &#8203;&#8202;
{% if tags[tag] %}
({{tags[tag]}})
{% endif %}
</dd> </dd>
{% endfor %} {% endfor %}
<dd> <dd>
@ -215,17 +220,19 @@
{% endif %} {% endif %}
<div id="subscribe" class="row"> <div id="subscribe" class="row">
<p> <p>
<img alt="💡" src="/graphic/xmpp.svg" width="16" height="16"/>
<a href="xmpp:{{pubsub_jid}}?pubsub;action=subscribe;node={{node_id}}"> <a href="xmpp:{{pubsub_jid}}?pubsub;action=subscribe;node={{node_id}}">
<img src="/graphic/xmpp.svg" width="16" height="16"/>
PubSub PubSub
</a> </a>
&#8203;&#8202;
and and
<img alt="⚛" class="enlarge" src="/graphic/syndicate.svg" width="16" height="16"/>
<a href="/{{syndicate}}?mode=feed{% if param_tags %}&amp;tags={{param_tags}}{% endif %}{% if param_url %}&amp;url={{param_url}}{% endif %}{% if param_hash %}&amp;hash={{param_hash}}{% endif %}"> <a href="/{{syndicate}}?mode=feed{% if param_tags %}&amp;tags={{param_tags}}{% endif %}{% if param_url %}&amp;url={{param_url}}{% endif %}{% if param_hash %}&amp;hash={{param_hash}}{% endif %}">
<img src="/graphic/syndicate.svg" width="16" height="16"/>
RSS RSS
<!-- img src="/graphic/atom.svg" width="36" height="14" alt="Atom"/ --> <!-- img src="/graphic/atom.svg" width="36" height="14" alt="Atom"/ -->
</a> </a>
feeds for this page are available. &#8203;&#8202;
syndication feeds for this page are available.
</p> </p>
</div> </div>
<div id="footer" class="row"> <div id="footer" class="row">

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / connect</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / contact</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / {{path}}</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / feeds</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / help</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / ideas</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
@ -53,30 +53,42 @@
<div id="main" class="row"> <div id="main" class="row">
<div id="content"> <div id="content">
<h2>&nbsp; PubSub Bookmarks</h2> <h2>&nbsp; PubSub Bookmarks</h2>
<p>» Some ideas which illustrate potential uses for Blasta.</p> <p>
<h3>The things that you can do with Blasta are endless</h3> » Some ideas which illustrate potential uses for Blasta.
</p>
<h3>
The things that you can do with Blasta are endless
</h3>
<p> <p>
Blasta is an open-ended indexing system, and, as such, it Blasta is an open-ended indexing system, and, as such, it
provides a versatile platform with which you have the provides a versatile platform with which you have the
ability to tailor its usage according to your desired ability to tailor its usage according to your desired
preferences. Here are some illustrative scenarios: preferences. Here are some illustrative scenarios:
</p> </p>
<h4>Research</h4> <h4>
Research
</h4>
<p> <p>
Whether you are composing an article, delving into an Whether you are composing an article, delving into an
industry, or diligently working on your dissertation, industry, or diligently working on your dissertation,
leverage Blasta to organize and store your online source leverage Blasta to organize and store your online source
materials and insights. materials and insights.
</p> </p>
<h4>Podcast</h4> <h4>
Podcast
</h4>
<p> <p>
Explore a plethora of captivating podcasts by visiting Explore a plethora of captivating podcasts by visiting
<a href="{{origin}}/tag/podcast?filetype=spx"> <a href="{{origin}}/tag/podcast?filetype=spx">
/tag/podcast?filetype=spx /tag/podcast?filetype=spx
</a> or </a>
&#8203;&#8202;
or
<a href="{{origin}}/tag/podcast?filetype=ogg"> <a href="{{origin}}/tag/podcast?filetype=ogg">
/tag/podcast?filetype=ogg /tag/podcast?filetype=ogg
</a> and enjoy enriching content. </a>
&#8203;&#8202;
and enjoy enriching content.
</p> </p>
<p> <p>
Additionally, Blasta offers Additionally, Blasta offers
@ -86,7 +98,9 @@
you are a podcaster, upload your spx, ogg or mp3 files to you are a podcaster, upload your spx, ogg or mp3 files to
Blasta to generate a dedicated feed for your audience. Blasta to generate a dedicated feed for your audience.
</p> </p>
<h4>News</h4> <h4>
News
</h4>
<p> <p>
If you are intending to start a site of news flash, then If you are intending to start a site of news flash, then
Blasta can be an adequate solution for you. Blasta can be an adequate solution for you.
@ -94,7 +108,9 @@
<p> <p>
Additionally, you can also use Blasta to manage your notes. Additionally, you can also use Blasta to manage your notes.
</p> </p>
<h4>Travel</h4> <h4>
Travel
</h4>
<p> <p>
Facilitate trip planning by saving links related to Facilitate trip planning by saving links related to
accommodations, activities, and transportation on Blasta accommodations, activities, and transportation on Blasta
@ -103,7 +119,9 @@
with friends and family members by utilizing the tag with friends and family members by utilizing the tag
"for:{% if jabber_id %}{{jabber_id}}{% else %}jid{% endif %}". "for:{% if jabber_id %}{{jabber_id}}{% else %}jid{% endif %}".
</p> </p>
<h4>Employment</h4> <h4>
Employment
</h4>
<p> <p>
Stay updated on job openings and industry trends by Stay updated on job openings and industry trends by
following specific tags related to your field of interest on following specific tags related to your field of interest on
@ -116,16 +134,22 @@
resume building, interview tips, and resume building, interview tips, and
professional development. professional development.
</p> </p>
<h4>File sharing</h4> <h4>
File sharing
</h4>
<p> <p>
Share you favourite contents that you share via BitTorrent, Share you favourite contents that you share via BitTorrent,
eD2k or IPFS, whether publicly by eD2k or IPFS, whether publicly by
<a href="{{origin}}/tag/?filetype=torrent"> <a href="{{origin}}/tag/?filetype=torrent">
/tag/?filetype=torrent /tag/?filetype=torrent
</a> and </a>
&#8203;&#8202;
and
<a href="{{origin}}/tag/?protocol=magnet"> <a href="{{origin}}/tag/?protocol=magnet">
/tag/?protocol=magnet /tag/?protocol=magnet
</a> or whether privately by utilizing the tag </a>
&#8203;&#8202;
or whether privately by utilizing the tag
"for:{% if jabber_id %}{{jabber_id}}{% else %}jid{% endif %}". "for:{% if jabber_id %}{{jabber_id}}{% else %}jid{% endif %}".
</p> </p>
<p> <p>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / libervia</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
@ -62,7 +62,9 @@
communications needs: instant messaging, (micro)blogging, communications needs: instant messaging, (micro)blogging,
file sharing, photo albums, events, forums, tasks, etc. file sharing, photo albums, events, forums, tasks, etc.
</p> </p>
<h4>What is Libervia?</h4> <h4>
What is Libervia?
</h4>
<p> <p>
Libervia (formerly "Salut à Toi") is a Libre communication Libervia (formerly "Salut à Toi") is a Libre communication
ecosystem based on XMPP standard. It allows you to do many ecosystem based on XMPP standard. It allows you to do many
@ -79,7 +81,9 @@
It features many interfaces (desktop, mobile, web, command It features many interfaces (desktop, mobile, web, command
line, console), and is multi-platforms. line, console), and is multi-platforms.
</p> </p>
<h4>Motives</h4> <h4>
Motives
</h4>
<p> <p>
The project "Libervia" was born from a need to protect our The project "Libervia" was born from a need to protect our
liberties, our privacy and our independence. It is intended liberties, our privacy and our independence. It is intended
@ -92,7 +96,9 @@
private interests. The network must belong to everybody, and private interests. The network must belong to everybody, and
be a force of expression and freedom for all Humanity. be a force of expression and freedom for all Humanity.
</p> </p>
<h4>Social Contract</h4> <h4>
Social Contract
</h4>
<p> <p>
Towards this end, "Libervia" and those who participate in Towards this end, "Libervia" and those who participate in
the project operate on a Social Contract, a commitment to the project operate on a Social Contract, a commitment to
@ -198,7 +204,9 @@
</li> </li>
</ul> </ul>
</p> </p>
<h4>Features</h4> <h4>
Features
</h4>
<p> <p>
<ul> <ul>
<li> <li>
@ -225,7 +233,9 @@
</li> </li>
</ul> </ul>
</p> </p>
<h4>Interfaces</h4> <h4>
Interfaces
</h4>
<p> <p>
<ul> <ul>
<li> <li>
@ -250,7 +260,10 @@
Lot of powerful tools and features accompany the Lot of powerful tools and features accompany the
project, please check the project, please check the
<a href="https://libervia.org/documentation"> <a href="https://libervia.org/documentation">
documentation</a>. documentation
</a>
&#8203;
.
</li> </li>
</ul> </ul>
</p> </p>
@ -263,46 +276,57 @@
Libervia is a Libre software, based on well established Libervia is a Libre software, based on well established
standards (XMPP), decentralised and federating. It is standards (XMPP), decentralised and federating. It is
developed around strong ethical values. Check our developed around strong ethical values. Check our
<a href="https://libervia.org/social_contract">social <a href="https://libervia.org/social_contract">
contract</a>. social contract
</a>
&#8203;
.
</p> </p>
<h4>Press</h4> <h4>
Press
</h4>
<p> <p>
<ul> <ul>
<li> <li>
<a href="http://andre-ani.fr/news/profil-libriste-goffi/"> <a href="http://andre-ani.fr/news/profil-libriste-goffi/">
Profil de libriste : Goffi Profil de libriste : Goffi
</a> </a>
&#8203;&#8202;
(andre-ani.fr) (andre-ani.fr)
</li> </li>
<li> <li>
<a href="https://framablog.org/2015/11/02/salut-a-toi-couteau-suisse-des-reseaux-sociaux-libres/"> <a href="https://framablog.org/2015/11/02/salut-a-toi-couteau-suisse-des-reseaux-sociaux-libres/">
Salut à toi, couteau suisse des réseaux sociaux libres Salut à toi, couteau suisse des réseaux sociaux libres
</a> </a>
&#8203;&#8202;
(framablog.org) (framablog.org)
</li> </li>
<li> <li>
<a href="https://libervia.org/press"> <a href="https://libervia.org/press">
Libervia Press Libervia Press
</a> </a>
&#8203;&#8202;
(libervia.org) (libervia.org)
</li> </li>
<li> <li>
<a href="https://www.linux-magazin.de/news/salut-a-toi-verbesserter-xmpp-client/"> <a href="https://www.linux-magazin.de/news/salut-a-toi-verbesserter-xmpp-client/">
Salut à Toi; Verbesserter XMPP-Client Salut à Toi; Verbesserter XMPP-Client
</a> </a>
&#8203;&#8202;
(linux-magazin.de) (linux-magazin.de)
</li> </li>
<li> <li>
<a href="https://linuxfr.org/tags/s%C3%A0t/public"> <a href="https://linuxfr.org/tags/s%C3%A0t/public">
Tous les contenus étiquetés avec « sàt » - LinuxFr.org Tous les contenus étiquetés avec « sàt » - LinuxFr.org
</a> </a>
&#8203;&#8202;
(linuxfr.org) (linuxfr.org)
</li> </li>
<li> <li>
<a href="https://reflets.info/articles/sat-le-couteau-suisse-libre-et-open-source-de-la-communication"> <a href="https://reflets.info/articles/sat-le-couteau-suisse-libre-et-open-source-de-la-communication">
SàT : le couteau suisse Libre et open source de la communication SàT : le couteau suisse Libre et open source de la communication
</a> </a>
&#8203;&#8202;
(reflets.info) (reflets.info)
</li> </li>
</ul> </ul>
@ -314,12 +338,14 @@
<a href="https://libervia.org"> <a href="https://libervia.org">
Official Site Official Site
</a> </a>
&#8203;&#8202;
(libervia.org) (libervia.org)
</li> </li>
<li> <li>
<a href="xmpp:libervia@chat.jabberfr.org?join"> <a href="xmpp:libervia@chat.jabberfr.org?join">
Official Group Chat Official Group Chat
</a> </a>
&#8203;&#8202;
(chat.jabberfr.org) (chat.jabberfr.org)
</li> </li>
</ul> </ul>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / movim</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
@ -56,7 +56,9 @@
<p> <p>
» The social platform shaped for your community. » The social platform shaped for your community.
</p> </p>
<h3>About Movim</h3> <h3>
About Movim
</h3>
<p> <p>
Movim is an abbreviation of "My Open Virtual Identity Movim is an abbreviation of "My Open Virtual Identity
Manager" and is a distributed social network which, just Manager" and is a distributed social network which, just
@ -91,7 +93,9 @@
The framework, which is built upon PHP, is a free software The framework, which is built upon PHP, is a free software
and can be experimented with by external developers. and can be experimented with by external developers.
</p> </p>
<h4>What is Movim?</h4> <h4>
What is Movim?
</h4>
<p> <p>
Movim is a social and chat platform that acts as a frontend Movim is a social and chat platform that acts as a frontend
for the XMPP network. for the XMPP network.
@ -107,7 +111,9 @@
Movim is fully compatible with the most used XMPP servers Movim is fully compatible with the most used XMPP servers
such as ejabberd or Prosody. such as ejabberd or Prosody.
</p> </p>
<h4>Blogs &amp; Communities</h4> <h4>
Blogs &amp; Communities
</h4>
<p> <p>
Movim simplifies the management of your publications and Movim simplifies the management of your publications and
news articles. So forget the ads, forget the superfluous. We news articles. So forget the ads, forget the superfluous. We
@ -118,7 +124,9 @@
nodes on different topics. Just click on the Communities nodes on different topics. Just click on the Communities
link in your menu and start exploring! link in your menu and start exploring!
</p> </p>
<h4>Chats &amp; Chatrooms</h4> <h4>
Chats &amp; Chatrooms
</h4>
<p> <p>
Start a conversation with a friend or join a multi-user Start a conversation with a friend or join a multi-user
chatroom in one click. chatroom in one click.
@ -127,34 +135,45 @@
Movim chats are coming with many features to give you the Movim chats are coming with many features to give you the
best chat experience across all your devices best chat experience across all your devices
</p> </p>
<h4>Let's get started!</h4> <h4>
Let's get started!
</h4>
<p> <p>
<a href="https://join.movim.eu/register"> <a href="https://join.movim.eu/register">
Create an XMPP account</a> Create an XMPP account
</a>
&#8203;&#8202;
and join one of our public instances on and join one of our public instances on
<a href="https://join.movim.eu"> <a href="https://join.movim.eu">
join.movim.eu</a> join.movim.eu
</a>
&#8203;&#8202;
(If you already have a XMPP account, you can directly join). (If you already have a XMPP account, you can directly join).
</p> </p>
<h4>Press</h4> <h4>
Press
</h4>
<p> <p>
<ul> <ul>
<li> <li>
<a href="https://itsfoss.com/movim/"> <a href="https://itsfoss.com/movim/">
Movim: An Open-Source Decentralized Social Platform Based on XMPP Network Movim: An Open-Source Decentralized Social Platform Based on XMPP Network
</a> </a>
&#8203;&#8202;
(itsfoss.com) (itsfoss.com)
</li> </li>
<li> <li>
<a href="https://medevel.com/movim/"> <a href="https://medevel.com/movim/">
Movim: a decentralized open-source XMPP-based messaging and social platform Movim: a decentralized open-source XMPP-based messaging and social platform
</a> </a>
&#8203;&#8202;
(medevel.com) (medevel.com)
</li> </li>
<li> <li>
<a href="https://www.zdnet.fr/actualites/reseaux-sociaux-decentralises-movim-peut-il-reussir-la-ou-diaspora-a-echoue-39791588.htm"> <a href="https://www.zdnet.fr/actualites/reseaux-sociaux-decentralises-movim-peut-il-reussir-la-ou-diaspora-a-echoue-39791588.htm">
Réseaux sociaux décentralisés : Movim peut-il réussir là où Diaspora a échoué Réseaux sociaux décentralisés : Movim peut-il réussir là où Diaspora a échoué
</a> </a>
&#8203;&#8202;
(zdnet.fr) (zdnet.fr)
</li> </li>
</ul> </ul>
@ -166,12 +185,14 @@
<a href="https://movim.eu"> <a href="https://movim.eu">
Official Site Official Site
</a> </a>
&#8203;&#8202;
(movim.eu) (movim.eu)
</li> </li>
<li> <li>
<a href="xmpp:movim@conference.movim.eu?join"> <a href="xmpp:movim@conference.movim.eu?join">
Official Group Chat Official Group Chat
</a> </a>
&#8203;&#8202;
(conference.movim.eu) (conference.movim.eu)
</li> </li>
</ul> </ul>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / now</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / philosophy</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / profile</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / projects</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / pubsub</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
@ -183,18 +183,22 @@
<a href="/?tags=brand:the-pirate-bay"> <a href="/?tags=brand:the-pirate-bay">
brand:the-pirate-bay brand:the-pirate-bay
</a> </a>
&#8203;&#8202;
<a href="/?tags=directory:torrent"> <a href="/?tags=directory:torrent">
directory:torrent directory:torrent
</a> </a>
&#8203;&#8202;
<a href="/?tags=service:search"> <a href="/?tags=service:search">
service:search service:search
</a> </a>
&#8203;&#8202;
by by
<a href="/jid/fionn@jabber.i2p">Fionn</a> <a href="/jid/fionn@jabber.i2p">Fionn</a>
...
<a href="/url/3d0db4c019a01ebbbab1cf0723ed7ddd"> <a href="/url/3d0db4c019a01ebbbab1cf0723ed7ddd">
<span class="instances-degree-fourth">and 57,293 other people</span> <span class="instances-degree-fourth">and 57,293 other people</span>
</a> </a>
&#8203;&#8202;
at at
<span class="date">{{date_now_readable}}</span> <span class="date">{{date_now_readable}}</span>
</div> </div>
@ -205,6 +209,23 @@
node <code>urn:xmpp:bibliography:0</code> of your XMPP node <code>urn:xmpp:bibliography:0</code> of your XMPP
account. account.
</p> </p>
<h4>Resources</h4>
<ul>
<li>
<a href="https://wiki.xmpp.org/web/PubSub_message_types">
PubSub message types
</a>
&#8203;&#8202;
(wiki.xmpp.org)
</li>
<li>
<a href="https://wiki.xmpp.org/web/Tech_pages/PubSub">
Tech pages/PubSub
</a>
&#8203;&#8202;
(wiki.xmpp.org)
</li>
</ul>
<br/> <br/>
<p class="quote bottom" <p class="quote bottom"
title="Arthur Schopenhauer speaks about Bob Wyman, Jérôme Poisson, Joe Hildebrand, Peter Saint-Andre, and Timothée Jaussoin."> title="Arthur Schopenhauer speaks about Bob Wyman, Jérôme Poisson, Joe Hildebrand, Peter Saint-Andre, and Timothée Jaussoin.">

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / questions</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
@ -53,13 +53,19 @@
<div id="main" class="row"> <div id="main" class="row">
<div id="content"> <div id="content">
<h2>&nbsp; PubSub Bookmarks</h2> <h2>&nbsp; PubSub Bookmarks</h2>
<p>» Queries about Blasta.</p> <p>
<h3>Questions</h3> » Queries about Blasta.
</p>
<h3>
Questions
</h3>
<p> <p>
This document enumerates questions that were referred to the This document enumerates questions that were referred to the
project Blasta. project Blasta.
</p> </p>
<h4 id="what-is-jid">What is JID and what does it mean?</h4> <h4 id="what-is-jid">
What is JID and what does it mean?
</h4>
<p> <p>
JID is an abbreviation of Jabber ID. JID is an abbreviation of Jabber ID.
</p> </p>
@ -87,7 +93,9 @@
is related to computer language rust be tagged with is related to computer language rust be tagged with
"code:rust". "code:rust".
</p> </p>
<h4 id="why-blasta">Why did you create Blasta?</h4> <h4 id="why-blasta">
Why did you create Blasta?
</h4>
<p> <p>
We have created Blasta out of necessity. We have created Blasta out of necessity.
</p> </p>
@ -112,7 +120,9 @@
Hence, we have created Blasta, which is a combination of Hence, we have created Blasta, which is a combination of
YaCy and Shaarli, and is built on top of XMPP. YaCy and Shaarli, and is built on top of XMPP.
</p> </p>
<h4 id="why-free">Why do you provide Blasta for free?</h4> <h4 id="why-free">
Why do you provide Blasta for free?
</h4>
<p> <p>
While we want to make profit, and feed our wives and While we want to make profit, and feed our wives and
children, we are aware that we must be providing the Blasta children, we are aware that we must be providing the Blasta
@ -127,14 +137,16 @@
later becomes clandestinely subdued to thugs from government later becomes clandestinely subdued to thugs from government
or intelligence, which is the worst of all circumstances. or intelligence, which is the worst of all circumstances.
</p> </p>
<h4 id="perspective">What is your perspective?</h4> <h4 id="perspective">
What is your perspective?
</h4>
<p> <p>
Our perspective is that people should be living for the sake Our perspective is that people should be living for the sake
of eternity, which is what we are doing by creating and of eternity, which is what we are doing by creating and
distributing Blasta. distributing Blasta.
</p> </p>
<p> <p>
As conveyed in verse 77 of Hávamál: As conveyed in verse 77 of Hávamál
</p> </p>
<p class="quote" title="“Deyr fé, deyja frændr, deyr sjalfr it sama, ek veit einn, at aldrei deyr: dómr um dauðan hvern.”"> <p class="quote" title="“Deyr fé, deyja frændr, deyr sjalfr it sama, ek veit einn, at aldrei deyr: dómr um dauðan hvern.”">
“Kinsmen die, and cattle die and so must one die oneself; “Kinsmen die, and cattle die and so must one die oneself;
@ -146,11 +158,11 @@
― Hávamál: Sayings of the High One ― Hávamál: Sayings of the High One
</p> </p>
<p> <p>
The German philosopher Arthur Schopenhauer has expressed The German philosopher Arthur Schopenhauer expressed
since the same idea when he said: essentially the same idea when he said, that
</p> </p>
<p class="quote"> <p class="quote">
“The most any man can hope for: “The very most any man can hope for:
<br/> <br/>
Is a heroic passage through life.” Is a heroic passage through life.”
<br/> <br/>
@ -162,18 +174,24 @@
<p> <p>
Greatness, rather than happiness, is Greatness, rather than happiness, is
<span class="instances-degree-first"> <span class="instances-degree-first">
a mark of a good life</span>. the mark of a good life
</span>
&#8203;
.
</p> </p>
<p> <p>
Live for the sake of eternity, for the past, and towards the Live for the sake of eternity, for the past, and towards the
future. future.
</p> </p>
<h4 id="why-xmpp">Why did you choose XMPP as a platform?</h4> <h4 id="why-xmpp">
Why did you choose XMPP as a platform?
</h4>
<p> <p>
The XMPP platform (which is also known as Jabber), is a The <a href="/help/about/xmpp">XMPP</a> platform (which is
reputable and a strong telecommunication platform which also known as Jabber), is a reputable and a strong
almost every intelligence and militant agency on the world telecommunication platform which almost every intelligence
is making use of as a premier telecommunication mean. and militant agency on the world is making use of as a
premier telecommunication mean.
</p> </p>
<p> <p>
Because we did not want to use databases, which sometimes Because we did not want to use databases, which sometimes
@ -191,7 +209,8 @@
needed. needed.
</p> </p>
<p> <p>
So we chose the specification XEP-0060: Publish-Subscribe So we chose the specification XEP-0060:
<a href="/help/about/xmpp/pubsub">Publish-Subscribe</a>
(PubSub) as a base mechanism for a data storage platform. (PubSub) as a base mechanism for a data storage platform.
</p> </p>
<p> <p>
@ -201,25 +220,31 @@
truely private and is truely owned by the account owner, truely private and is truely owned by the account owner,
which is also a major advantage to Blasta, not only for the which is also a major advantage to Blasta, not only for the
sake of privacy and data integrity, but also for an sake of privacy and data integrity, but also for an
immediate recoverying of the bookmarks sharing system, if immediate recovery of the bookmarks sharing system, if the
the Blasta database would be to diappear or should be Blasta database would be to diappear or should be
restructured. restructured anew.
</p> </p>
<p>Use XMPP. Spread XMPP. Be XMPP.</p> <p>
<h4 id="other-platforms">What platform would you choose if not XMPP?</h4> Use XMPP. Spread XMPP. Be XMPP.
</p>
<h4 id="other-platforms">
What platform would you choose if not XMPP?
</h4>
<p> <p>
If we were to choose another platfom, it probably would have If we were to choose another platfom, it probably would have
been DeltaChat (SMTP and IMAP), Nostr or Session. been DeltaChat (SMTP and IMAP), Nostr or Session.
</p> </p>
<h4>Why did you decide to make Blasta open source?</h4> <h4>
Why did you decide to make Blasta open source?
</h4>
<p> <p>
One of the main reasons is for freedom to thrive. One of the main reasons is for freedom to thrive.
</p> </p>
<p> <p>
We are worried due to various of PsyOps that are conducted We are worried due to various of PsyOps that are being
by governments, military and intelligence agencies, and we conducted by governments, military and intelligence
realize that most of their success relies on the agencies, and we realize that most of their success relies
centralization of information hubs; and on the centralization of information hubs; and
</p> </p>
<p> <p>
We are further worried of the awful measures that are being We are further worried of the awful measures that are being
@ -276,7 +301,9 @@
functionality with <a href="/help/utilities#greasemonkey"> functionality with <a href="/help/utilities#greasemonkey">
userscripts and userstyles</a>. userscripts and userstyles</a>.
</p> </p>
<h4 id="conclusion">Conclusion</h4> <h4 id="conclusion">
Conclusion
</h4>
<p> <p>
Please <a href="/contact">contact us</a> and ask us Please <a href="/contact">contact us</a> and ask us
anything. We will be happy to read from you! anything. We will be happy to read from you!

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / register</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / {{path}}</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
@ -60,7 +60,7 @@
{{description}} {{description}}
</h3> </h3>
<p> <p>
You can return to the previous page or browse You can try to reload this page or browse
{% if jabber_id %} {% if jabber_id %}
your <a href="/jid">bookmarks</a>. your <a href="/jid">bookmarks</a>.
{% else %} {% else %}

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / search</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / software</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / syndication</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
@ -67,16 +67,23 @@
pages that list bookmarks. pages that list bookmarks.
</p> </p>
<p> <p>
An atom <span class="enlarge"></span> or an orange An atom or an orange icon (
<img src="/graphic/syndicate.svg" width="16" height="16"/> <img alt="⚛"
icon at the bottom of a subject page would indicate of class="enlarge"
height="16"
src="/graphic/syndicate.svg"
width="16"/>
) at the bottom of a subject page would indicate of
availability of an Atom Syndication Feed for use with availability of an Atom Syndication Feed for use with
Feed Reader. Feed Reader.
</p> </p>
<p> <p>
A bulb 💡 or an XMPP A bulb or an XMPP icon (
<img src="/graphic/xmpp.svg" width="16" height="16"/> <img alt="💡"
icon at the bottom of a subject page would indicate of height="16"
src="/graphic/xmpp.svg"
width="16"/>
) at the bottom of a subject page would indicate of
availability of a PubSub subscription for use with an availability of a PubSub subscription for use with an
XMPP client. XMPP client.
</p> </p>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / tag</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
@ -68,9 +68,11 @@
{% else %} {% else %}
<span class="tag-degree-first"> <span class="tag-degree-first">
{% endif %} {% endif %}
<a href="/{% if jid %}jid/{{jid}}{% endif %}?tags={{tag}}"> <a href="/{% if jid %}jid/{{jid}}{% endif %}?tags={{tag}}">
{{tag}} {{tag}}
</a></span> </a>
</span>
&#8203;&#8202;
{% endfor %} {% endfor %}
</p> </p>
</div> </div>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / thanks</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
@ -56,45 +56,59 @@
<p> <p>
» Gratitude and appreciation from the world over. » Gratitude and appreciation from the world over.
</p> </p>
<h3>Thanks</h3> <h3>
Thanks
</h3>
<p> <p>
We would want to express our gratitude and appreciation to We would want to express our gratitude and appreciation to
special men and women from Argentina, Canada, France special men and women from Argentina, Canada, France
Germany, Ireland, Italy, Palestine, Russia and The Germany, Ireland, Italy, Palestine, Russia and The
Netherlands. Netherlands.
</p> </p>
<h4>Mr. Damian Sartori</h4> <h4>
Mr. Damian Sartori
</h4>
<p> <p>
We would want to thank to Mr. Damian Sartori (a.k.a.: We would want to thank to Mr. Damian Sartori (a.k.a.:
TheCoffeMaker) from <a href="https://cyberdelia.com.ar/"> TheCoffeMaker) from <a href="https://cyberdelia.com.ar/">
Cyberdelia</a> for providing instructions for present and Cyberdelia</a> for providing instructions for present and
future database management. future database management.
</p> </p>
<h4>Mr. Guus der Kinderen</h4> <h4>
Mr. Guus der Kinderen
</h4>
<p> <p>
We would want to thank to Mr. Guus der Kinderen of We would want to thank to Mr. Guus der Kinderen of
<a href="http://igniterealtime.org">Ignite Realtime</a> who <a href="http://igniterealtime.org">Ignite Realtime</a> who
has instantly provided us with relevant references from has instantly provided us with relevant references from the
XMPP specification
<a href="https://xmpp.org/extensions/xep-0060.html"> <a href="https://xmpp.org/extensions/xep-0060.html">
XEP-0060: Publish-Subscribe</a> and who has generously XEP-0060: Publish-Subscribe</a> and who has generously
provided us with <a href="http://goodbytes.im">Goodbytes</a> provided us with <a href="http://goodbytes.im">Goodbytes</a>
Openfire servers for testing Blasta and related projects. <a href="https://igniterealtime.org/projects/openfire/">
Openfire</a> servers for testing Blasta.
</p> </p>
<h4>Mr. Jérôme Poisson</h4> <h4>
Mr. Jérôme Poisson
</h4>
<p> <p>
We would want to thank to Mr. Jérôme Poisson of project We would want to thank to Mr. Jérôme Poisson of project
<a href="https://libervia.org">Libervia</a> who has <a href="https://libervia.org">Libervia</a> who has
instructed us in coordinating the Blasta system with the instructed us in coordinating the Blasta system with the
Libervia system. Libervia system.
</p> </p>
<h4>Mrs. Laura Lapina</h4> <h4>
Mrs. Laura Lapina
</h4>
<p> <p>
We would want to thank to Mrs. Laura Lapina of 404 City and We would want to thank to Mrs. Laura Lapina of 404 City and
Loqi who has contributed her advises to select the proper Loqi who has contributed her advises to select the proper
technologies, and plan and engineer the master database technologies, and plan and engineer the master database
operation workflow. operation workflow.
</p> </p>
<h4>Mr. Schimon Jehudah Zachary</h4> <h4>
Mr. Schimon Jehudah Zachary
</h4>
<p> <p>
We would want to thank to Mr. Schimon Jehudah Zachary of We would want to thank to Mr. Schimon Jehudah Zachary of
project <a href="https://git.xmpp-it.net/sch/Rivista"> project <a href="https://git.xmpp-it.net/sch/Rivista">
@ -104,22 +118,28 @@
information, including elaborative SQLite queries that have information, including elaborative SQLite queries that have
accelerated and saved us precious development time. accelerated and saved us precious development time.
</p> </p>
<h4>Mr. Simone Canaletti</h4> <h4>
Mr. Simone Canaletti
</h4>
<p> <p>
We would want to thank to Mr. Simone Canaletti of project We would want to thank to Mr. Simone Canaletti of project
<a href="https://woodpeckersnest.eu">WPN</a> who has helped <a href="https://woodpeckersnest.eu">WPN</a> who has helped
in deploying and testing our applications, including in deploying and testing Blasta, including benchmarking for
benchmarking for mass deployment, in addition to providing mass deployment, in addition to providing us with the
us with the adequate means for hosting the development adequate means for hosting the development ground of the
ground of the Blasta platform and related projects. Blasta platform and related projects.
</p> </p>
<h4>Mr. Stephen Paul Weber</h4> <h4>
Mr. Stephen Paul Weber
</h4>
<p> <p>
We would want to thank to Mr. Stephen Paul Weber of project We would want to thank to Mr. Stephen Paul Weber of project
<a href="https://soprani.ca">Soprani.ca</a> who has <a href="https://soprani.ca">Soprani.ca</a> who has
explained to us about various of the XMPP specifications. explained to us about various of the XMPP specifications.
</p> </p>
<h4>Mr. Timothée Jaussoin</h4> <h4>
Mr. Timothée Jaussoin
</h4>
<p> <p>
We would want to thank to Mr. Timothée Jaussoin of project We would want to thank to Mr. Timothée Jaussoin of project
<a href="https://movim.eu">Movim</a> who has contributed <a href="https://movim.eu">Movim</a> who has contributed
@ -130,7 +150,9 @@
various of occasions, including answering to questions that various of occasions, including answering to questions that
were already asked and answered more than once. were already asked and answered more than once.
</p> </p>
<h4>XMPP Berlin in association with XMPP Italia</h4> <h4>
XMPP Berlin in association with XMPP Italia
</h4>
<p> <p>
Finally, we would want to thank to the fine gentlemen Finally, we would want to thank to the fine gentlemen
Lorenzo, Mario, Martin, Roberto, Schimon, Simone, and others Lorenzo, Mario, Martin, Roberto, Schimon, Simone, and others
@ -143,7 +165,9 @@
</a> </a>
</p> </p>
<p> <p>
<a href="https://video.xmpp-it.net">XMPP-IT</a> <a href="https://video.xmpp-it.net">
XMPP-IT
</a>
</p> </p>
<br/> <br/>
<p class="quote bottom"> <p class="quote bottom">

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / utilities</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>

View file

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="color-scheme" content="dark light" /> <meta name="color-scheme" content="dark light" />
<title>Blasta</title> <title>Blasta / xmpp</title>
<link rel="shortcut icon" href="/graphic/blasta.svg"/> <link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/> <link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/> <link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>