tilde.news customizations
|
@ -32,16 +32,11 @@ public/.well-known
|
|||
public/avatars
|
||||
public/sitemap*
|
||||
|
||||
# templates to be created per-site
|
||||
app/views/about/404.*
|
||||
app/views/about/about.*
|
||||
app/views/about/chat.*
|
||||
app/views/about/privacy.*
|
||||
public/apple-touch-icon*
|
||||
public/favicon.ico
|
||||
|
||||
# prod config
|
||||
config/credentials.yml.enc
|
||||
|
||||
# files added in production
|
||||
lib/tasks/deploy.rake
|
||||
config/database.yml
|
||||
config/initializers/development.rb
|
||||
config/initializers/production.rb
|
||||
|
@ -49,4 +44,5 @@ config/master.key
|
|||
config/scout_apm.yml
|
||||
config/*.sphinx.conf
|
||||
config/unicorn.conf.rb
|
||||
lib/tasks/deploy.rake
|
||||
config/scout_apm.yml
|
||||
.env
|
||||
|
|
|
@ -233,10 +233,10 @@ html {
|
|||
}
|
||||
|
||||
body, textarea, input, button {
|
||||
font-family: "helvetica neue", arial, sans-serif;
|
||||
font-size: 10pt;
|
||||
font-family: "IBM Plex Mono", "JetBrains Mono", Consolas, "Courier New", Courier, monospace;
|
||||
font-size: 11pt;
|
||||
color: var(--color-fg);
|
||||
line-height: 1.45em;
|
||||
line-height: 1.35em;
|
||||
}
|
||||
|
||||
body {
|
||||
|
|
|
@ -0,0 +1,69 @@
|
|||
/* light mode */
|
||||
:root {
|
||||
--color-lobsters-fg-has-suggestions: #bd6060;
|
||||
|
||||
--color-lobsters-tag-special-bg: #f9ddde;
|
||||
--color-lobsters-tag-special-border: #f0b2b8;
|
||||
|
||||
--color-lobsters-hat-sysop-crown-fill: #ddc7c7;
|
||||
--color-lobsters-hat-sysop-brim-stroke: #bbb2b2;
|
||||
}
|
||||
|
||||
/* dark mode */
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--color-lobsters-fg-has-suggestions: #df7171;
|
||||
|
||||
--color-lobsters-tag-special-bg: #3b1719;
|
||||
--color-lobsters-tag-special-border: #611a21;
|
||||
|
||||
--color-lobsters-hat-sysop-crown-fill: #3e2f2f;
|
||||
--color-lobsters-hat-sysop-brim-stroke: #2c2222;
|
||||
}
|
||||
}
|
||||
|
||||
li .byline a.story_has_suggestions {
|
||||
color: var(--color-lobsters-fg-has-suggestions);
|
||||
}
|
||||
|
||||
a.tag_announce, a.tag_ask, a.tag_show, a.tag_interview {
|
||||
background-color: var(--color-lobsters-tag-special-bg);
|
||||
border-color: var(--color-lobsters-tag-special-border);
|
||||
color: var(--color-fg-67);
|
||||
}
|
||||
|
||||
span.hat_openbsd_developer span.crown {
|
||||
font-family: comic sans ms, comic sans, comic neue, sans-serif;
|
||||
font-size: 7pt;
|
||||
}
|
||||
|
||||
span.hat_sysop {
|
||||
border-color: var(--color-lobsters-hat-sysop-brim-stroke);
|
||||
color: var(--color-fg-67);
|
||||
}
|
||||
span.hat_sysop span.crown {
|
||||
background-color: var(--color-lobsters-hat-sysop-crown-fill);
|
||||
}
|
||||
|
||||
#l_holder {
|
||||
position: relative;
|
||||
}
|
||||
#l_holder:after {
|
||||
content: '';
|
||||
background: transparent url("/favicon-16x16.png") no-repeat center;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
@media
|
||||
only screen and (min-resolution: 2dppx),
|
||||
only screen and (-webkit-min-device-pixel-ratio: 2) {
|
||||
#l_holder {
|
||||
background: transparent url("/favicon-16x16.png") no-repeat;
|
||||
background-size: 16px;
|
||||
background-position: 1px 1px;
|
||||
}
|
||||
}
|
|
@ -143,7 +143,7 @@ class User < ApplicationRecord
|
|||
"sysop", "webmaster", "enable", "new", "signup"].freeze
|
||||
|
||||
# days old accounts are considered new for
|
||||
NEW_USER_DAYS = 70
|
||||
NEW_USER_DAYS = 7
|
||||
|
||||
# minimum karma required to be able to offer title/tag suggestions
|
||||
MIN_KARMA_TO_SUGGEST = 10
|
||||
|
|
|
@ -1,369 +1,14 @@
|
|||
<% render partial: 'about/subnav' %>
|
||||
|
||||
<div class="box wide">
|
||||
<%- raise "Site owner: You need to delete app/views/home/about.html.erb and write your own about page" if Rails.env.production? and Rails.application.name != 'Lobsters' -%>
|
||||
|
||||
<div class="story_text">
|
||||
<p>
|
||||
Lobsters is a computing-focused community centered around link aggregation
|
||||
and discussion, launched on July 3rd, 2012.
|
||||
The administrator is <a href="/~pushcx">Peter Bhat Harkins</a> ("pushcx"), contact him with any support issues.
|
||||
Lobsters was created by <a href="/~jcs">joshua stein</a>
|
||||
with careful design touches to encourage a healthy community:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>a <a href="#tagging">tagging</a> system to categorize and filter submissions,</li>
|
||||
<li>a user <a href="#invitations">invitation tree</a> to combat spam,</li>
|
||||
<li><a href="#flags">flag explanations</a> to curb punishing disagreement,</li>
|
||||
<li>a strong commitment to <a href="#transparency">transparency</a>,</li>
|
||||
<li>and <a href="#features">many more features</a> that have been added over the years.</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="tagging">Tags and Topicality</h2>
|
||||
<p>
|
||||
When links or stories are submitted, they must be tagged by the submitter from a list of predefined <a href="/tags">tags</a>.
|
||||
Users can choose to <a href="/filters">filter</a> out or
|
||||
subscribe to all submissions with particular tags (example: <a href="https://lobste.rs/t/programming.rss">programming.rss</a>)
|
||||
or combinations of tags (example: <a href="https://lobste.rs/t/programming,audio.rss">programming,audio.rss</a>).
|
||||
All users see all stories by default.
|
||||
The tagging system works this way for three reasons:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li><p>
|
||||
It keeps the site on-topic by only allowing a predefined list of tags.
|
||||
These tags represent what most of the users of the site want to read, so
|
||||
content that does not fit into any of those categories should not be
|
||||
submitted. It also keeps stories organized and more easily searchable.
|
||||
</p></li>
|
||||
|
||||
<li><p>
|
||||
It promotes discussion. On a site with separate forums, a Ruby programmer
|
||||
would probably subscribe to a Ruby forum, but not a Python one. When a link
|
||||
is posted to the Python forum, that Ruby programmer would probably never see
|
||||
it, even though they may have something useful to say about it (perhaps the
|
||||
link is about a Python library which does the same thing as a Ruby library
|
||||
which that Ruby programmer created). On this site, the link would get posted
|
||||
with a <a href="/t/python" class="tag">python</a> tag and shown to everyone,
|
||||
encouraging the Ruby programmer to read and comment on it (unless that Ruby
|
||||
programmer disliked Python enough to <a href="/filters">filter</a> it out).
|
||||
</p></li>
|
||||
|
||||
<li><p>
|
||||
It keeps the community coherent. Often stories contain discussion
|
||||
about more than one topic, yet on other sites they are confined to a single
|
||||
category/forum, limiting the exposure. The link could be submitted to more
|
||||
than one forum, but then each conversation would remain separate and users
|
||||
would rarely interact with users from other forums. On this site, the story
|
||||
would simply be tagged with multiple tags and all users would see all
|
||||
discussion about the story in a single location.
|
||||
</p></li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
Creating new tags and retiring old tags is done by the community by submitting, discussing, and voting on <a href="/t/meta" class="tag tag_meta">meta</a>-tagged requests about them,
|
||||
and these events are <a href="https://lobste.rs/moderations?utf8=✓&moderator=(All)&what[tags]=tags">logged</a> (since 2018-04).
|
||||
To propose a tag, post a <a href="/t/meta">meta</a> thread with the name and description.
|
||||
Explain the scope, list existing stories that should have been tagged, make a case for why people would want to specifically filter it out, and justify the increased complexity for submitters and mods.
|
||||
</p>
|
||||
|
||||
<div id="topicality">
|
||||
<p>
|
||||
Lobsters is focused pretty narrowly on computing; tags like <a href="/t/art">art</a> don't imply every piece of art is on-topic.
|
||||
Some rules of thumb for great stories to submit: Will this improve the reader's next program? Will it deepen their understanding of their last program? Will it be more interesting in five or ten years?
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Some things that are off-topic here but popular on larger, similar sites:
|
||||
entrepreneurship, management, news about companies that employ a lot of programmers,
|
||||
investing, world events, anthropology, self-help, personal productivity systems,
|
||||
last-resort customer service requests via public shaming,
|
||||
"I wanted to see what this site's amazing users think about this off-topic thing",
|
||||
and
|
||||
defining the single morally correct economic and political system for the entire world when we can't even settle tabs vs. spaces.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<h2 id="invitations">Invitation Tree</h2>
|
||||
<p>
|
||||
The full <%= link_to 'user tree', users_tree_path %> is public and each user's profile
|
||||
shows who invited them. This provides some degree of accountability and
|
||||
helps identify voting rings.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Invitations are used as a mechanism for spam-control,
|
||||
to slow registrations to a <a href="https://en.wikipedia.org/wiki/Eternal_September">pace we can acculturate</a> (more below)
|
||||
and to encourage users to be nice, not to make the Lobsters userbase an elite club.
|
||||
Users are considered "new" for their first <%= User::NEW_USER_DAYS %> days,
|
||||
and their usernames appear <span class="new_user">in green</span>.
|
||||
New users can't
|
||||
send invites,
|
||||
submit links to domains we haven't seen submitted before,
|
||||
flag stories and comments,
|
||||
suggest edits to story titles and tags,
|
||||
resubmit links that have been seen before,
|
||||
or
|
||||
<span id="new-user-tags">use tags for meta discussions or that are prone to off-topic stories
|
||||
(<% Tag.not_permitted_for_new_users.pluck(:tag).map { |t| %><%= link_to t, tag_path(t) %> <%- } %>).
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The quickest way to receive an invitation is to talk to someone you <%= link_to 'recognize from the site', users_tree_path %>.
|
||||
If you wrote a link that was posted, please reach out in <a href="/chat">chat</a>, we'd love to have you join the discussion.
|
||||
Finally, if you can't find anyone you know in the invitation tree and didn't author something posted to the site,
|
||||
<% if Rails.application.allow_invitation_requests? %>
|
||||
you can <a href="/invitations/request">request an invite</a>.
|
||||
<% else %>
|
||||
consider getting to know the community <a href="/chat">in the chat room</a>.
|
||||
<% end %>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
There's no limit on how many invitations a user can send (though we might at some point, to manage <a href="https://lobste.rs/stats">growth</a>).
|
||||
There's also no official vetting process for new users, each user is responsible for inviting people they believe will contribute positively to Lobsters.
|
||||
When accounts are banned for spam, <a href="https://en.wikipedia.org/wiki/Sockpuppet_(Internet)">sockpuppeting</a>, or other abuse,
|
||||
moderators will consider disabling their inviter's ability to send invitations or, rarely, also ban them.
|
||||
</p>
|
||||
|
||||
<h2 id="ranking">Ranking</h2>
|
||||
<p>
|
||||
All story and comment ranking on this site comes from user activity.
|
||||
All users have equal votes, with no special priorities or penalties for specific users or domains.
|
||||
Moderators have no ability to raise or <a href="http://www.righto.com/2013/11/how-hacker-news-ranking-really-works.html">lower</a> the rankings of stories or comments (besides voting like any user).
|
||||
Per-tag <a href="/filters">hotness modifiers</a> affect all stories with
|
||||
those tags, but these modifiers (and <a href="https://lobste.rs/moderations?utf8=%E2%9C%93&moderator=(All)&what[tags]=tags">changes</a> to them) are public.
|
||||
Domains used for marketing analytics are banned and tracking parameters are removed from links
|
||||
(look for <tt>TRACKING_DOMAINS</tt> and <tt>utm_</tt> in <a href="https://github.com/lobsters/lobsters/blob/master/app/models/story.rb">story.rb</a>).
|
||||
</p>
|
||||
|
||||
<div id="flags">
|
||||
<p>
|
||||
Users can flag stories and comments when there's a serious problem that needs moderator attention; two flags are needed to add the story or comment to the moderation queue.
|
||||
Users must reach <%= User::MIN_KARMA_TO_FLAG %> karma to flag.
|
||||
To guide usage and head off distracting meta conversations ("Why was this flagged!?", etc), flagging requires selecting from a preset list of reasons.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
For stories, these are:
|
||||
"Off-topic" for stories that are not about computing;
|
||||
"Already Posted" for duplicate submissions and links that elaborate on or responses to a thread that's less than a week old (see <a href="#merging">merging</a>); and
|
||||
"Broken Link" for links that 404, 500, or present a paywall;
|
||||
"Spam" for links that promote a commercial service.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
For comments, these are:
|
||||
"Off-topic" for drifting into meta or topics that aren't related to the story;
|
||||
"Me-too" when a comment doesn't add new information, typically a single sentence of appreciation, agreement, or humor;
|
||||
"Troll" for derailing conversations into classic arguments, well-intentioned or not;
|
||||
"Unkind" when uncharitable, insulting, or dismissive;
|
||||
and
|
||||
"Spam" for promoting commercial services.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Less than 1% of stories or comments get flagged, and users are not automatically punished by flags.
|
||||
Users whose stories or comments are getting flagged significantly more often are strongly encouraged to talk to mods about what's not working.
|
||||
(Please don't use flagging to try to push down topics or people you don't like; click "hide" on the story and <a href="https://xkcd.com/386">move on</a> rather than clutter up the mod dashboard with false alarms.)
|
||||
</p>
|
||||
|
||||
<h2 id="transparency">Transparency Policy</h2>
|
||||
<p>
|
||||
All <a href="/moderations">moderator actions</a> on this site are visible to
|
||||
everyone and the identities of those moderators are <%= link_to 'public', moderators_path %>.
|
||||
While the individual actions of a moderator may cause debate, there should be no question about if an action happened or who is responsible.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If users are disruptive enough to warrant banning, they will be banned
|
||||
absolutely, given notice of their banning, and their disabled user profile
|
||||
will indicate which moderator banned them and why.
|
||||
There will be no <a href="https://en.wikipedia.org/wiki/Shadow_banning">shadow banning</a> or other secret moderation actions.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The <a href="https://github.com/lobsters/lobsters">source code to this site</a> and
|
||||
its <a href="https://github.com/lobsters/lobsters-ansible">provisioning and deployment</a> are
|
||||
made available under a 3-clause BSD license for viewing, auditing, forking, or contributing to.
|
||||
The codebase is used to run a dozen or so sister sites (that we know of) and we <a href="https://github.com/lobsters/lobsters/wiki">keep a list</a>;
|
||||
please get in touch if you've launched one.
|
||||
</p>
|
||||
|
||||
<p id="queries">
|
||||
The Lobsters community is in a sweet spot that it's large enough to be worth asking questions about and small enough the answers make sense.
|
||||
We have <a href="/stats">some basic stats</a> available,
|
||||
and Peter is happy to run queries against the <a href="https://github.com/lobsters/lobsters/blob/master/db/schema.rb">database</a> and Rails/MySQL/nginx logs (but not write them for you),
|
||||
as long as they don't reveal personal info like IPs, browsing, and voting or create “worst-of” leaderboards celebrating most-flagged users/comments/stories.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you dislike the content or moderation policies here, you may prefer
|
||||
<a href="https://news.ycombinator.com">Y Combinator News</a>,
|
||||
<a href="https://reddit.com/r/programming">r/programming</a>,
|
||||
<a href="https://slashdot.org">Slashdot</a>,
|
||||
<a href="https://tilde.news">Tilde News</a>, or
|
||||
<a href="https://en.wikipedia.org/wiki/Comp.*_hierarchy">comp.*</a>.
|
||||
Or you could use <a href="https://github.com/lobsters/lobsters/">our codebase</a> to start your own site.
|
||||
</p>
|
||||
|
||||
<h2 id="features">Other Technical Features</h2>
|
||||
|
||||
<ul>
|
||||
<li><p>
|
||||
<strong><a href="/s/jg3eet">Mailing list mode</a></strong> can be enabled
|
||||
per-user to receive all new stories (including their plain-text content as
|
||||
fetched and extracted by <a href="http://diffbot.com/">Diffbot</a>) and user
|
||||
comments as e-mails, mirroring discussion threads offline. This makes it
|
||||
easy and efficient to read new stories as well as keep track of new comments
|
||||
on old threads or stories, just like technical mailing lists or Usenet of
|
||||
yore. Each user is assigned a private mailing list address at this domain
|
||||
which allows them to reply to stories or comments directly in their e-mail
|
||||
client. These e-mails are then converted and submitted to the website as
|
||||
comments, just as if the comment was posted through a web browser.
|
||||
<%- raise "Don't just delete that error message. You didn't set up mailing list mode, right? This really isn't your about page, write one from scratch." if Rails.env.production? and Rails.application.name != 'Lobsters' -%>
|
||||
</p>
|
||||
|
||||
<li><p>
|
||||
<strong>Private messaging</strong> enables users to communicate privately
|
||||
without having to publicly disclose an e-mail address, and users can receive
|
||||
e-mail and <a href="https://pushover.net/">Pushover</a> notifications of new
|
||||
private messages.
|
||||
</p></li>
|
||||
|
||||
<li><p>
|
||||
<strong>Responsive design</strong> enhances functionality on smaller screens
|
||||
such as phones and tablets without having to use a separate URL, 3rd party
|
||||
(often read-only) websites, or mobile apps.
|
||||
</p></li>
|
||||
|
||||
<li><p>
|
||||
<strong><a href="/search">Integrated search engine</a></strong> covers all
|
||||
submitted stories and comments, including full-text caches of all submitted
|
||||
story contents. Searching for a keyword will often bring up relevant stories
|
||||
that don't even mention that keyword in the URL or title.
|
||||
</p></li>
|
||||
|
||||
<li id="merging"><p>
|
||||
<strong><a href="/s/cqq0kg/story_merging">Story merging</a></strong> collects comments on a topic that would otherwise fragment across multiple stories.
|
||||
This keeps the front page from being overwhelmed by a single topic and the discussion together for those interested (or so disinterested they'd prefer to hide it).
|
||||
Moderators merge stories on the same topic submitted within a week.
|
||||
Here's a <a href="/s/klkmey">small</a> and <a href="/s/zknzmj">large</a> example.
|
||||
</p></li>
|
||||
|
||||
<li><p>
|
||||
<strong>Fuzzy-matching of submitted story URLs</strong> to avoid duplicate
|
||||
submissions of similar URLs that differ only in <tt>http</tt> vs.
|
||||
<tt>https</tt>, trailing slashes, useless analytics parameters, etc. When
|
||||
using the story submission bookmarklet, story URLs are automatically
|
||||
converted to use the page's canonical URL (if available) to present the best
|
||||
URL to represent the story, as defined by the story's author or publisher.
|
||||
</p></li>
|
||||
|
||||
<li><p>
|
||||
<strong><a href="/s/z2dczs">User-suggested titles and tags</a></strong> can
|
||||
be automatically applied to a story when a quorum of users agrees on a new
|
||||
title (such as removing a site's name, or appending the story's year of
|
||||
publication) or set of tags, without any moderator action required.
|
||||
(<a href="https://lobste.rs/moderations?utf8=%E2%9C%93&moderator=(Users)">Log</a>)
|
||||
</p></li>
|
||||
|
||||
<li><p>
|
||||
<strong><a href="/hats">Hats</a></strong> are a more formal process of
|
||||
allowing users to post comments while "wearing <em>such and such</em> hat" to
|
||||
give their words more authority (such as an employee speaking for the
|
||||
company, or an open source developer speaking for the project).
|
||||
</p></li>
|
||||
|
||||
<li><p>
|
||||
<strong><a href="/rss">Per-tag, multi-tag and site-wide RSS feeds</a></strong> are
|
||||
available to the public and logged-in users have private RSS feeds that
|
||||
filter out each user's <a href="/filters">filtered tags</a>.
|
||||
</p></li>
|
||||
|
||||
<li><p>
|
||||
<strong><a href="https://botsin.space/@lobsters">Official Fediverse mirror</a></strong>
|
||||
posts all stories that have reached the front page for easy following, retooting/sharing, or archiving.
|
||||
</p></li>
|
||||
|
||||
<% if false %>
|
||||
<li><p>
|
||||
<strong><a href="http://lobsters3ik6yqwj.onion/">Tor onion/hidden
|
||||
service</a></strong> for anonymous access to the site.
|
||||
</p></li>
|
||||
<% end %>
|
||||
|
||||
<li><p>
|
||||
<strong>Stickers</strong> will be available again when someone finds a service that will print and ship 2" square vinyl stickers
|
||||
with a bleed <= 1/16" (preferably full-bleed) directly to people who want them.
|
||||
</p></li>
|
||||
</ul>
|
||||
|
||||
<h2 id="trivia">Trivia</h2>
|
||||
|
||||
<ul>
|
||||
<li><p>
|
||||
Lobsters is hosted on three <a href="https://slugs.do-api.dev/">VPSs</a> at DigitalOcean:
|
||||
a <tt>s-4vcpu-8gb</tt> for the web server,
|
||||
a <tt>s-2vcpu-4gb</tt> for the mariadb server, and
|
||||
a <tt>s-1vcpu-1gb</tt> for the <a href="/chat">IRC bot</a>.
|
||||
Our domain name is registered with <a href="https://cridomains.rs/en">CRI Domains</a>, who donated our first year of registration.
|
||||
DNS is provided by <a href="https://dnsimple.com/">DNSimple</a> and
|
||||
we use <a href="https://restic.net/">restic</a> for backups to <a href="https://www.backblaze.com/b2">b2</a>, both of which pushcx pays for.
|
||||
Lobsters is cheap to run, so we <a href="https://lobste.rs/s/95uler/would_there_be_interest_patreon_for#c_9l58ia">don't</a> <a href="https://lobste.rs/s/udj6qf/hosting_update#c_jgro9y">take</a> donations.
|
||||
</p></li>
|
||||
|
||||
<li id="emoji" style="list-style: none; position: relative; left: -1em;">
|
||||
<span style="float: left; line-height: 1.5em;">🦞</span>
|
||||
<p style="padding-left: 1em;">
|
||||
<a href="https://unicode.org/consortium/adopted-characters.html#s1f99E">Sponsor of the lobster emoji</a>:
|
||||
In February 2018, Lobsters <a href="https://lobste.rs/s/pnysdr/lobsters_emoji_adoption">held a fundraiser</a>
|
||||
to officially adopt the new lobster emoji in support of the Unicode Foundation.
|
||||
</p></li>
|
||||
|
||||
<li id="michaelbolton"><p>
|
||||
The name "Lobste.rs" is a cute <a href="https://en.wikipedia.org/wiki/Domain_hack">domain hack</a>
|
||||
without any deeper meaning.
|
||||
<%- require 'digest/md5'; instance_variable_set("@#{controller_name}#{action_name}", Digest::MD5.hexdigest(Rails.env) == 'fd89784e59c72499525556f80289b2c7' && Digest::MD5.hexdigest(Rails.application.name) != '4e7c4ddc593da2e7a1cc8c6dc2d38eba') -%>
|
||||
It <a href="https://www.youtube.com/watch?v=ADgS_vMGgzY">has nothing to do</a>
|
||||
with
|
||||
<a href="https://www.nytimes.com/2018/05/18/style/jordan-peterson-12-rules-for-life.html">self-help guru</a>
|
||||
Jordan Peterson, whose fans started to <a href="https://www.youtube.com/watch?v=hSNWkRw53Jo&t=2408s">call themselves "lobsters"</a>
|
||||
about six years after we started.
|
||||
</p></li>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
As a Rails app that's big enough to have real-world complexity but small enough to be easily read,
|
||||
our <a href="https://github.com/lobsters/lobsters">codebase</a> has seen a few interesting uses:
|
||||
</p>
|
||||
<ul>
|
||||
<li>MIT researchers used <a href="https://lobste.rs/s/cqnzl5/lobste_rs_access_pattern_statistics_for">access patterns</a>
|
||||
in development of a <a href="https://lobste.rs/s/uxgjha/noria_dynamic_partially_stateful_data">new database</a>.</li>
|
||||
<li>University of Chicago researchers unethically <a href="https://github.com/lobsters/lobsters/issues/518">experimented</a>
|
||||
on <a href="https://github.com/lobsters/lobsters/issues/517">maintainers</a>
|
||||
with <a href="https://lobste.rs/s/3qgyzp/they_introduce_kernel_bugs_on_purpose#c_bxb4rk">institutional complicity</a>.</li>
|
||||
<li>
|
||||
Shopify's Ruby performance team <a href="https://lobste.rs/s/m9ivcf/we_turned_lobste_rs_into_rails_benchmark">performance tested</a>
|
||||
the YJIT compiler they contributed to MRI Ruby.
|
||||
</li>
|
||||
</ul>
|
||||
<p>Please do <a href="https://lobste.rs/~pushcx">reach out</a> if you find a use for our code!</p>
|
||||
</li>
|
||||
|
||||
<li><p>
|
||||
We have a backup domain <tt>lobsters.dev</tt> in case of issues with our primary domain.
|
||||
</p></li>
|
||||
|
||||
<li><p>
|
||||
If you prefer the article links or comment links to open a new tab instead of navigating in your current tab you can add
|
||||
<a href="https://greasyfork.org/en/scripts/392307-lobste-rs-open-in-new-tab">a client-side script</a> to do so.
|
||||
(<a href="https://lobste.rs/s/0g48hl/open_links_articles_new_tab">Discussion</a>)
|
||||
</p></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="legend">about</div>
|
||||
<p>this is a link aggregator for the <a href="https://tildeverse.org">tildeverse</a>.</p>
|
||||
<div class="box">
|
||||
<h2> Rules </h2>
|
||||
<ol>
|
||||
<li>Political links are not allowed, unless directly related technology or tilde issues,ie</li>
|
||||
<ul>
|
||||
<li> Net Neutrality</li>
|
||||
<li> Privacy</li>
|
||||
</ul>
|
||||
<li>Please limit content to PG-13, mild R rated</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
|
|
@ -1,68 +1,8 @@
|
|||
<% render partial: 'about/subnav' %>
|
||||
|
||||
<div class="box wide">
|
||||
<div class="story_text">
|
||||
<p>
|
||||
An official real-time discussion channel is available to members and guests
|
||||
of the site, hosted on the
|
||||
<a href="https://libera.chat">Libera.Chat</a> IRC network
|
||||
in <tt>#lobsters</tt>.
|
||||
This channel was originally
|
||||
<a href="/s/2hdoop">created</a> by
|
||||
<a href="/~kristof">@kristof</a> on freenode, and
|
||||
<a href="https://lobste.rs/s/1z77ly/libera_chat#c_vwmpgx">stayed with the network</a> on 2021-05-19 after that domain was lost.
|
||||
<a href="/~pushcx">@pushcx</a>,
|
||||
<a href="/~355e3b">@355e3b</a> (<tt>c355e3b</tt> on IRC), and
|
||||
<a href="/~aleph">@aleph</a> (<tt>Church</tt> on IRC) are channel operators.
|
||||
</p>
|
||||
<div class="legend">chat</div>
|
||||
<a href="https://tilde.chat">tildeverse irc network here</a><br>
|
||||
<a href="https://web.tilde.chat">webchat here</a>
|
||||
|
||||
<p>
|
||||
To participate in the discussion, join the
|
||||
<a href="ircs://irc.libera.chat/lobsters"><tt>#lobsters</tt></a> channel on
|
||||
<tt>irc.libera.chat</tt> with an IRC client.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The policies and ideals of the discussion channel are the same as the website; quality content and conversing, respect for other users, and no spamming.
|
||||
Slightly off-topic discussion is generally acceptable, but we're still not open to discussion of electoral politics and policies.
|
||||
The channel isn't busy enough that there's always someone talking, so don't be surprised if you try to start a conversation and no one responds.
|
||||
Leave it open and you'll see activity, though we're most active during US work hours.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you want an invite to the site, it's best to hang out and chat until people get to know you.
|
||||
They'll likely ask you for a link to your homepage or a public profile to feel confident that you're not a spammer.
|
||||
If you ask for an invite immediately on joining, expect people will be a lot more skeptical.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you are the author of or otherwise involved with a story that was submitted to the site, ask and someone can send you an invite.
|
||||
We've unfortunately had problems with impersonation, so it helps a lot if you point out how your email address is linked to the story.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The channel has a bot named
|
||||
<a href="https://github.com/lobsters/lobstersbot">mockturtle</a>.
|
||||
It announces new stories submitted to the site and provides other useful features like showing the page title of URLs mentioned in the channel.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you'd like a cloak to note that you've contributed to
|
||||
<a href="https://github.com/lobsters/lobsters">Lobsters development</a>
|
||||
or just for privacy as a regular user, contact a channel operator for a
|
||||
<tt>lobsters/developer/username</tt> or <tt>lobsters/user/username</tt>
|
||||
cloak.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
For a feed of stories without discussion, <tt>mockturtle</tt> also posts new stories in <a href="ircs://irc.libera.chat/lobsters-feed"><tt>#lobsters-feed</tt></a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Lobsters used to have a channel called <tt>#lobsters-boil</tt> for off-topic conversations (especially American politics) that "boiled over" from the main channel.
|
||||
It was useful in the wake of some big events, but the mods <a href="https://en.wikipedia.org/wiki/Abilene_paradox">didn't want to run it indefinitely</a>.
|
||||
Community members independently run ##crustaceans subject to their own policies, if you're looking for more off-topic discussion.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
<p>new posts are mirrored to tilde.chat in #meta and #tildeverse</p>
|
||||
<p>comments are mirrored to #tildeverse</p>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
class << Rails.application
|
||||
def domain
|
||||
"tilde.news"
|
||||
end
|
||||
|
||||
def name
|
||||
"tilde news"
|
||||
end
|
||||
end
|
||||
|
||||
Rails.application.routes.default_url_options[:host] = Rails.application.domain
|
|
@ -55,7 +55,7 @@ on_worker_boot { |index| sleep sleep_for_index(index, worker_boot_duration) }
|
|||
# before forking the application. This takes advantage of Copy On Write
|
||||
# process behavior so workers use less memory.
|
||||
if ENV.fetch("RAILS_ENV") == "production"
|
||||
bind "unix:///srv/lobste.rs/run/puma.sock"
|
||||
bind "unix:///srv/lobsters/lobsters/run/puma.sock"
|
||||
|
||||
# phased restarts
|
||||
# https://github.com/puma/puma/blob/master/docs/restart.md
|
||||
|
|
|
@ -8,7 +8,7 @@ class CreateCategories < ActiveRecord::Migration[5.2]
|
|||
end
|
||||
|
||||
def change
|
||||
raise "You need to edit this migration to define categories matching your site" unless Rails.application.name == "Lobsters"
|
||||
#raise "You need to edit this migration to define categories matching your site" unless Rails.application.name == 'Lobsters'
|
||||
|
||||
create_table :categories do |t|
|
||||
t.string :category
|
||||
|
@ -20,18 +20,22 @@ class CreateCategories < ActiveRecord::Migration[5.2]
|
|||
# list your tags in console with: Tag.all.pluck(:tag).join(' ')
|
||||
|
||||
{
|
||||
compsci: %w[ai compsci distributed formalmethods graphics osdev plt programming networking],
|
||||
culture: %w[culture person philosophy law],
|
||||
field: %w[cogsci crypto education finance hardware math science],
|
||||
format: %w[ask audio pdf show slides transcript video],
|
||||
genre: %w[art book event historical job news rant release satire],
|
||||
interaction: %w[a11y design visualization],
|
||||
languages: %w[apl assembly c c++ clojure css d dotnet elixir elm erlang fortran go haskell java javascript lisp lua ml nodejs objectivec perl php python ruby rust scala swift],
|
||||
lobsters: %w[announce interview meta],
|
||||
os: %w[android dragonflybsd freebsd illumos ios linux mac netbsd openbsd unix windows],
|
||||
platforms: %w[browsers cryptocurrencies email games ipv6 mobile wasm web],
|
||||
practices: %w[api debugging devops performance practices privacy reversing scaling security testing virtualization],
|
||||
tools: %w[compilers databases emacs systemd vcs vim]
|
||||
misc: ["test"],
|
||||
capitalism: ["business", "capitalism", "censorship", "cloud-computing", "blockchain", "cryptocurrency", "5G", "adblock", "artificial-intelligence", "data-analysis", "data-brokers", "data-exploration", "data-science", "data-visualization", "extreme-capitalism", "finding-cures", "government", "health-insurance", "information-abundance", "intelligent-cloud", "intelligent-edge", "IoT", "machine-learning", "microsoft", "oracle", "propaganda", "SaaS", "social-data", "social-media", "surveillance", "surveillance-capitalism", "twitch", "U.S.A", "USA", "youtube"],
|
||||
social: ["IRC", "matrix", "fediverse", "email"],
|
||||
software: ["projects", "command line", "algorithms", "automation", "FOSS", "GNU", "gnu+linux", "agile", "programming", "open-source", "UNIX", "theory", "design", "kernel", "init", "software-development"],
|
||||
hardware: ["Hardware", "desktop-computing", "Raspberry-Pi"],
|
||||
os: ["BSD", "Linux", "macos", "windows", "distros"],
|
||||
languages: ["bash", "css", "javascript", "lisp", "rust", "python"],
|
||||
learn: ["ecology", "education", "EFF", "guide", "History", "Hackers", "hackerspace", "learning", "makerspace", "projects", "physics", "science", "space", "leadership"],
|
||||
tools: ["emacs", "git", "shell", "systemd", "terminal", "ssh", "vim", "dns", "scripting"],
|
||||
privacy: ["anonymity", "Privacy"],
|
||||
security: ["cryptography", "cybersecurity", "security"],
|
||||
tildes: ["yourtilde", "~team", "~town", "envs", "tildes", "tildeverse", "thunix", "system administration"],
|
||||
culture: ["coffee", "content_warning", "current-events", "Art", "astronomy", "broadcasting", "equality", "fun", "gaming", "general", "health", "meme", "repair", "tips-n-tricks", "today-i-learned", "trivia", "yikes", "random", "MUSH", "satire", "sports"],
|
||||
people: ["dennis-ritchie", "ken-thompson", "Luke Smith", "paul-ford", "richard-stallman"],
|
||||
smallinternet: ["decentralized-internet", "gopher", "gemini", "internet-freedom", "lowtech", "self-hosting", "slow", "small internet", "SpartanWeb", "non-commerical-internet", "protocols", "text", "KISS", "design"],
|
||||
web: ["digitalization", "internet", "modern-web", "mozilla", "Podcasts", "radio", "media", "multiplayer", "Reddit", "search engines", "Video", "web", "web-browsers", "web-development"],
|
||||
}.each do |category, tags|
|
||||
c = Category.create! category: category
|
||||
Tag.where(tag: tags).update_all(category_id: c.id)
|
||||
|
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 885 B |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 15 KiB |