No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 22KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453
  1. <!DOCTYPE html>
  2. <html>
  3. <!--
  4. Asymptote Club Homepage
  5. Copyright (C) 2018 Zebulon McCorkle et al. (see https://git.asymptote.club/asymptote/homepage/commits/branch/master)
  6. This program is free software: you can redistribute it and/or modify
  7. it under the terms of the GNU Affero General Public License as published by
  8. the Free Software Foundation, either version 3 of the License, or
  9. (at your option) any later version.
  10. This program is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. GNU Affero General Public License for more details.
  14. You should have received a copy of the GNU Affero General Public License
  15. along with this program. If not, see <https://www.gnu.org/licenses/>.
  16. -->
  17. <head>
  18. <title>Asymptote Club</title>
  19. <meta name="viewport" content="width=device-width, initial-scale=1" />
  20. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.3.2/semantic.min.css" integrity="sha256-Z8Bv3UrxpRsWTfTPIjCojw5CdRNYSPw3TyxoU8WZSrM="
  21. crossorigin="anonymous" />
  22. </head>
  23. <body>
  24. <div class="ui container">
  25. <p></p>
  26. <h1 class="ui center aligned icon header">
  27. <i class="circular server icon"></i>
  28. <div class="content">
  29. Asymptote Club
  30. <div class="sub header">Website is a work in progress.</div>
  31. </div>
  32. </h1>
  33. <p>Asymptote Club is a non-profit free (libre) software enthusiast club dedicated to hosting free (as in freedom) services.
  34. All of our services are hosted on VPSes that are fully managed by the Asymptote Club admin team. Asymptote Club
  35. is currently on what we consider Stage 1, with infrastructure hosted on VPSes and running Ubuntu for ease of
  36. setup. Stage 2 will come with a switch to a dedicated server as a VM host, for more control, and Debian GNU/Linux
  37. to fully embrace free software.</p>
  38. <p>The servers are run by a group of members. If you would like to help out with administration (doing regular maintenance
  39. tasks, adding new services. etc.), reach out to zebmccorkle!</p>
  40. <p>The source for this page can be found at
  41. <a href="https://git.asymptote.club">asymptote/homepage</a> on the Git service. It is licensed under the
  42. <a href="LICENSE.txt">AGPL version 3.0 or any later version</a>.</p>
  43. <h1>Funding</h1>
  44. <p>
  45. <script src="eth-button.js" data-address="0x55224A105D2E1F00AaC0427D50e1b6AE06aa96A8" data-meta="eth-button"></script>
  46. <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
  47. <input type="hidden" name="cmd" value="_s-xclick">
  48. <input type="hidden" name="hosted_button_id" value="XDZN33DBTVK74">
  49. <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
  50. <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
  51. </form>
  52. </p>
  53. <p>
  54. Asymptote Club is run by volunteers and completely funded by members' donations. If you would like to donate money, servers,
  55. or even your time, please contact an admin. Any contributions are greatly appreciated.
  56. </p>
  57. <p>
  58. As a matter of fact, our current server infrastructure is temporary until we can afford a dedicated server to put everything
  59. on. Currently, I (zebmccorkle) am eyeballing So you Start's
  60. <a href="https://www.soyoustart.com/us/offers/1804sys47.xml">E3-SSD-1-32</a>, which is $47.99 per month and includes a decent 4-core CPU, 32GB of RAM, and an IPv4 /28 for
  61. $48 one time. That would last us for a while. Of course, if anybody else has anything else in mind, please do
  62. let me know at
  63. <a href="mailto:zebmccorkle@asymptote.club">zebmccorkle@asymptote.club</a>.
  64. </p>
  65. <p>
  66. Current infrastructure only costs about $15/month, which I (zebmccorkle) can mostly handle fine, though as a high school
  67. student with non-regular contract work I would appreciate if someone else would contribute a little to make sure
  68. Asymptote stays online.
  69. </p>
  70. <p>
  71. Any extra monetary donations recieved but not spent each quarter will be donated to projects used by Asymptote Club. This
  72. project will be voted for on the mailing list.
  73. </p>
  74. <div class="ui green progress" id="goal-progress" data-percent="5">
  75. <div class="bar">
  76. <div class="progress"></div>
  77. </div>
  78. <div class="label"></div>
  79. </div>
  80. <h2>Recent Donors</h2>
  81. <p>
  82. If you donate by PayPal, make sure to say your Asymptote Club username, name/nickname/psuedonym, and a message in the PayPal
  83. "additional info" section. If you donate any other way, send
  84. <a href="mailto:zebmccorkle@asymptote.club">zebmccorkle</a> an email with that information so it can be put here. This list is updated manually, so it might
  85. be a day or two before your donation shows up here.
  86. </p>
  87. <div class="ui four cards" id="recent"></div>
  88. <h1>Services</h1>
  89. <div class="ui three stackable cards">
  90. <div class="card">
  91. <div class="content">
  92. <div class="header">
  93. Git
  94. </div>
  95. <div class="meta">
  96. Based on Gitea (MIT license)
  97. </div>
  98. <div class="description">
  99. The Git service is similar to GitHub. When combined with continuous integration (and maybe a mailing list), it becomes a
  100. full software project management tool.
  101. </div>
  102. </div>
  103. <a href="https://git.asymptote.club" class="ui fluid blue bottom attached button">
  104. Go
  105. </a>
  106. </div>
  107. <div class="card">
  108. <div class="content">
  109. <div class="header">
  110. CI
  111. </div>
  112. <div class="meta">
  113. Based on Drone (Community Edition; Apache 2.0 license)
  114. </div>
  115. <div class="description">
  116. The CI service is similar to Travis CI. It is tightly integrated to the Git service and functions in a similar way.
  117. </div>
  118. </div>
  119. <a href="https://ci.asymptote.club" class="ui fluid blue bottom attached button">
  120. Go
  121. </a>
  122. </div>
  123. <div class="card">
  124. <div class="content">
  125. <div class="header">
  126. Account Management
  127. </div>
  128. <div class="meta">
  129. Completely custom; see
  130. <a href="https://git.asymptote.club/asymptote/account">the source code</a> (AGPL 3.0 or later)
  131. </div>
  132. <div class="description">
  133. Asymptote Account Management allows you to change your name, password, SSH key, and login shell.
  134. </div>
  135. </div>
  136. <a href="https://account.asymptote.club" class="ui fluid blue bottom attached button">
  137. Go
  138. </a>
  139. </div>
  140. <div class="card">
  141. <div class="content">
  142. <div class="header">
  143. Mail
  144. </div>
  145. <div class="meta">
  146. Based on Postfix (IBM Public License), Dovecot (MIT license and LGPL 2.1), and RainLoop (RainLoop Software License; todo:
  147. switch to AGPL 3.0 version)
  148. </div>
  149. <div class="description">
  150. Email is accessible through the webmail interface or IMAP/SMTP. The IMAP and SMTP server is mail.asymptote.club, with both
  151. services on STARTTLS. Username is just your username (without @asymptote.club), and password is just
  152. your password.
  153. </div>
  154. </div>
  155. <a href="https://mail.asymptote.club" class="ui fluid blue bottom attached button">
  156. Go
  157. </a>
  158. </div>
  159. <div class="card">
  160. <div class="content">
  161. <div class="header">
  162. Mailing Lists
  163. </div>
  164. <div class="meta">
  165. Based on GNU Mailman (GPL 3.0)
  166. </div>
  167. </div>
  168. <a href="https://lists.asymptote.club" class="ui fluid blue bottom attached button">
  169. Go
  170. </a>
  171. </div>
  172. <div class="card">
  173. <div class="content">
  174. <div class="header">
  175. Shell Server
  176. </div>
  177. <div class="meta">
  178. Based on Ubuntu GNU/Linux (various licenses)
  179. </div>
  180. <div class="description">
  181. The server
  182. <code>major</code> (which also runs the mail server) is accessible to any Asymptote member by SSH. Simply add your
  183. public key to the Account Manager and run
  184. <code>ssh username@major.asymptote.network</code>.
  185. </div>
  186. </div>
  187. </div>
  188. <div class="card">
  189. <div class="content">
  190. <div class="header">
  191. Static Site Hosting
  192. </div>
  193. <div class="meta">
  194. Based on Nginx (2-clause BSD licensed)
  195. </div>
  196. <div class="description">
  197. Every user has webspace at &lt;username&gt;.u.asymptote.club. To use it, run
  198. <code>create_public_html</code> on the shell server and put your files in ~/public_html. The static site generators Jekyll (MIT
  199. license) and Hugo (Apache 2.0 license) are installed on Major, so you can easily use them to generate
  200. your website.
  201. </div>
  202. </div>
  203. </div>
  204. <div class="card">
  205. <div class="content">
  206. <div class="header">
  207. Pastes
  208. </div>
  209. <div class="meta">
  210. Based on Up1 (MIT license)
  211. </div>
  212. <div class="description">
  213. Just a simple Pastebin-like service, except it can also host images and other files. No guarantee with regard to how long
  214. files are kept; they're cleared out if space seems to be running too low.
  215. </div>
  216. </div>
  217. <a href="/paste" class="ui fluid blue bottom attached button">
  218. Go
  219. </a>
  220. </div>
  221. <div class="card">
  222. <div class="content">
  223. <div class="header">
  224. Jupyter
  225. </div>
  226. <div class="meta">
  227. Based on Jupyter (BSD license)
  228. </div>
  229. <div class="description">
  230. Tinker with Python, Sage, or R inside a Jupyter notebook. You get your own Jupyter instance, just log in.
  231. </div>
  232. </div>
  233. <a href="https://jupyter.asymptote.club/" class="ui fluid blue bottom attached button">
  234. Go
  235. </a>
  236. </div>
  237. <div class="card">
  238. <div class="content">
  239. <div class="header">
  240. Matrix
  241. </div>
  242. <div class="meta">
  243. Based on Synapse (Apache 2.0 license) and Riot (Apache 2.0 license)
  244. </div>
  245. <div class="description">
  246. <blockquote>
  247. <p>An open network for secure, decentralized communication.
  248. </p>
  249. <p>- Matrix.org homepage (https://matrix.org)
  250. </p>
  251. </blockquote>
  252. Asymptote is hosting a Matrix homeserver. You can either use our Riot instance or point your Matrix client to the
  253. <code>https://asymptote.club</code> homeserver.
  254. </div>
  255. </div>
  256. <a href="/matrix" class="ui fluid blue bottom attached button">
  257. Go
  258. </a>
  259. </div>
  260. <div class="card">
  261. <div class="content">
  262. <div class="header">
  263. XMPP/Jabber
  264. </div>
  265. <div class="meta">
  266. Based on Prosody (MIT license)
  267. </div>
  268. <div class="description">
  269. There is currently an XMPP server running, providing one-on-one chats. Use your favorite XMPP client with your Asymptote
  270. email address as your ID.
  271. </div>
  272. </div>
  273. </div>
  274. <div class="card">
  275. <div class="content">
  276. <div class="header">
  277. ZNC Bouncer
  278. </div>
  279. <div class="meta">
  280. Based on ZNC (Apache 2.0 license)
  281. </div>
  282. <div class="description">
  283. Keep connected to IRC networks, and keep in touch with other Asymptote users with
  284. <a href="https://wiki.znc.in/Partyline">Partyline</a>. Right now, you will need to ignore TLS errors.
  285. </div>
  286. </div>
  287. <a href="https://irc.asymptote.club" class="ui fluid blue bottom attached button">
  288. Go
  289. </a>
  290. </div>
  291. <div class="card">
  292. <div class="content">
  293. <div class="header">
  294. Mastodon
  295. </div>
  296. <div class="meta">
  297. Based on Mastodon (AGPL 3.0)
  298. </div>
  299. <div class="description">
  300. <blockquote>
  301. <p>Your self-hosted, globally interconnected microblogging community
  302. </p>
  303. <p>- Mastodon homepage (https://joinmastodon.org/)
  304. </p>
  305. </blockquote>
  306. <p>
  307. <del>Asymptote is hosting a Mastodon server.</del>
  308. </p>
  309. <p>Due to storage issues, the Mastodon server has been removed. If our storage situation gets better,
  310. the Mastodon server will be brought back.</p>
  311. </div>
  312. </div>
  313. </div>
  314. <div class="card">
  315. <div class="content">
  316. <div class="header">
  317. Membership
  318. </div>
  319. <div class="meta">
  320. Invite-only
  321. </div>
  322. <div class="description">
  323. <p>
  324. Asymptote Club membership is invite-only. If you know a member, have them ask an admin to invite you. If you don't know any
  325. members, we congregate on the Matrix room
  326. <code>#lobby:asymptote.club</code>. Integrate into the community and somebody might be nice and invite you.
  327. </p>
  328. <p>
  329. To those here from Lobsters,
  330. <a href="https://lobste.rs/s/nuavkg/asymptote_club#c_aur0cb">I am no longer adding Lobsters members</a>. The invite system is still operational, but the open-ish
  331. registration is over.
  332. </p>
  333. </div>
  334. </div>
  335. </div>
  336. </div>
  337. <div class="ui divider"></div>
  338. <p>Licensed under the AGPL 3.0 or any later version -
  339. <a href="https://git.asymptote.club/asymptote/homepage">See source</a>
  340. </p>
  341. <p>
  342. <a href="https://git.asymptote.club/asymptote/legal">Legal (terms of service and privacy policy)</a>
  343. </p>
  344. </div>
  345. <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
  346. crossorigin="anonymous"></script>
  347. <script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.3.2/semantic.min.js" integrity="sha256-/P4bJXh+K+kZ7M5aKUKxAcvN8105oYfKkQ2cgwVZ8r4="
  348. crossorigin="anonymous"></script>
  349. <script>
  350. function goalFor(goals, time) {
  351. for (var i = 0; i < goals.length; i++) {
  352. if (goals[i].start < time && goals[i].stop > time) {
  353. return goals[i];
  354. }
  355. }
  356. }
  357. function processData(data) {
  358. var time = Math.round((new Date()).getTime() / 1000);
  359. var goal = goalFor(data.goals, time);
  360. var funded = 0;
  361. var totalFunded = 0;
  362. for (var i = 0; i < data.donations.length; i++) {
  363. if (data.donations[i].example) continue;
  364. totalFunded += data.donations[i].amount;
  365. data.donations[i].goal = goalFor(data.goals, data.donations[i].date);
  366. if (!data.donations[i].notGoal && data.donations[i].goal === goal) {
  367. funded += data.donations[i].amount;
  368. }
  369. }
  370. return {
  371. funded: totalFunded,
  372. goal: {
  373. name: goal.name,
  374. amount: goal.amount,
  375. funded: funded,
  376. },
  377. }
  378. }
  379. $(function () {
  380. $.getJSON('/donations.json', function (data) {
  381. var processed = processData(data);
  382. $('#goal-progress').progress({
  383. value: processed.goal.funded,
  384. total: processed.goal.amount,
  385. autoSuccess: false,
  386. });
  387. if (processed.goal.funded >= processed.goal.amount) {
  388. $('#goal-progress').toggleClass('green').toggleClass('teal');
  389. }
  390. $('#goal-progress .label').text('$' + processed.goal.funded / 100
  391. + ' of our $' + processed.goal.amount / 100
  392. + ' ' + processed.goal.name + ' goal'
  393. + ((processed.goal.funded >= processed.goal.amount)
  394. ? ' - fully funded!'
  395. : ''));
  396. $('.ui.dimmer').toggleClass('active');
  397. var donationsShown = 0;
  398. for (var i = 0; donationsShown < 3 && i < data.donations.length; i++ , donationsShown++) {
  399. const donation = data.donations[data.donations.length - 1 - i];
  400. if (donation.example) continue;
  401. $('#recent').append(
  402. $('<div class="card"></div>').append(
  403. $('<div class="content"></div>').append(
  404. $('<img class="right floated mini ui image" />')
  405. .attr('src', donation.by.avatar)
  406. ).append(
  407. $('<div class="header"></div>')
  408. .append(
  409. $('<a></a>')
  410. .attr('href', donation.by.link)
  411. .text(donation.by.name + (donation.by.asymptote ? ' (' + donation.by.asymptote + ')' : ''))
  412. )
  413. ).append(
  414. $('<div class="meta"></div>')
  415. .text('$' + donation.amount / 100)
  416. ).append(
  417. $('<div class="description"></div>')
  418. .text(donation.message)
  419. )
  420. )
  421. );
  422. }
  423. for (var i = 0; i < (4 - donationsShown); i++) {
  424. $('#recent').append(
  425. $('<div class="card"></div>').append(
  426. $('<div class="content"></div>').append(
  427. $('<div class="header">You could be here!</div>')
  428. ).append(
  429. $('<div class="description">Donate and help Asymptote Club continue operating long into the future!</div>')
  430. )
  431. )
  432. );
  433. }
  434. });
  435. });
  436. </script>
  437. </body>
  438. </html>