tilde.news customizations

This commit is contained in:
Ben Harris 2021-09-29 14:31:32 -04:00
parent 30295c028a
commit 7e1524322b
13 changed files with 124 additions and 445 deletions

14
.gitignore vendored
View File

@ -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

View File

@ -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 {

View File

@ -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;
}
}

View File

@ -140,7 +140,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

View File

@ -1,355 +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="/u/pushcx">Peter Bhat Harkins</a> ("pushcx"), contact him with any support issues.
Lobsters was created by <a href="/u/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 <a href="/u">user tree</a> 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
(<%= raw(
Tag.not_permitted_for_new_users.pluck(:tag).map { |t| link_to t, tag_path(t) }.join(' ')
) %>).
</span>
</p>
<p>
The quickest way to receive an invitation is to talk to someone you <a href="/u">recognize from the site</a>.
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 <a href="/u?moderators=1">public</a>.
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.
If you're an academic researcher, please <a href="https://lobste.rs/s/cqnzl5/lobste_rs_access_pattern_statistics_for">be like MIT</a>, not like <a href="https://github.com/lobsters/lobsters/issues/517">UChicago</a> secretly experimenting on maintainers without IRB review.
</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://twitter.com/lobsters">Official Twitter
mirror</a></strong> posts all stories that have reached the front page to
the <a href="https://twitter.com/lobsters">@lobsters</a> account on Twitter
for easy following, retweeting/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 &lt;= 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://www.tarsnap.com">Tarsnap</a> for backups, 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>
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>

View File

@ -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="/u/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="/u/pushcx">@pushcx</a>,
<a href="/u/355e3b">@355e3b</a> (<tt>c355e3b</tt> on IRC), and
<a href="/u/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>

View File

@ -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

View File

@ -33,7 +33,7 @@ workers ENV.fetch("WEB_CONCURRENCY") { 12 }
# process behavior so workers use less memory.
#
if ENV.fetch("RAILS_ENV") == "production"
bind 'unix:///srv/lobste.rs/http/tmp/puma.sock'
bind 'unix:///srv/lobsters/lobsters/http/tmp/puma.sock'
preload_app!
end

View File

@ -7,7 +7,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
@ -19,18 +19,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)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
public/favicon-16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 885 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 15 KiB