├── Code-of-Conduct.md ├── Community-Support.md ├── README.md ├── clojure-survey-ecosystem-involvement-chart.docx ├── clojure-survey-ecosystem-involvement-chart.pdf ├── clojure-survey-ecosystem-involvement-chart.png ├── clojure-survey-ecosystem-involvement.xlsx ├── clojurians-slack-archive-notes.md ├── hackpad-archive ├── Chat-Protocol-Criticisms.md ├── Concerns.md ├── Contributing.md ├── Home.md ├── IRC.md ├── Licensing.md ├── QA.md ├── References.md └── Slackpocalypse.md └── welcome-message.md /Code-of-Conduct.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | This was originally a [Google Docs version](https://goo.gl/VsJ8q8). 3 | 4 | **Harassment (Quick Version)** 5 | 6 | Clojurians is dedicated to providing a harassment-free experience for everyone, regardless of gender, sexual orientation, disability, physical appearance, body size, race, or religion. We do not tolerate harassment of Slack participants in any form. Sexual language and imagery is not appropriate for any chat topic. Participants violating these rules will be expelled from the group at the sole discretion of the group administrators. 7 | 8 | **Harassment (Less Quick Version)** 9 | 10 | Harassment includes offensive verbal comments related to gender, sexual orientation, disability, physical appearance, body size, race, religion, sexual images, deliberate intimidation, stalking, sustained disruption of discussions or other events, and unwelcome sexual attention. 11 | 12 | Participants asked to stop any harassing behavior are expected to comply immediately. 13 | 14 | If you are being harassed, notice that someone else is being harassed, or have any other concerns, please notify a Slack administrator immediately. 15 | 16 | We expect participants to follow these rules in all discussions in our Slack channels. We think people should follow these rules outside of Slack too! 17 | 18 | **Inappropriate Language** 19 | 20 | The use of profanity is heavily discouraged. Please refrain from using language that could be deemed inappropriate. Participants using inappropriate language will be asked to edit messages when it happens. 21 | 22 | **Owners / Admins** 23 | 24 | Here is a list of people who are current owners and admins for the group. If you have any issues or need help, please feel free to reach out to anyone on this list. 25 | 26 | The role of the primary owner: 27 | 28 | - This person is the steward for the group. 29 | - They have the final say in any decision. 30 | - They have the ability to communicate with Slack directly on behalf of the group. 31 | 32 | 33 | The role of owners: 34 | 35 | - They are a backup in case something happens to the primary owner. 36 | - They have rights in the system tied to the owner role. 37 | - They act as administrators. 38 | 39 | 40 | The role of administrators: 41 | 42 | - They monitor the public channels for inappropriate behavior. 43 | - They have full voting rights for decisions that affect the group. 44 | - They have rights in the system tied to the admin role. 45 | 46 | **Primary Owner:** Sean Corfield (**@seancorfield**) 47 | 48 | **Owners:** 49 | - Dan Sutton (**@dpsutton**) 50 | - Egg Syntax (**@eggsyntax**) 51 | - Gavin-John Noonan (**@adulteratedjedi**) - Clojurians Founder 52 | - Peter Strömberg (**@pez**) 53 | 54 | **Admins:** 55 | 56 | - Anna Pawlicka (**@annapawlicka**) 57 | - Eugene Pakhomov (**@p-himik**) 58 | - Martin Klepsch (**@martinklepsch**) 59 | - Michiel Borkent (**@borkdude**) 60 | - Robert Stuttaford (**@robert-stuttaford**) 61 | - Vincent Cantin (**@Vincent Cantin**) 62 | -------------------------------------------------------------------------------- /Community-Support.md: -------------------------------------------------------------------------------- 1 | # Community Support 2 | I've been noticing some patterns in the help that I give people on Slack/Chat. Such as: 3 | 4 | * directing someone to an appropriate channel so they have a better chance of getting help 5 | 6 | * creating new channels when there isn't an existing one that represents the kinds of conversations I want to have (everyone should know they have this power and maybe some advice on how best to wield it) 7 | 8 | * inviting people I know to come join in on a conversation 9 | 10 | * encouraging non-default avatars, whether real pictures or some identifying graphic, so that the person becomes recognized as a unique and distinctive individual 11 | 12 | I think these are important and useful patterns to make sure the new system has and maybe even to optimize since they occur frequently and enhance the user experience. 13 | 14 | Would also be nice to have integration with Jira to make it easier to file tickets for Clojure and ClojureScript core as the need for those often arises out of chat conversations. 15 | 16 | Please add to these lists if you think of any others. 17 | 18 | 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # community-development 2 | 3 | The Clojurians Slack -- self-signup: http://clojurians.net and chat: https://clojurians.slack.com -- is the largest online community of Clojure developers right now (January 2021). Many other online communities for Clojure exist: starting with [r/Clojure on Reddit](https://www.reddit.com/r/Clojure/) and that lists most of the other popular hangouts in its right hand navigation bar (we don't duplicate them here so that we don't have to also keep a list up-to-date here!). 4 | 5 | **The Clojurians Slack operates under this [Code of Conduct](https://github.com/clojurians/community-development/blob/master/Code-of-Conduct.md).** 6 | 7 | We've historically used the free plan for Slack because of the large number of active users (it would cost many thousands of dollars a month to upgrade), which meant that only a few days of messages are visible/searchable. We currently have a sponsored "Pro" plan courtesy of Slack themselves, but that could change in future. With the Pro plan, we have all our history available and searchable. 8 | 9 | Most channels are also archived to https://clojurians-log.clojureverse.org/ (and if you create a new channel on the Clojurians Slack, you can `/invite @logbot` to it in order to log messages to that site). Many channels are also archived to the [Clojurians Zulip Chat](https://clojurians.zulipchat.com/) which is on the free open source plan and therefore has unlimited message visibility/searchability -- Slack channels show up as "topics" under the "slack-archive" stream (and if you create a new channel on the Clojurians Slack, you can `/invite @zulip-mirror-bot` to it in order to log messages to the Zulip chat). 10 | 11 | **For more details see [Andy Fingerhut's write up about archiving and searching those archives](https://github.com/clojurians/community-development/blob/master/clojurians-slack-archive-notes.md).** 12 | 13 | This repo also includes [historical notes about Slack alternatives that were discussed as part of the old Hackpad documents](https://github.com/clojurians/community-development/tree/master/hackpad-archive). 14 | -------------------------------------------------------------------------------- /clojure-survey-ecosystem-involvement-chart.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clojurians/community-development/1ab3640b50cea265aa803c978bd12f207fb3aec2/clojure-survey-ecosystem-involvement-chart.docx -------------------------------------------------------------------------------- /clojure-survey-ecosystem-involvement-chart.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clojurians/community-development/1ab3640b50cea265aa803c978bd12f207fb3aec2/clojure-survey-ecosystem-involvement-chart.pdf -------------------------------------------------------------------------------- /clojure-survey-ecosystem-involvement-chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clojurians/community-development/1ab3640b50cea265aa803c978bd12f207fb3aec2/clojure-survey-ecosystem-involvement-chart.png -------------------------------------------------------------------------------- /clojure-survey-ecosystem-involvement.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clojurians/community-development/1ab3640b50cea265aa803c978bd12f207fb3aec2/clojure-survey-ecosystem-involvement.xlsx -------------------------------------------------------------------------------- /clojurians-slack-archive-notes.md: -------------------------------------------------------------------------------- 1 | # Why doesn't Clojurians Slack let me search through old messages? 2 | 3 | Gavin-John Noonan created the Slack workspace 4 | https://clojurians.slack.com on March 1, 2015. By the beginning of 5 | 2017 (and perhaps earlier), it was already the most popular on-line 6 | chat location for topics related to Clojure development (chart and 7 | data linked below if you are curious). 8 | 9 | This Slack community was created via a free plan provided by Slack for 10 | open source communities. The advantage is that Slack pays for all of 11 | the resources. A disadvantage is that the free service limits the 12 | searchable message history to the most recent 10,000 messages, total 13 | across all channels. 14 | 15 | 16 | # Searching the existing logs of Clojurians Slack messages 17 | 18 | ## clojurians-log 19 | 20 | Browse clojurians-log: https://clojurians-log.clojureverse.org 21 | 22 | For several channels, the earliest messages recorded in clojurians-log 23 | go back to 2015. Others start later, e.g. because the channel was 24 | created later, and/or no one started logging the channel on 25 | clojurians-log until later. There are likely some 'gaps' in the 26 | middle where messages were not being logged. 27 | 28 | On Google, you can limit searches to any web site by appending 29 | `site:site-url` to the end of the search, e.g. to search for 30 | occurrences of `defmacro` only on the Clojurians log site, use the 31 | Google search: 32 | 33 | ``` 34 | defmacro site:clojurians-log.clojureverse.org 35 | ``` 36 | 37 | ## Clojurians Zulip 38 | 39 | The mirroring of many Clojurians Slack channels began on [Clojurians 40 | Zulip Chat](https://clojurians.zulipchat.com/) near the beginning of 2019. 41 | 42 | The archive can be found in the [#slack-archive 43 | stream](https://clojurians.zulipchat.com/#narrow/stream/180378-slack-archive). 44 | For every mirrored Slack channel there's a separate topic. Very likely 45 | most of your search results will appear in one of those. 46 | 47 | To search it (using the browser): 48 | - go to the [#slack-archive stream](https://clojurians.zulipchat.com/#narrow/stream/180378-slack-archive) 49 | - type `/` (or click the magnifying class in the top right) 50 | - append the search terms or string to the query, 51 | e.g. `stream:slack-archive "cannot be cast to class"` 52 | - link to results for this example search: [`stream:slack-archive "cannot be cast to class"`](https://clojurians.zulipchat.com/#narrow/stream/180378-slack-archive/search/.22cannot.20be.20cast.20to.20class.22) 53 | 54 | You'll see that it yields results from several topics (i.e. Slack 55 | channels) under the `slack-archive` stream. 56 | 57 | To see the original conversation that any of the found messages 58 | appeared in, do the following: 59 | - Select the message (a thick border will appear around it). 60 | - Click the topic (e.g. `slack-archive > beginners`). 61 | - Use the back-button to return to the search results. 62 | 63 | Note: As of 2021-Jan-07, the steps above sometimes get you to the 64 | message in the context of its conversation, but sometimes you end up 65 | at a completely different message in the topic. This might be a bug 66 | in Zulip. Below is an alternate method that may work more often: 67 | - Select the message (a thick border will appear around it). 68 | - When your cursor is anywhere over a message, look in the top right 69 | of that message. A little bit to the left of the message sent time 70 | is an icon of three dots stacked vertically. Clicking that icon 71 | pops up a menu. Select the item "Copy link to conversation". Paste 72 | this link somewhere useful, e.g. a new browser window or tab. 73 | 74 | To search within a specific Slack channel, add `topic:` with the 75 | corresponding name of the channel to the query, e.g. 76 | - `stream:slack-archive topic:beginners "cannot be cast to class"` 77 | - link to results for this example search: [`stream:slack-archive topic:beginners "cannot be cast to class"`](https://clojurians.zulipchat.com/#narrow/stream/180378-slack-archive/search/.22cannot.20be.20cast.20to.20class.22). 78 | 79 | As Clojurians Zulip has its own streams where people discuss Clojure 80 | (i.e. ones that are not copies of messages that were sent to 81 | Clojurians Slack), you can also search across _all_ public streams: 82 | - `streams:public "cannot be cast to class"` (note "streams:" not "stream:" here) 83 | - link to results for this example search: [`streams:public "cannot be cast to class"`](https://clojurians.zulipchat.com/#narrow/streams/public/search/.22cannot.20be.20cast.20to.20class.22). 84 | 85 | Zulip's help page on advanced search is a good place to read about 86 | more features: 87 | https://clojurians.zulipchat.com/help/search-for-messages 88 | 89 | 90 | # How to start logging a Clojurians Slack channel 91 | 92 | Logging of messages on Clojurians Slack is enabled on a 93 | per-Slack-channel basis, not globally. 94 | 95 | First, join the Clojurians Slack channel yourself. Then send one or 96 | more of these messages to the channel: 97 | 98 | + For Clojurians log: `/invite @logbot` 99 | + For logging to Clojurians ZulipChat: `/invite @zulip-mirror-bot` 100 | 101 | If someone has already successfully invited one of these bots before, 102 | you should see a response like `@logbot is already in this channel`, 103 | and no other human member will see any activity on the channel. 104 | 105 | If yours is the first attempt to add one of these bots, then everyone 106 | on the channel including you should see a message like `logbot [APP] 107 | was added to #channel-name`. 108 | 109 | 110 | # Can we upgrade Clojurians Slack to a paid version? 111 | 112 | Yes, someone could choose to pay for this. If someone chose to do 113 | this, they would be legally responsible to pay the bill to Slack for 114 | _all_ users of Clojurians Slack. The current pricing as of Jan 2021 115 | puts the bill at somewhere near USD $7,600 per month (with a 50% 116 | discount for the first 3 months). This amount could change later 117 | based upon Slack's pricing model, but it could also go up or down as 118 | the number of active users of Clojurians Slack changes. Slack does 119 | not provide a way to bill every user of Clojurians Slack separately 120 | for an equal fraction of that amount. 121 | 122 | 2021-Jan-06 snapshot of Clojurians Slack price estimate 123 | calculation: $8 USD x 952 members x 1 month = $7,616 USD, billed 124 | monthly. 125 | 126 | Given this price, it is perhaps quite understandable that no one has 127 | volunteered to take on such a financial obligation themselves. 128 | 129 | Several people have asked whether Slack offers an option where: 130 | 131 | + Individual users could pay a few dollars per month so that _they_ 132 | had access to unlimited search history on Clojurians.slack.com, but 133 | + everyone else who used it for free would continue to have the 134 | current limited search history. 135 | 136 | As of 2020, Slack does not offer such an option, and they expressed no 137 | interest in doing so. 138 | 139 | 140 | # Why doesn't everyone switch over to something better? 141 | 142 | First, there are many dimensions and aspects to "better", not a single 143 | 0 to 10 ranking that captures all judgements of a service that all 144 | people value equally. Slack has many good qualities. 145 | 146 | There are already on-line communities on other services created for 147 | discussing Clojure, e.g. on IRC, Discord, ZulipChat, and several 148 | others. As of 2021, none of them have reached the popularity that 149 | Slack has. 150 | 151 | + Discord: 152 | https://www.reddit.com/r/Clojure/comments/6c4z91/a_discord_for_clojurians/ 153 | + Zulip: https://clojureverse.org/t/ann-searchable-slack-archive/3777 154 | + IRC and some others listed here: https://clojure.org/community/resources 155 | 156 | Why doesn't everyone just switch to some other service? 157 | 158 | Every individual chooses which of these services they want to use. 159 | They are not limited to one, but few people want to participate in 10 160 | of them simultaneously. Even if someone is aware of all of them, they 161 | are likely to choose one, or perhaps two or three, that they find to 162 | give them a good UI experience, and more importantly, where _others 163 | respond to their questions_. So far, Slack has been the most popular 164 | place for Clojure developers. Yes, there is a network effect here: 165 | https://en.wikipedia.org/wiki/Network_effect 166 | 167 | Could the current situation ever change? Of course it could. But 168 | there is no "Clojure dictator for on-line chat" that can make all of 169 | these individuals use a different service. Think like a politician in 170 | a free society, or a sales person, not like a monarch issuing decrees, 171 | and you might find a way to persuade many people to switch services. 172 | Keep this in mind: merely because _you_ think service X is clearly 173 | superior to Slack, that fact alone is unlikely to convince people to 174 | join service X and stop using Slack. It is still unlikely, even if 175 | you have a well written article detailing all the ways that X is 176 | better than Slack. Even if you find many people who agree with your 177 | article. 178 | 179 | IRC was the most popular on-line chat forum for Clojure for several 180 | years, and then the majority of people gradually changed their primary 181 | choice to Slack. No one forced everyone to switch, and IRC is still 182 | used by a few people for discussing Clojure. 183 | 184 | The Clojurians Slack channel #community-development is the most 185 | appropriate place on Slack to discuss this. It has been discussed 186 | several times per year for several years, so please realize that it is 187 | not trivial to come up with a novel idea in this area. 188 | 189 | 190 | # State of Clojure Survey results for ecosystem involvement 191 | 192 | The State of Clojure Survey has had a little over 2,000 responders 193 | (i.e. people who choose to fill out the questionnaire) from 2016 194 | through 2020. The results for all questions can be found here: 195 | https://clojure.org/news/2020/02/20/state-of-clojure-2020 196 | 197 | The chart below shows the percentage of people who responded to the 198 | question "My involvement in the Clojure ecosystem includes". The 199 | first survey year shown is 2017, since the results were published in 200 | Jan 2017, but it is from the State of Clojure 2016 survey results, 201 | probably called that since the questionnaire was sent out and 202 | responded to late in 2016. 203 | 204 | ![ecosystem-involvement-survey-results](clojure-survey-ecosystem-involvement-chart.png) 205 | -------------------------------------------------------------------------------- /hackpad-archive/Chat-Protocol-Criticisms.md: -------------------------------------------------------------------------------- 1 | # Chat Protocol Criticisms 2 | 3 | 4 | [https://news.ycombinator.com/item?id=9770322](https://news.ycombinator.com/item?id=9770322) 5 | [https://news.ycombinator.com/item?id=10386847](https://news.ycombinator.com/item?id=10386847) 6 | [https://news.ycombinator.com/item?id=10068943](https://news.ycombinator.com/item?id=10068943) 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /hackpad-archive/Concerns.md: -------------------------------------------------------------------------------- 1 | # Concerns 2 | 3 | # Intro 4 | 5 | 6 | We will probably consolidate and prioritize concerns that people have at some point and on some other page. In the mean time, treat this like a big whiteboard where anyone can just add a section voicing their concerns. Keep in mind that others will be reviewing and prioritizing them at some point and we will take all of them seriously, but only to the extent that we are able to understand what you have written. So do your best to express yourself fully and clearly, perhaps even with examples, and we can summarize and shorten elsewhere. 7 | 8 | 9 | # Q1 10 | 11 | 12 | Is there going to be a monetary cost to be a user? I can't afford to pay for chat, or I have a philosophical or moral objection to money or the idea of charging for this service. 13 | 14 | 15 | # Q2 16 | 17 | 18 | Is it realistic to think that an unpaid community effort will succeed? Aren't you being foolish? You got us all to use Slack, which we like, and now it might go away and you aren't doing the right thing(s) to address that problem. 19 | 20 | 21 | # Q3 22 | 23 | 24 | I want to offer financial support for this effort because it is important to me and/or my business but I don't know how to do that and I certainly don't want to give my hard earned money to someone I don't trust so why don't you have some trustworthy third-party organization like one of those OSS non-profits provide financial oversight and make it easy for me to donate funds for hosting and admin costs? 25 | 26 | 27 | # Q4 28 | 29 | 30 | Who is going to host this chat service? How is hosting going to be paid for? Is it going to be secured against hackers and evil elements, like denial of service attacks? These things all take resources of time, skill, and money. How is that going to be handled in a safe, secure, professional manner so we don't have performance, security and other problems. If this succeeds and is popular it is going to have to be able to support that growth and handle those loads or it won't be any good. 31 | 32 | 33 | # Q5 34 | 35 | 36 | Just a note for discussion, I don't know how many of you use lobste.rs (see [login page]([https://lobste.rs/login](https://lobste.rs/login))), but I'm _highly_ opposed to having whatever it is we switch to be truly open access. 37 | 38 | I think that the history of IRC servers and IRC drama is evidence enough that if we offer a properly open chat platform, it will eventually be abused and used to harass people in manners which the unfortunate administrators will have great difficulty responding to. I think that the Lobsters approach of making you get an invite from an existing user is interesting in that it means you can't just spam smurf accounts and there is a chain of accountability in the case of a user who invites multiple abusive accounts to prevent such abuse. 39 | 40 | I understand that we want a low friction "newcommer first join" UX, but I think this does also need to be weighed with the potential for abuse. 41 | 42 | 43 | # Q6 44 | 45 | 46 | Who gets to act as a chat moderator? 47 | 48 | 49 | # Q7 50 | 51 | 52 | What to what Code of Conduct will we hold participants and use for resolving disputes? See also [Q6]([#Q6](/ep/search/?q=%23Q6)) 53 | 54 | See the existing [Code of Conduct](/Code-Of-Conduct) 55 | 56 | 57 | # Q8 58 | 59 | 60 | What is the choice/succession mechanism for administrators? 61 | 62 | 63 | # Q9 64 | 65 | 66 | Who gets to run bots? Where do bots get to post? Who has oversight of bots to make sure they don't do arbitrary and rude things like ignore particular people, post spam or otherwise detract from the community? 67 | 68 | 69 | -------------------------------------------------------------------------------- /hackpad-archive/Contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | This hackpad collection is public. To add a hackpad to the community development collection, simply follow these directions. 3 | 4 | 1. Create a new hackpad using this button in the top left: 5 | ![](https://hackpad-attachments.imgix.net/hackpad.com_SvOf8fTCGjY_p.412236_1452451835718_2016-01-10-125031_31x32_scrot.png?fit=max&w=882) 6 | 7 | 2. Write a document. 8 | 3. Set the document's access permissions to "public" by clicking on the green link to the left of the document title 9 | ![](https://hackpad-attachments.imgix.net/hackpad.com_SvOf8fTCGjY_p.412236_1452451889508_2016-01-10-125121_44x45_scrot.png?fit=max&w=882) 10 | 11 | 4. Add the document to the clojure-community collection by clicking 12 | ![](https://hackpad-attachments.imgix.net/hackpad.com_SvOf8fTCGjY_p.412236_1452451928857_2016-01-10-125206_136x35_scrot.png?fit=max&w=882) 13 | 14 | and searching in the resulting popdown bar for "clojure-community-development". 15 | 16 | 17 | That's it! Happy hacking! 18 | 19 | 20 | -------------------------------------------------------------------------------- /hackpad-archive/Home.md: -------------------------------------------------------------------------------- 1 | # Home 2 | 3 | All Clojurians are welcome to participate in the development of a chat app to help mitigate the risk of no longer being able to use Slack: Slackpocalypse 4 | 5 | # What is this? 6 | 7 | 8 | This will become the ultimate chat platform for the clojure community, built by the clojure community. Not only do we want to provide a realtime chat platform, we want to showcase the ecosystem and the tools this language has to offer. 9 | 10 | 11 | # Why? 12 | 13 | 14 | 15 | - Slack is proprietary and closed 16 | - Slack is a for-profit company controlled by the whims of its investors 17 | - Slack-the-company has declared they do not intend to support OSS communities as a valid use-case 18 | - Thus, it is possible/likely that Slack will change their terms of use in the future in ways which make large OSS communities on the platform untenable 19 | - Slack's current free plan only allows access to the most recent 10k messages. Due to the size of the community, this is about a day's messages right now, and presumably this will get worse over time. Various archiving hacks exist, but they're currently a violation of the Slack ToS and put the whole community at risk of being shut down. They also can't archive private conversations. 20 | - See Slackpocalypse for more. 21 | 22 | 23 | **Goals** 24 | 25 | - Slack-alike functionality 26 | - Organisation/channel based chat rooms. 27 | - Direct messages 28 | - Avatars 29 | - Emoji 30 | - Reactji 31 | - File uploads 32 | - Code highlighting 33 | - Easy signup workflow 34 | - Smart-links (should inline gifs if a gif link is pasted, smart previews of linked articles) 35 | - Search (ideally full-text clever search of entire archive) 36 | - Image support 37 | - Notifications 38 | - Integrations (git, etc) 39 | - Able to support at least 50k users without falling over 40 | - Must provide complete archive of activity 41 | - Mobile-friendly layout 42 | - Should be scriptable/botable 43 | - Easily deployable (should be possible to have a one-click-install button like on Digital Ocean) 44 | - ??? 45 | ### **Nice-to-haves** 46 | - Mobile clients (arguable should be in the main goals) 47 | - Reactji Performance Art (see pkobrien for examples) 48 | - Identicons ([https://en.wikipedia.org/wiki/Identicon](https://en.wikipedia.org/wiki/Identicon)) or similar ([https://robohash.org/](https://robohash.org/)) so people without custom avatars can still be easily distinguished 49 | - Embeddable (in other sites) 50 | - Clustering? (Will or can different deployments be clustered?) 51 | - ??? 52 | 53 | 54 | 55 | ### **Practical Considerations** 56 | - Performance 57 | - If this app brings a phone browser to a grinding halt, it's not going to work out (shouldn't be a big problem - i'm deploying a re-frame based app to phones with cordova and, apart from transitions, html/css/js is all fine - mccraigmccraig) 58 | - ditto for the server, ideally it should be possible to deploy on a $5 Digital Ocean VPS (I think this is unnecessarily restrictive - cfleming) 59 | 60 | 61 | **The Case For Inventing Our Own Wheel** 62 | 63 | - It's fun! 64 | - The Clojurians are clever and passionate people. 65 | - The world could do with a (or indeed several) truly OSS Slack clone. 66 | - Other wheels we've evaluated would require significant work to be a truly attractive slack replacement, and we don't want to do significant work if it's not in clj(s) :D. Also, Mattermost has a strange license... 67 | - A Clojure-based Slack clone would be: 68 | - An excellent showcase of the power of the language 69 | - A great tool for building the Clojurians community as it builds its own platform 70 | - Gives those of us who don't have a chance to write Clojure/Clojurescript for a living a chance to showcase abilities and practice skills. 71 | 72 | 73 | 74 | ### The Devil's advocate against inventing our own wheel 75 | - It's a big project and we're all very busy. 76 | - There are reasonable OSS options we could self-host (Mattermost, Zulip), they're just not clj(s) 77 | ### **Other wheels** 78 | - [https://www.flowdock.com/](https://www.flowdock.com/) 79 | - not self-hosted, and probably not scalable to our needs. but useful to look at for UI inspiration 80 | - Zulip 81 | - Mattermost 82 | - would need lots of UI polish things, and there are some consistency issues (unread count + notifications) that might be harder to fix 83 | - Discord 84 | - not self-hosted, but the reactiflux community moved there and appear to be happy w/ it 85 | - Discourse (forum, not chat, but similar problem) 86 | - not chat, but very widely used for communities such as ours, solves some of the problems. 87 | - RocketChat 88 | - [Here's a source](https://www.reddit.com/r/Meteor/comments/2w3i32/is_mdg_serious_about_mongo_alternatives/coo04zy) saying that each meteor process can handle 200 users, so on an 8-core machine w/ 4 processes per core, that's 6400 users. Although we don't know how well that applies to the RocketChat app specifically 89 | - Vector.im (matrix client) (see [The case for Matrix](/xRXYSO9zpyh)) 90 | - the general room has ~65 people online, out of 2k members 91 | 92 | 93 | 94 | # Who? 95 | 96 | If you feel like you have a stake in this effort please add your name to this list so we know that you feel this way. This doesn't imply a commitment or seniority or anything other than that you are involved and want to be kept in the loop. If you also have time to help out, even better. But serious interest is enough. 97 | 98 | 99 | - adulteratedjedi ([https://github.com/adulteratedjedi](https://github.com/adulteratedjedi)) 100 | - cfleming ([https://github.com/cfleming](https://github.com/cfleming)) 101 | - mfikes ([https://github.com/mfikes](https://github.com/mfikes)) 102 | - pkobrien ([https://github.com/pkobrien](https://github.com/pkobrien)) 103 | - seancorfield ([https://github.com/seancorfield](https://github.com/seancorfield)) 104 | - shanekilkelly ([https://github.com/ShaneKilkelly](https://github.com/ShaneKilkelly)) 105 | - chrishowejones ([https://github.com/chrishowejones](https://github.com/chrishowejones)) 106 | - donmullen ([https://github.com/donmullen](https://github.com/donmullen)) 107 | - lfn3 (Liam) ([https://github.com/lfn3](https://github.com/lfn3)) 108 | - jaredly ([https://github.com/jaredly](https://github.com/jaredly)) 109 | - arrdem ([https://github.com/arrdem](https://github.com/arrdem)) 110 | - johanatan ([https://github.com/johanatan](https://github.com/johanatan)) 111 | - kimsnj ([https://github.com/kimsnj](https://github.com/kimsnj)) 112 | - bhauman ([https://github.com/bhauman](https://github.com/bhauman)) 113 | - s-mage ([https://github.com/s-mage](https://github.com/s-mage)) 114 | - qsys ([https://github.com/qsys)](https://github.com/qsys) 115 | - mitchelkuijpers ([https://github.com/mitchelkuijpers](https://github.com/mitchelkuijpers)) 116 | - mccraigmccraig ([https://github.com/mccraigmccraig](https://github.com/mccraigmccraig)) 117 | - rafd ([https://github.com/rafd](https://github.com/rafd)) 118 | - madstap ([https://github.com/madstap](https://github.com/madstap)) 119 | - afhammad ([https://github.com/afhammad](https://github.com/afhammad)) 120 | - plexus ([https://github.com/plexus)](https://github.com/plexus) 121 | - jumarko ([http://github.com/jumarko](http://github.com/jumarko)) 122 | - you... ? 123 | 124 | 125 | 126 | # Where? 127 | 128 | The Internet. 129 | 130 | 131 | # When? 132 | 133 | April 15 at Clojure/west 2016 would be a nice target date for having something, even just a demo. 134 | 135 | 136 | # How? 137 | 138 | **Tech** 139 | Clojure on the server, Clojurescript on the client. All other technologies should be chosen on their ability to meet a particular need of the project. Our tech stack should be as simple as it _can be_, while being as complex as big as it _needs to be_. We should refrain from throwing a technology/library into the stack "just because". 140 | Whether it should use Datomic is an open question due to licensing. 141 | 142 | **Organisation** 143 | 144 | Need some kind of collaboration tool to manage features and determine who is working on what. 145 | 146 | 147 | -------------------------------------------------------------------------------- /hackpad-archive/IRC.md: -------------------------------------------------------------------------------- 1 | # IRC 2 | Before Slack there was IRC. There still is IRC, but Slack is more popular. What can we do to create a better integration of the two in the new app? Or do we not need to do that? Please discuss. 3 | 4 | 5 | - [http://whatthefuck.computer/blog/2015/11/01/on-the-balkinization-of-my-chat-communities/](http://whatthefuck.computer/blog/2015/11/01/on-the-balkinization-of-my-chat-communities/) 6 | 7 | 8 | 9 | # Comments on IRC 10 | 11 | @seancorfield 12 | 13 | "A couple of Slacks I'm on have tried full-on IRC bridges and they're an ugly experience (for both sides) since they have to fake the to/from accounts in bridged messages and they don't will any of the rich formatting or multimedia on the Slack side." 14 | 15 | 16 | @seancorfield 17 | 18 | "[#clojure](/ep/search/?q=%23clojure) on freenode is much smaller then this Slack community and there's a huge overlap in the actual participants ... I'd say there's probably only a small number of folks who are IRC-only (compared to 4,400 here, rather than 700? on IRC)." 19 | 20 | 21 | @seancorfield 22 | 23 | "it must have the low barrier of entry that Slack provides (which is why IRC has never grown to the level that Slack has). 24 | 25 | 26 | 27 | IRC is great as a plain text communications tool for communities but it’s a pretty sucky UI/UX, even with the nicest clients. And even with those clients, you’re still confronted with servers and ports and a bunch of IRC mumbo-jumbo that is irrelevant to "having and growing a community". 28 | 29 | 30 | 31 | If you want to bolt file uploading, code snippets, formatting, pasting images inline, sharing links that auto-expand and a whole bunch of features on top of IRC, you’ve got to also consider how all that affects the users of the underlying IRC rooms. You also need to consider community administration: Slack allows an administration team to manage user accounts, permissions, integrations and so on. 32 | 33 | 34 | 35 | Even on a closely controlled IRC server, maintaining decorum in a community is nigh-on impossible: have you seen the drive-by trolling and abuse that happens on Mozilla’s IRC servers in the Rust community, for example? 36 | 37 | 38 | 39 | I gave up on the Rust IRC community because they seemed unable to prevent spamming to a level that was making rooms unusable. *On their own servers* 40 | 41 | 42 | 43 | "I would be interested in seeing why people have latched onto Slack vs. IRC." — mostly because of the issues with IRC I listed above, which Slack does not suffer." 44 | 45 | 46 | @shaun-manhood 47 | 48 | "Yeah, that's my main reason as well - I kept thinking of going on the IRC channel but never wanted to put in the effort." 49 | 50 | 51 | @jaen 52 | 53 | Re: multiline messaging [not being supported by the IRC protocol] - that seems to be true according to the RFC: 54 | IRC messages are always lines of characters terminated with a CR-LF (Carriage Return - Line Feed) pair, and these messages SHALL NOT exceed 512 characters in length, counting all characters including the trailing CR-LF. Thus, there are 510 characters maximum allowed for the command and its parameters. There is no provision for continuation of message lines. 55 | ... 56 | True, but the server/proxy could just collapse messages according to some criteria for non-IRC users. 57 | And Matrix quite possibly solves those problems as well. 58 | # IRC Bridge 59 | 60 | Just because one implementation of a bridge does not handle multimedia integration very well does not mean that all possible bridge implementations would suffer the same. 61 | 62 | And this is precisely why I suggested folks setup a test Slack and ***actually try out the various IRC bridge projects*** rather than continuing to discuss them in the abstract! 63 | 64 | Also, "fake handles" might not be an issue: why not just clone whichever handle the person is using on whichever side to the other side (unless there is a collision and then just append _N)? 65 | 66 | And, regarding the potential for abuse/trolls from the IRC side polluting the "nice UX" side-- I would expect that the IRC channels themselves are already moderated/supervised so this wouldn't be an issue any more so than it already is for the IRC folks. 67 | 68 | Based on Rust's experience -- on Mozilla's _own_ IRC servers -- it is virtually impossible to stop abuse and trolling on popular channels: 69 | 70 | I gave up on the Rust IRC community because they seemed unable to prevent spamming to a level that was making rooms unusable. *On their own servers* 71 | 72 | 73 | 74 | # IRC vs something else 75 | 76 | Discussion from HN here: [https://news.ycombinator.com/item?id=10494224](https://news.ycombinator.com/item?id=10494224) 77 | 78 | See also: [https://twitter.com/patio11/status/660931499680657409](https://twitter.com/patio11/status/660931499680657409) 79 | 80 | IRC protocol extensions 81 | 82 | Lots of info is [here](https://github.com/grawity/irc-docs/blob/master/extensions.md) . I have no idea what 90% of that page means. In fact I have no idea what 90% of the IRC terminology means in general. I stumbled through getting myself set up on IRC but it was painful and I've forgotten whatever small amount I learned in the process. 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /hackpad-archive/Licensing.md: -------------------------------------------------------------------------------- 1 | # Licensing 2 | 3 | Placeholder for license discussion issues. 4 | 5 | # This App 6 | 7 | How is this app going to be licensed? Is anyone going to try to make a business out of this? 8 | 9 | # Datomic 10 | 11 | * some concerns expressed in discussion around possibly using Datomic 12 | * Concerns about the datomic licence - wary of building something on top of it. 13 | * Difficulty for others to get a license and host a service due to license. 14 | * Worth engaging Cognitect in a conversation about this to address concerns. 15 | * David Pollak (dpp) wrote about his concerns [here]([http://blog.goodstuff.im/datomic_license](http://blog.goodstuff.im/datomic_license)). 16 | 17 | 18 | -------------------------------------------------------------------------------- /hackpad-archive/QA.md: -------------------------------------------------------------------------------- 1 | # Q&A 2 | 3 | It gets old answering the same question over and over again so if we ask our questions here and folks add answers to questions then we have a single place to send everyone to see questions and answers. Cool, right? 4 | 5 | **Why are we doing this? We like Slack. Why not just stay with Slack?** 6 | 7 | A: Impending Slackpocalypse 8 | 9 | **Can't we just pay for Slack?** 10 | 11 | A: The cost is prohibitive and against the ideals of the community, which includes not excluding anyone. 12 | 13 | **We don't really need archives, do we? They're nice, but not necessary.** 14 | 15 | A: quote from pkobrien in the [#community](/ep/search/?q=%23community)-development slack channel "The businesses that would and could provide financial support have the greatest need for certain features like archiving of public discussion, archiving of private messages, ease of working with uploaded files (like error logs and screenshots for tech support). Since meeting their needs only improves the system to the benefit of the entire community I have no problem with making those features a priority in any evaluation." 16 | 17 | They're pretty much essential for a lot of the Cursive support I do. Often, someone will describe a bug or problem and send supporting information (screenshots, logs), either privately or in the Cursive channel. They're gone in a day right now, and that time is getting shorter as the community gets busier. Right now, I either "archive" it by hand, or (more likely) forget about the problem. 18 | 19 | **What about the folks who prefer IRC and are getting left out?** 20 | 21 | A: ? (also, see the [IRC page]([https://github.com/clojurians/clojurians-chat/wiki/IRC](https://github.com/clojurians/clojurians-chat/wiki/IRC))) 22 | 23 | **Why don't we just create a comparable UX over IRC?** 24 | 25 | A: see the [IRC page]([https://github.com/clojurians/clojurians-chat/wiki/IRC](https://github.com/clojurians/clojurians-chat/wiki/IRC)) 26 | 27 | **What is going to be migrated if we do have to leave Slack?** 28 | 29 | A: ? 30 | 31 | **How much warning, if any, would Slack give us before shutting us down?** 32 | 33 | A: ? 34 | 35 | 36 | -------------------------------------------------------------------------------- /hackpad-archive/References.md: -------------------------------------------------------------------------------- 1 | # References 2 | A place for listing information from other sources that may be helpful. 3 | 4 | 5 | - Slack OSS Alternatives 6 | [https://blog.okturtles.com/2015/11/five-open-source-slack-alternatives/](https://blog.okturtles.com/2015/11/five-open-source-slack-alternatives/) 7 | - Matrix 8 | [http://rix.si/blog/2015/12/19/matrix-and-indieweb/](http://rix.si/blog/2015/12/19/matrix-and-indieweb/) 9 | - "Chaf", talking about threading for chat [http://www.martinklepsch.org/chaf.html](http://www.martinklepsch.org/chaf.html) 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /hackpad-archive/Slackpocalypse.md: -------------------------------------------------------------------------------- 1 | # Slackpocalypse 2 | 3 | **What's the Slackpocalypse?** 4 | A while ago (late 2015) slack [closed down the reactiflux community](https://facebook.github.io/react/blog/2015/10/19/reactiflux-is-moving-to-discord.html ) when they hit 7500 members. We currently have ~6200 (as of 2016-06-06). Not sure on the rate of growth, but anecdotally it seems to be increasing. 5 | 6 | We're worried about slack doing the same thing that they did to reactiflux to the clojurians group. There's [some other reasons](https:// https://github.com/clojurians/clojurians-chat/wiki/Home#why) we're interested in moving (mostly chat history and general anxiety around how slack's business model might affect communities like ours). 7 | 8 | Paying for slack is almost entirely untenable due to the cost involved (several hundred thousands annually), and they don't seem to be particularly interested in our use case. Also, requiring members to pay for themselves violates our goal of inclusivity. 9 | 10 | **What are we going to do?** 11 | Presently we're evaluating more free/supportive alternatives, both free as in beer and free as in freedom, as well as starting to build our [own platform](https://github.com/clojurians/clojurians-chat/wiki/) on clojure/script. Depending on if and when we get get shut down by slack, we'll move to the clojure chat app, or the chosen alternative. If we find a sufficiently compelling alternative, or if the clojure version gets "done", we'll move to that. 12 | 13 | **Requirements** 14 | 15 | - Free for users 16 | - Slick, fast, easy to use 17 | - Quality apps for Web, Desktop, Android, iOS 18 | - Good Admin / Moderator Features 19 | - Discoverability of Channels 20 | - Be actively developed / Supported 21 | 22 | 23 | **Slack contenders** 24 | Mattermost: 25 | 26 | - Evaluated at: [http://mattermost.clojurians.net/clojurians/](http://mattermost.clojurians.net/clojurians/) 27 | 28 | Braid: 29 | 30 | [https://github.com/braidchat/braid](https://github.com/braidchat/braid) 31 | [https://www.braidchat.com/](https://www.braidchat.com/) 32 | [https://github.com/braidchat/meta/wiki/Motivation](https://github.com/braidchat/meta/wiki/Motivation) 33 | 34 | Matrix: [The case for Matrix](/xRXYSO9zpyh) 35 | Building our own: 36 | 37 | - The case for it 38 | 39 | 40 | **Tracking Growth somewhat haphazardly** 41 | 42 | | 2016-01-10 | ~4500 | 43 | | ---------- | ----- | 44 | | 2016-01-19 | 4626 | 45 | | 2016-06-23 | 6759 | 46 | | 2016-08-17 | 7008 | 47 | | 2016-09-15 | 7161 | 48 | | 2017-04-02 | 9408 | 49 | 50 | 51 | References 52 | [Why leave Slack?](http://www.jordanhawker.com/posts/131477030371) 53 | [Reactiflux's issue](https://github.com/reactiflux/volunteers/issues/25) with debate about where to switch. 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /welcome-message.md: -------------------------------------------------------------------------------- 1 | Hello and welcome to the Clojurians Slack! 2 | 3 | We want this to be a friendly and helpful space for everyone and the Admin team here tries to be very active as moderators, to keep things that way. 4 | * If you are new to Slack and need help navigating around, _ask in #slack-help_ 5 | * If you encounter spam or any kind of harassment, _please report it in #community-development_ (or, if you do not feel comfortable posting about it in public, reach out via direct message to any of the Admins who are online -- _the list of Admins can be found in the Code of Conduct document_: see below). 6 | * We encourage the use of threads in Slack so that back and forth discussions do not clutter up the channels, allowing multiple conversations to happen at the same time without "talking over" each other. 7 | 8 | 9 | There are really only two **rules**: 10 | * Jobs openings may be posted **only in the dedicated channels**: #jobs and #remote-jobs and **must** be Clojure/ClojureScript jobs -- **recruiters take note!** You may be able to find candidates in #available-for-jobs (do **not** post jobs there!). 11 | * We have a **zero** tolerance policy for spam and unsolicited direct messages of a commercial nature (especially about things like Upwork) -- violators will have their accounts deactivated! 12 | 13 | As a reminder, Clojure communities try to follow these guidelines for general conduct -- https://www.clojure.org/community/etiquette -- and this Slack also has a specific Code of Conduct: https://github.com/clojurians/community-development/blob/master/Code-of-Conduct.md 14 | 15 | **Why not say "Hi!" and tell folks a bit about yourself and why you're here, in #introduce-yourself!** 16 | --------------------------------------------------------------------------------