Freecodecamp: Deprecate Gitter rooms, Download all data

Created on 3 May 2016  ·  114Comments  ·  Source: freeCodeCamp/freeCodeCamp

Many old rooms such as /helpBonfires are now deprecated, but campers still join them. We need a contributor who's earned write access to this repo to go through and update the topic of these rooms by running:

/topic This room is inactive, and only exists for archival purposes. Join some active rooms - here's the full list: https://www.freecodecamp.com/wiki/en/official-free-code-camp-chat-rooms/

Most helpful comment

Please keep the Coding Jobs chat room. Alot of us read it even if we don't comment. I have seen job offers pop up and I think if someone is looking for a coder at that moment it is easier and quicker for them to just post in chat instead of a forum. Also, dynamic conversation is just more interesting. Thank you for your consideration.

All 114 comments

Rooms Notified

  • [x] Bonfires
  • [x] Basejumps
  • [x] TwitchTV
  • [x] NodeSchool

Left out the City specific rooms.

@QuincyLarson I think that should be it.

P.S I just realized that we have 540 rooms, with this audit.
And some of them were really funny, some created and forgotten.

Added:

  • [x] Ziplines

Nice work!

@sludge256 @raisedadead actually, I think we need to do this in literally every room that isn't on our official rooms list (unless it happens to have significant activity within the past 3 days).

Have checked on most rooms, all of the rooms which did not have any activity (in more than a month) have not been touched (simply just because it would have triggered discussion in them).

The campsite rooms do not need this, they already have a message and the above also applies to all of them.

Closing.

@raisedadead We have discontinued the fcc wiki. Do the deprecated rooms point to the corresponding post in the forum?

@BerkeleyTrue
I have updated the topic.
They still link to the wiki in the chat message, I can update, just don't want to trigger notifications. Its best left as they are, considering there is no recent activity in most.

However, Ziplines and Bonfires sometimes get visitors, because Gitter shows them as suggested rooms.

@raisedadead @BerkeleyTrue we may actually just want to delete the deprecated rooms. Few would be missed, and that way, Gitter's native discovery features would work properly. We wouldn't have to list our official rooms - we would only have official rooms (all the unofficial other rooms would be run by campers themselves and not under the freecodecamp prefix.

Downside: we lose some history and some small amount of Google search results
Upside: the chatrooms become much simpler to explain to people.

With the success of the forum, my goal is to shift a lot of communication that would have taken place intermittently on Gitter over to the forum, where the expectation is that it may take days to get a response.

So many of the chat rooms are ghost towns - hence us frequently pruning or deprecating them.

We would need to go through the official rooms and see which are active.

Yeah, I agree. I think the upside is better in favor of deleting them. Will do the audit and post a list that can/must be deleted.

many: > 100/day
some: > 10/day, < 100/day,
few: < 10/day
inactive: no posts today

FreeCodeCamp - many
Help - many
HelpJavaScript - many
HelpFrontEnd - many
HelpDataViz - some
HelpBackEnd - some
Python - few
Java - few
Ruby - inactive
PHP - few
Go - inactive
Elixir - inactive
.NET - inactive
C++ - inactive
Vagrant - inactive
Git - inactive
Linux - inactive
SQL - inactive
CodeReview - many
YouCanDoThis - few
CodingJobs - many
Casual - some
CurriculumDevelopment - some
DataScience - some
Albanian - inactive
Arabic - few
Chinese - many
Dutch - inactive
German - inactive
French - inactive
Japanese - inactive
Korean - inactive
Persian - inactive
Portuguese - inactive
Romanian - inactive
Russian - few
Spanish - some
Swedish - inactive
Tagalog - inactive
Thai - inactive
Vietnamese - inactive

Our community is primarily spread out across 3 places:

  • Gitter
  • Our forum
  • Facebook groups

For what it's worth, here's my thinking on each of these mediums:

  • Chat rooms - in order for a chat room to be useful, people should generally get a response within a few minutes of posting a question or comment. That's how it is with our main chat room and most of our help rooms. Chat rooms should hold your attention. They are less good for asynchronous communication, as many teams are discovering.
  • Facebook groups - fun places to casually share links, have superficial (non-threaded) discussions asynchronously, and just go and scroll through recent posts.
  • Forums - ideal for deep, topical discussions. Someone posts a link or asks a question. Someone else answers. A discussion emerges. These are less fun than Facebook groups and chat rooms, but generally more practical.

Of these three, chat rooms forge the tightest bonds. Talking with people in real time is exhilarating, and it can be hard to leave a chat room. This said, chat room suffer from the "ghost town" affect much more than forums or Facebook groups. Once things die down in a chat room, it can be hard to get the conversation started again.

By concentrating as much of our chat room-going community as possible into a few key rooms, we mitigate the risk of ghost towns.

The question is what rooms do we keep?

Based on the above research, I humbly propose we:

  • move all discussion of non-JavaScript languages over to the forum
  • move all world languages over to the forum and only leave the Chinese and Spanish Gitter rooms open. We can further encourage the campers who are using these to also try using the forum, and see whether those rooms continue to be active.
  • for sure leave the main room, help rooms, codeReview, coreTeam
  • discuss the future of CurriculumDevelopment, Hikes, and other rooms. These could all be combined into a more general, more active "Contributors" room.
  • By reducing the number of rooms, the remaining rooms become more prominent. For reference, here is what our "rooms" page looks like now: https://gitter.im/orgs/FreeCodeCamp/rooms

I am excited to hear everyone's thoughts on this.

QuincyLarson

I saw your proposed list and your invitation to discuss the future of a chatroom like the DataScience one. I don't think this room fits a "general room" format: the discussions that are occurring there are mostly about Data Science. Merging that room into another more general one could kill the current content and motivation of the room unless it is merged with rooms with similar intentions. A room like "contributors" doesn't looks like the best title for this one. I can also say that it is attracting people: there are currently 680 subscribers to the room, and some people are monitoring the activity.

As it is now, I don't think the nature of this room and the activity involved would fit the forum format.

I can only talk about this room because it is the room I have been managing since its foundation.

I have also monitored the activity in the Python room: it is not 'few' but 'some'. However, this is a room that due to its nature could be moved somewhere else.

The Spanish room is one of the most active ones I have seen too... The people there are really good in maintaining the room activity.

This won't fit the forum format neither.

If you think that the future is to delete those rooms, I think that the Spanish one will be affected by deleting related rooms like HelpDataViz, HelpJavaScript etc. The Spanish room is also a place to help to solve issues that Spanish-speakers found in those rooms. Once you delete the Help-related rooms and move activity to the forum, it is possible that the Spanish room won't survive or reduce its activity. If the activity in Gitter becomes less in general, the Spanish room could trend to disappear.

I suggest the following:
For some of those projects with kind of "some" level of activity, either merge or wait to see what happens with them after deleting other rooms that might be related.

I think deleting rooms about Help- will simply reduce the whole activity at Gitter, as Gitter won't be a reference to the set of help resources any more.

either merge or wait to see what happens with them after deleting other rooms that might be related.

@evaristoc just came up with a great idea. Instead of making a big change at once, lets make these changes step-by-step.
For the start we can close the other languages rooms (not JS) and try to move discussions to the forum and see the result, plus we will get a feedback from regular users of those rooms.
If the feedback would be very negative, then we will rethink the whole idea of closing rooms.

@QuincyLarson
If the actual plan is to delete them no matter the activity, I would suggest to offer alternatives to users talking to the main moderator regarding:

  • How FCC sees the room (is it part of the main core? is it adding value to FCC?)
  • Discuss the possibilities and how FCC will consider group (is it still core to FCC? or is it an alternative that should be managed by users themselves? will it receive support by FCC in the future?)
  • Agree a decommission plan: a time lapse at which the room will be definitively moved or deleted.

At least, to prevent the users with enough time to "move their stuff somewhere else".

My understanding is:
DataScience, Spanish, Russian, Chinesse, Casual are not part of the main core and mission of Free Code Camp. Although I won't like to suggest that for the room I am managing, and I know that will affect the activity of that room completely, those rooms could be decommissioned into other platforms (like FB), with the caveat that they will lose A LOT of traffic - they will anyway if Gitter becomes less prominent as FCC platform.

This should be done only if you decide that those rooms are not contributing to FCC project directly. Otherwise I suggest you to keep them until you see what happens with Gitter activity after deleting other related rooms.

I agree with Quincy. If there are very active city rooms that might be a consideration to keep (I know Cleveland, where I am from, is nothing since April.) I do think that pairing down the rooms that duplicate other rooms would make things easier. Like the old help rooms before the change over.

Now, Spanish/Chinese we don't touch them. Chinese especially because of a lack of a good FB alternative. I think we should be able to get by with about 15-ish rooms using a flow of skill sets. Front, Data, Back, Code-review, Pairing, CodingJobs. Contributers, Core . I am pretty sure that there are other rooms that should be added, but these are the ones I feel most strongly on. Once we move to the new curriculum (Each segment of the certification being it's own certification might warrant its own room)

Maybe keep off topic as a place to spend a pomodoro break away from coding.

@evaristoc Thanks for your feedback. We can keep the data science room separate since as you pointed out it's used for a lot of things, and is quite healthy in activity and participants.

I agree with @CarlJKashnier that we should shoot for 15-ish total rooms, which will help all the rooms that remain to be more active. We've purged these rooms several times before, and it's been about a year since we last did it.

I am not proposing we delete any of the active help rooms - only the old help rooms that are no longer used. We should have deleted these a long time ago - any archival benefit is outweighed by the confusion they cause:

I propose we immediately delete the following rooms:

  • all city-based rooms
  • all old help rooms
  • all rooms we notice that we haven't mentioned in this thread, but are clearly inactive

For the programming language-specific rooms, I think we should @all mention them with an explanation with a standard message of why we think the forum is a better place for discussing these topics (owing to the low volume of messages) and wait a few days to see how people respond.

I think curriculumDevelopment, Hikes, LocalLeaders (largely inactive for the past month), CamperBot, NonprofitProjects (largely inactive), LiveCoding, and Translators should be @all notified that we are creating a new room called "Contributors" and deleting these rooms 3 days later.

"Contributors" will essentially be a room for FCC contributors and "superusers" (including campers who have contributing to nonprofit projects and LetsMeet-style internal tools. It will be open to all (CoreTeam is our only exclusive room) and can serve as sort of a melting pot of people interested in making Free Code Camp better.

Suggestions? Reservations?

Agreed. Is there a way we can reach out to Gitter and get a copy of the messages for archiving.

@raisedadead I think all those rooms are still indexed by google

@BerkeleyTrue @raisedadead those rooms are archived by Google, but they will cease to show up in search results after we remove them. I've created an issue to coordinate the download and open data release of the full dataset: https://github.com/FreeCodeCamp/FreeCodeCamp/issues/10069

Till the rooms are deleted, also a Welcome message can be added in those rooms, (optionally) remove everyone from the room; so that when someone joins, it will show the welcome message.

This is the gitter API endpoint to add welcome message

METHOD: PUT
URI: /rooms/:roomId/meta/welcome-message
DATA: {"welcomeMessage":"# Welcome\n\nHi"}

I think curriculumDevelopment, Hikes, LocalLeaders (largely inactive for the past month), CamperBot, NonprofitProjects (largely inactive), LiveCoding, and Translators should be @/all notified that we are creating a new room called "Contributors" and deleting these rooms 3 days later.

@QuincyLarson I suggest to keep the project rooms e.g. CamperBot room separate as it is a different project (_although part of FreeCodeCamp_).

@abhisekp I'm just curious why we should keep these project rooms if they are largely inactive?

CamperBot's room is extremely inactive - literally one message a week. Our goal is to condense these rooms down to as few as possible, to maximize overall activity and minimize the "hi everyone... [crickets]" effect.

We could easily discuss changes to camperbot within the context to overall improvements to FCC in a contributors room.

@abhisekp thanks for finding that endpoint we can hit. Is roomId the room's name? Or do we have to gather a list of all the room IDs as a separate step?

@QuincyLarson :roomId of <strong><code>FreeCodeCamp/FreeCodeCamp</code></strong> room is 546fd572db8155e6700d6eaf which can be obtained by joining a room by name e.g.

METHOD: POST
URI: /rooms
DATA: {"uri": "FreeCodeCamp/FreeCodeCamp"}

This is a two step process.

:point_right: https://www.npmjs.com/package/node-gitter#promises-or-callbacks

Docs: https://developer.gitter.im/docs/welcome

@abhisekp excellent - thank you for clarifying.

Would you be interested in writing the script that updates all rooms' topics (other than the ones we plan to keep)? That would save us a considerable amount of tedious work, and I agree it would be great to leave these rooms with this topic for a few days while we download their histories and prepare to delete them.

@QuincyLarson sure... I will figure it out and write the script. :+1:

@abhisekp Have you had time to make any progress on this?

@QuincyLarson yes. I'd progressed and will complete as soon as possible.

My health was not well for a few days. Sorry! for the delay.

@abhisekp OK - great! I am glad you're still working on this. No worries about the delays. I hope you get to feeling 💯 soon :)

@QuincyLarson Which rooms do you NOT want to deprecate?
Thanks for giving me this opportunity. While creating this script, I felt a need for a rate limiter api (_didn't find anything such existed_). So I created a rate limiter library (https://rate-limiter-api.js.org) :smile: for managing 3rd party api rate limits without any hassles.

The script is ready. And sorry for the delay.

Please provide me with the following info

  • New Topic

This room is inactive, and only exists for archival purposes. Join some active rooms - here's the full list: https://www.freecodecamp.com/wiki/en/official-free-code-camp-chat-rooms/

  • A chat message
  • Welcome message
  • list of rooms to save (whitelist)
  • list of rooms NOT to save (blacklist) (_optional_)

    • list of rooms in save list which are not to be saved


Please don't deprecate FreeCodeCamp/Git room as there are no git rooms in gitter (_weird_) :stuck_out_tongue_winking_eye:
I've been promoting it using the following message and more and more people are coming day by day.

Walla! :tada: Now we've FCC Git Room :mega: :bell:

Check it out now for _all_ your Git related issues.
Don't shy :blush:. Solve 'em right now. Solution is _just one-step away_.
Ask and Get answered by Git Ninjas :panda_face:
:point_right: FreeCodeCamp/Git :flushed:

@abhisekp I saw your message

My estimate is that with your script, it would take about 17 days to download a million messages, and I suspect our main chat room has more than that. If your optimizations would significantly speed this up, great - please make them.

Otherwise, I recommend we focus on getting this script ready to run continuously on a digital ocean server for many different rooms, turning these data into room-specific .csv files which we can release as an open dataset.

We could focus on all the rooms we plan to delete first, then start running it on our main rooms (that won't be deleted).

You can just dump them into a local directory and I can retrieve them manually and put them on bittorrent later.

@Berkeleytrue what do you think of this plan?

The main thing is we delete these "ghost town" rooms as quickly as possible. Thanks for your hard work on this.

@BerkeleyTrue what are your thoughts?

@QuincyLarson @abhisekp
I has been talking to @alayek who also wanted to make a script for this. Not idea about his progress on this though.

Maybe @abhisekp want to contact him?

@abhisekp @alayek Hi there, I m also on this. It might be interesting to discuss it live. Would you be up for an online meeting? (skype, google hangouts, webex ...)

@ladybugtju I'm sorry! I'm comfortable with text chat. We can chat in <strong><code>FreeCodeCamp/HelpContributors</code></strong> room.

What is your progress on this and what's your approach?

@abhisekp how much of the chat rooms have you managed to download? I'm eager to move forward with consolidation, but don't want to lose any data in the process. Thanks!

@QuincyLarson I need a few more days. I've been asking around for help with the logic for the optimal solution. _My exams are in progress, so was unable to concentrate on this._

If someone can help with the optimal logic it will be really nice. (_with fail-safe of broken connection to gitter and storing in database_) i.e.

  • the client should resume from the earliest message (_using sent time_) stored in a particular room (in database)
  • the client should retry 3 times on connection failure (_with some interval between the retries_)
  • the client should be able to save all the retrieved messages without failure and with speed (_maybe a message broker can help e.g. Redis or RabbitMQ_). (_i don't know much about it_)

I'm trying to use PostgreSQL to store the messages with tables for each room. (_using NoSQL db, it might require a lot of memory_)
I don't know how much space everything will take in HDD.
PostgreSQL supports export as csv.

Some facts:

  1. Each message carries an unique ID, sent time, username, message text
  2. API endpoints can include the following query params (see https://apigee.com/abhisekp/embed/console/gitter#gitter#18)

    • beforeId

    • limit (_max 100_)

    • skip (_max 5000_)

  3. Only 100 requests can be made per minute using a single token
    (_using multiple tokens, more number of messages can be retrieved per minute using parallel requests_)
  4. 100 messages is retrieved in each request
  5. The room has no more messages to retrieve if the response if an empty array.
  6. Messages are retrieved reverse chronologically.

// cc: @alayek @evaristoc can you guys please help with this?

@abhisekp thanks for the update, and for sharing your progress so far.

Good luck with your exams.

@FreeCodeCamp/issue-moderators is anyone interested in tackling this?

@abhisekp yes good luck with the exams!

I see what you want to do. It looks great! What for language are you using? Is this an endpoint API? Excellent idea!!!

  • Although I understand all the things you want to implement I am not an expert implementing them. I have some code implementing those fail-safe for finding data from Twitter (python) and Facebook (nodejs) API's. I have not ever had interruption problems with Gitter API.
  • I have been using redis recently (very easy!); no much practice experience with RabbitMQ. I think both are different kind of stuff? RabbitMQ is more for messaging while redis is a simple NoSQL that can be used for in-memory storage and simulate a broker. The deployment of RabbitMQ could be more advanced but I am not sure. I think RabbitMQ will make more sense if your plan is to implement a parallelism... not sure about this claim...
  • What is your plan regarding the way the data should be accessed?:

    • Accessed using queries on an UI connected to an API: PostgreSQL is ok. Although you can send all this data into a mongoDB without many problems, SQL querying is still more common between data analysts than mongoDB queries.

    • A simple API endpoint like the current Leaderboard: in that case, it is more about what it is more convenient for you, really.

    • Files accessed as downloads: For what I have seen in kaggle, they are just saving slqlite files that you can download.

I don't foresee a lot of traffic downloading this material, but VERY occasional LARGE downloads yes. I don't foresee a lot of pressure on the database so additional load handling might not be needed. Still, warnings should be taken in consideration for broken downloads I guess...

  • About memory, when I downloaded the data I saved the json file in a native binary python (pickle). Many of the most active rooms apart of the main room are in the order of 1-2 digits MB. The main room was the largest I have checked and it was 1.3GB counting between dec 2014 to dec 2015. Download time of 1.3GB using python: I think it was about 6-8 hours?
  • Let's have a look of the tokens... in general I wouldn't share my tokens with anyone but we can see if we can make an exception for this one.
  • I would suggest to pre-treat the data by changing ALL user names and message id's (Good Practice). Although the access to the current data is totally free for being public, we should consider to keep some level of privacy protection. We, in FCC, could keep an index of the changes private for future references and analyses, but the public datasets should avoid to make references to individuals. I already have a talk about that with @alayek.

Where is the code, @abhisekp? I like your approach...

@evaristoc it sounds like you are in a strong position to be able to do this for @abhisekp if he's unavailable. We are planning to release the contents of all these rooms as open data, anyway. Could you start the archiving process?

@FreeCodeCamp/issue-moderators

We are starting the consolidation process.

We will do the following:

  • Remove all the technology-centric rooms (if you look at them, they mainly involve campers saying "hello" or asking a question, then not getting a response)
  • Remove all language-focused rooms, except for Spanish and Chinese (which we will not list as official rooms, but will leave intact since they are active. The reason for this is other people will inevitably get jealous and ask for a room for their own language, which will just end up a ghost town all over again.)
  • Remove relatively inactive rooms

Here are our new official rooms (I have already updated the list on our wiki:
FreeCodeCamp our main chat room - hang out and chat about life and learning to code
Help get help with our HTML, CSS and jQuery challenges from your fellow campers
HelpJavaScript get help with our JavaScript and algorithm challenges from your fellow campers
HelpFrontEnd get help with our front end projects from your fellow campers
HelpDataViz get help with our data visualization projects from your fellow campers
HelpBackEnd get help with our back end projects from your fellow campers
CodeReview give and receive constructive feedback from your fellow campers on your projects
YouCanDoThis learning to code is hard - share your feelings and get moral support here
Casual you can chat about your non-coding interests with other campers here
Contributors help us improve our open source curriculum
DataScience help us understand our gigs and gigs of public data

I've created a new room called "Contributors" and all non-core team discussions about contributing to FCC in any way (our open source repos, YouTube, Medium, etc.) will occur there. This will facilitate more cross-discipline collaboration, give people a much better idea of what people are working on, and create a buzz.

I'm telling people in the following rooms to join our new Contributors room:

  • [x] CurriculumDevelopment
  • [x] Hikes
  • [x] YouTube
  • [x] LiveCoding
  • [x] Wiki
  • [x] Translators
  • [x] Local Leaders
  • [x] CamperBot
  • [x] HelpContributors

I am looking for core team members who can help us accomplish the following:

  • [ ] make sure that all of the rooms not on this list have the following topic: "This room will be closed and archived. Please move discussion of this topic our forum, or to one of the official Free Code Camp chat rooms: http://forum.freecodecamp.com/t/free-code-camp-official-chat-rooms/19390"
  • [ ] make sure that all the chat rooms are archived. We will release this archive as open data.
  • [ ] Once we have all these rooms archived (and backups of the data in more than one physical locations and on the cloud) then we need to delete these rooms.

Who's interested in helping with this process?

@QuincyLarson @evaristoc the topic change, chat message posting and welcome message is already complete using the script. I can initiate it right away.

Just the archiving process might need a bit time to complete.

@abhisekp great - thank you for confirming this. Yes, please do.

Have you started the archiving process? We may be able to have more than one person doing it (@evaristoc could do half of the rooms and you could do the other half?) That would speed up the archiving process.

@QuincyLarson cool. Here is the list of rooms to save. Please confirm and I can start. :+1:

FreeCodeCamp/FreeCodeCamp
FreeCodeCamp/Help
FreeCodeCamp/HelpJavaScript
FreeCodeCamp/HelpFrontEnd
FreeCodeCamp/HelpDataViz
FreeCodeCamp/HelpBackEnd
FreeCodeCamp/CodeReview
FreeCodeCamp/YouCanDoThis
FreeCodeCamp/Casual
FreeCodeCamp/Contributors
FreeCodeCamp/DataScience
FreeCodeCamp/CoreTeam

FreeCodeCamp/Espanol
FreeCodeCamp/chinese

_Other rooms will have the following Topic, chat message and welcome message_

Topic

This room will be closed and archived. Please move discussion of this topic to our forum, or to one of the official Free Code Camp chat rooms: http://forum.freecodecamp.com/t/free-code-camp-official-chat-rooms/19390

Chat Message


This room will be closed and archived.

@/all Please move discussion of this topic to our forum, or to one of the official Free Code Camp chat rooms: http://forum.freecodecamp.com/t/free-code-camp-official-chat-rooms/19390


Welcome Message


This room will be closed and archived.

Please move discussion of this topic to our forum, or to one of the official Free Code Camp chat rooms: http://forum.freecodecamp.com/t/free-code-camp-official-chat-rooms/19390


@abhisekp Perfect. When you save "saved" you mean "not deleted", right?

@QuincyLarson yes. Not deprecated. :+1:

@abhisekp also, please don't delete the core team room or modify it's topic.

@QuincyLarson Is there any more rooms to not deprecate?

@abhisekp I don't think so. If anyone notices a room getting the deprecation notice that shouldn't get one, they can mention it here on this issue.

Please keep the Coding Jobs chat room. Alot of us read it even if we don't comment. I have seen job offers pop up and I think if someone is looking for a coder at that moment it is easier and quicker for them to just post in chat instead of a forum. Also, dynamic conversation is just more interesting. Thank you for your consideration.

Coding jobs room has many posts status in this thread and has deprecation notice posted there.

The linux, ruby, python and maybe letsPair and git rooms are worth saving. Also the GameDev room.

While I agree with the decision of some country specific rooms, off-topic and other rooms that really weren't helping at all being removed, I highly disagree with the removal of language-specific rooms, especially those languages that are still blooming and catching up like Elixir.

Extra rooms help with specificity and the overcrowding of general rooms like /FreeCodeCamp/FreeCodeCamp, we could have people talking about specific things in those rooms. I liked the letsPair room too, maybe the problem isn't that the rooms don't get much attention and traffic-direction from the campers.

The contributions room was wise to create but it's just that so many rooms got directed there, I don't see how it's gonna work out but I really wish it does. I'd like the Python, Elixir, Ruby and PHP rooms back because according to the vision of FCC, you guys wanted to have "something" for those languages, there is no info about that on the menu or the map, it was just a Medium post that people probably don't remember by now.

Also the git room could be a keeper.

And, apart from all that, about this:

If anyone notices a room getting the deprecation notice that shouldn't get one, they can mention it here on this issue.

I must add that, maybe, it would be good to add this (deeply hidden) issue link to the notification title in the rooms, for, you know, let people really

mention it here on this issue

Right now, the text simply warns people that the room they are using and checking daily will be closed, without any previous warning, without asking any opinion at all about it to the ones using it. Just a sentence. It will be closed, no matter what, and you must use in their place the suggested inferior alternatives (yes: overcrowded and disperse channels or a subforum is an inferior alternative to an specific chat room).

Hello. I'm with the NYC FCC group. We have an active group that is only gaining more traction now that Queens-based FCC Coffee N Codes have launched.

Formal request that /NewYorkCity not be deprecated.

Edit: Link for the lazy.

@AryanJ-NYC Thank you for pointing out gitter.im/freecodecamp/NewYorkCity. This is a special case where a local-focused chatroom has thrived. If this room remains active, we can keep it as an unlisted. I'm posting an update in the room.

@coffeebeanzz You're right - it was a mistake to send the deprecation notice to CodingJobs. I've added it back to the official rooms list and sent a message in the room clarifying that it will not be archived.

I've posted a detailed explanation of this process and pinned it at the top of the forum: http://forum.freecodecamp.com/t/simplifying-fccs-gitter-chatrooms/37621/2

Please let us keep the Let's Pair room. Many campers have shared and caught up each other to complete their challenges by meeting in this room.

Isn't one of the FCC concepts is to pair up with others to enhance our coding learning and experiences?

The only two rooms that I follow are Front End and Let's Pair.

@KoniKodes After reviewing LetsPair and talking with several campers there, I agree that we should keep it listed as an official room.

You are so one of my main heroes. Thank you so much.

From: Quincy Larson [mailto:[email protected]]
Sent: Saturday, September 17, 2016 3:39 PM
To: FreeCodeCamp/FreeCodeCamp
Cc: KoniKodes; Mention
Subject: Re: [FreeCodeCamp/FreeCodeCamp] Deprecate Gitter rooms, Download all data (#8418)

@KoniKodes https://github.com/KoniKodes After reviewing LetsPair and talking with several campers there, I agree that we should keep it listed as an official room.


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub https://github.com/FreeCodeCamp/FreeCodeCamp/issues/8418#issuecomment-247812317 , or mute the thread https://github.com/notifications/unsubscribe-auth/ARjWiUauw4_o2DR5nIyYazvVm5KgeC52ks5qrGv_gaJpZM4IWBHE . https://github.com/notifications/beacon/ARjWicsQahixEmA4fdn-_d98WTRuUffZks5qrGv_gaJpZM4IWBHE.gif

Hi @abhisekp have you made any progress downloading these?

@QuincyLarson I'm still working on this. Need a little bit more time.

@abhisekp OK - thanks for confirming this is still under way. No rush 😃

@abhisekp let me know how I can help. please also read my message above:
https://github.com/FreeCodeCamp/FreeCodeCamp/issues/8418#issuecomment-247571215

@evaristoc: Hi! Nice reading you :) I am curious about the way you approached this problem. No need to share the Token, would you please make a repo or anything else. Is there a way to figure out how much data there is in a room before running the script? We could then estimate the required time. Did you download the 1.3G? Using NodeJS and writing data to a JSON file, 2 of the rooms gave me the following results:

  1. DataScienceRoom >> @8.2MB /6973Messages/ 48.76s
  2. ContributorsRoom >> @13.5MB / 13877Messages / 2:30.96mn
    Here is a link for the script:
    https://github.com/ladybugtju/ffcGitterData/blob/master/fccGitterData.js
    @QuincyLarson : Would you have a final lists of rooms to delete?
    @abhisekp: Hi there! All the best with exams. Looking forward to see your approach and results

@evaristoc if you could also pull down all of the rooms and save them in a format that can be released as open data (CSV?) that would be extremely helpful. If you can pull the entire main room in less than a day, that means you should be able to pull most of the rooms quite quickly.

@ladybugtju once we have all the chatrooms archived and safely backed up, we can start deleting the rooms. The only rooms we are not deleting are:

FreeCodeCamp/FreeCodeCamp
FreeCodeCamp/Help
FreeCodeCamp/HelpJavaScript
FreeCodeCamp/HelpFrontEnd
FreeCodeCamp/HelpDataViz
FreeCodeCamp/HelpBackEnd
FreeCodeCamp/CodeReview
FreeCodeCamp/YouCanDoThis
FreeCodeCamp/Casual
FreeCodeCamp/Contributors
FreeCodeCamp/DataScience
FreeCodeCamp/CoreTeam
FreeCodeCamp/Espanol
FreeCodeCamp/chinese
FreeCodeCamp/pairprogrammingwomen
FreeCodeCamp/newyorkcity
FreeCodeCamp/letspair
FreeCodeCamp/codingjobs

@QuincyLarson : Thanks for the list. There are a few other rooms that have lots of subscribers and seem to be active. I think I ll do things the other way around and download only the rooms to be kept_or some of them. Here is the list with Room_Ids: (it might be useful)
https://docs.google.com/spreadsheets/d/1HSRL-HTOREYF86mNDczNp7XNA5Tuo4TWP4AiMYyZDU8/edit?usp=sharing

@ladybugtju Even though these rooms are somewhat active (a few messages a week) we've decided to close them. It's helpful to download rooms that we're keeping, but our goal is to make sure we've backed up all the rooms we're going to delete for archival purposes.

@QuincyLarson: Thanks for the prompt response. I could help with that as well but since abhisekp has already joined all the room (He should have all the ids), I m thinking about downloading the core rooms plus maybe a few other rooms this weekend. It might take around 5H. The point is to open source the data and let people analyze it as well, right? I ll be able to provide the JSON format for some of the relevant rooms
May I also bring your attention to the following rooms that might be worth keeping:
25 FreeCodeCamp/HelpBonfires 55b516800fc9f982beab0950 4141
28 FreeCodeCamp/HelpZiplines 55b522300fc9f982beab0a40 2203
29 FreeCodeCamp/CamperPracticeProjects 54ef614115522ed4b3dc863b 1692
31 FreeCodeCamp/CurriculumDevelopment 54d96d6915522ed4b3dbd2ce 846

@ladybugtju Yes - that would be really helpful. We can include the data from those rooms in the open dataset, too.

Regarding those other rooms you mentioned:

  • FreeCodeCamp/HelpBonfires and FreeCodeCamp/HelpZiplines have been replaced by helpJavaScript and helpFrontEnd
  • FreeCodeCamp/CamperPracticeProjects has been replaced by codereview
  • FreeCodeCamp/CurriculumDevelopment has been replaced by Contributors

@QuincyLarson @evaristoc: Hi! Hope you had a nice weekend. I ran the script this morning and discovered that there is a memory allocation issue with node when data exceeds 1G. I need to dig this a bit more but here are latest updates:

Code crashed after 4H30mn - Data in memory: 1.4G (It might be the room data value but I suspect it is the crash level since I found similar scripts crashing at the same point)
Here is the console output:

<--- Last few GCs --->

15953303 ms: Mark-sweep 1372.8 (1435.0) -> 1363.8 (1427.5) MB, 1203.0 / 0 ms [allocation failure] [GC in old space requested].
15954582 ms: Mark-sweep 1363.8 (1427.5) -> 1363.8 (1428.5) MB, 1278.9 / 0 ms [allocation failure] [GC in old space requested].
15955886 ms: Mark-sweep 1363.8 (1428.5) -> 1363.8 (1427.5) MB, 1304.2 / 0 ms [last resort gc].
15957195 ms: Mark-sweep 1363.8 (1427.5) -> 1363.5 (1427.5) MB, 1309.3 / 0 ms [last resort gc].

<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 0x3f8620ec9fa9
1: _callback [/Users/MacBookPro/Desktop/TEST apps/FCC_challenges/Gitter/GitterApiV2/gitter-demo-app/fccGitterData.js:37] [pc=0x7c8872149cb](this=0x26b775e241a1 ,err=0x3f8620e04101 ,res=0x26b775e294c9 ,body=0x26b775e2b0d1 2: callback [/Users/MacBookPro/Desktop/TEST apps/FCC_chal...

FAbort trap: 6

I m busy this week but will have more time to work on this next one.
@evaristoc I wonder if you didn t face the same problem or if you have suggestions
@QuincyLarson: There is no problem downloading smaller rooms but the main room is heavy. It would be good to check with gitter folks and ask how much data there is in there. I dropped them an email and still pending

@ladybugtju OK - sounds good. Thanks for your help. Go ahead and download the small rooms then. A majority of the rooms we want to delete are relatively small.

@ladybugtju @abhisekp @evaristoc Do you have a list of all the rooms under the Free Code Camp organization? If so, could you create a gist of all the rooms that have been backed up as we back them up? That way we can see how much progress we've made toward this.

Thanks for your hard work. This is an issue that comes up every day in conversation with campers. Chat will be much more usable (and explorable) once we've consolidated these rooms.

List of FreeCodeCamp Public Gitter Rooms

Archived rooms are marked with

  • [x] check mark

And deleted rooms are marked with deleted text mark

  • [x] archived and deleted

:point_right: https://git.io/vPESQ (_sorted by user count_), _with the rooms not to be deleted at the bottom. (updated by Quincy at 13:27 Tuesday Oct 11, 2017)_

  • [x] _FreeCodeCamp/SantaClarita (users: 0, id: 560a4adc0fc9f982beb22972)_
  • [x] _FreeCodeCamp/Culiacan (users: 0, id: 560a54590fc9f982beb22ab9)_
  • [x] _FreeCodeCamp/Harrisburg (users: 1, id: 55a1a3985e0d51bd787b1473)_
  • [x] _FreeCodeCamp/Haifa (users: 1, id: 55a1a81a5e0d51bd787b14c2)_
  • [ ] _FreeCodeCamp/Jamnagar (users: 1, id: 55a4b8865e0d51bd787b512c)_
  • [ ] _FreeCodeCamp/Bahasa (users: 1, id: 55a5ec6e5e0d51bd787b6b63)_
  • [ ] _FreeCodeCamp/Fortaleza (users: 1, id: 55d777e20fc9f982beae3240)_
  • [ ] _FreeCodeCamp/Shenzhen (users: 1, id: 55d7783f0fc9f982beae3256)_
  • [ ] _FreeCodeCamp/AuburnME (users: 1, id: 55d778750fc9f982beae3263)_
  • [ ] _FreeCodeCamp/ButteMN (users: 1, id: 55d778980fc9f982beae3273)_
  • [ ] _FreeCodeCamp/Mianwali (users: 1, id: 55da2a3f0fc9f982beae5a01)_
  • [x] _FreeCodeCamp/canIMakeRoomsPls (users: 1, id: 55e4dec50fc9f982beaf39c6)_
  • [ ] _FreeCodeCamp/Munster (users: 1, id: 55e54ced0fc9f982beaf4086)_
  • [ ] _FreeCodeCamp/Surigao (users: 1, id: 55e54d800fc9f982beaf4096)_
  • [ ] _FreeCodeCamp/Guacara (users: 1, id: 55ebff710fc9f982beafcd25)_
  • [ ] _FreeCodeCamp/Lynchburg (users: 1, id: 55ebffb90fc9f982beafcd2d)_
  • [ ] _FreeCodeCamp/Spokane (users: 1, id: 55f3c1e00fc9f982beb072e7)_
  • [ ] _FreeCodeCamp/Nazareth (users: 1, id: 55f3c2190fc9f982beb072ee)_
  • [ ] _FreeCodeCamp/Ostrava (users: 1, id: 5608bdc40fc9f982beb2087a)_
  • [ ] _FreeCodeCamp/FloydVA (users: 1, id: 560a54a90fc9f982beb22ac8)_
  • [ ] _FreeCodeCamp/Kosice (users: 1, id: 560a54c80fc9f982beb22acb)_
  • [ ] _FreeCodeCamp/Znojmo (users: 2, id: 55939a7015522ed4b3e326e5)_
  • [ ] _FreeCodeCamp/Bismarck (users: 2, id: 5593927f15522ed4b3e32511)_
  • [ ] _FreeCodeCamp/Granada (users: 2, id: 5593954115522ed4b3e325ab)_
  • [ ] _FreeCodeCamp/Guarapuava (users: 2, id: 5593954c15522ed4b3e325ad)_
  • [ ] _FreeCodeCamp/Montgomery (users: 2, id: 559397c515522ed4b3e32627)_
  • [ ] _FreeCodeCamp/Pasto (users: 2, id: 5593988015522ed4b3e32661)_
  • [ ] _FreeCodeCamp/Poitiers (users: 2, id: 559398a315522ed4b3e3266e)_
  • [ ] _FreeCodeCamp/Pristina (users: 2, id: 559398df15522ed4b3e3267d)_
  • [ ] _FreeCodeCamp/MorganCity (users: 2, id: 55a06e3e5e0d51bd787af998)_
  • [ ] _FreeCodeCamp/LosAlamos (users: 2, id: 55a0941f5e0d51bd787afde0)_
  • [ ] _FreeCodeCamp/Frankfort (users: 2, id: 55a094355e0d51bd787afde6)_
  • [ ] _FreeCodeCamp/RedmondOR (users: 2, id: 55a094535e0d51bd787afdf2)_
  • [x] _FreeCodeCamp/Aichi (users: 2, id: 55a0945a5e0d51bd787afdf4)_
  • [ ] _FreeCodeCamp/Hickory (users: 2, id: 55a1a1e75e0d51bd787b1434)_
  • [ ] _FreeCodeCamp/Moosejaw (users: 2, id: 55a1a2885e0d51bd787b1452)_
  • [ ] _FreeCodeCamp/Ranchi (users: 2, id: 55a1a2fc5e0d51bd787b145c)_
  • [ ] _FreeCodeCamp/Fuengirola (users: 2, id: 55a2dc4d5e0d51bd787b29b0)_
  • [ ] _FreeCodeCamp/Valdosta (users: 2, id: 55a4b80d5e0d51bd787b5124)_
  • [ ] _FreeCodeCamp/BelizeCity (users: 2, id: 55a4b9ff5e0d51bd787b5154)_
  • [ ] _FreeCodeCamp/GuatemalaCity (users: 2, id: 55a4bc005e0d51bd787b517d)_
  • [ ] _FreeCodeCamp/Reykjavik (users: 2, id: 55d777ed0fc9f982beae3243)_
  • [ ] _FreeCodeCamp/Batticaloa (users: 2, id: 55d7780c0fc9f982beae324a)_
  • [ ] _FreeCodeCamp/Killeen (users: 2, id: 55d778240fc9f982beae324e)_
  • [ ] _FreeCodeCamp/Brasov (users: 2, id: 55d787140fc9f982beae3411)_
  • [ ] _FreeCodeCamp/Jacarei (users: 2, id: 55da2a9b0fc9f982beae5a06)_
  • [ ] _FreeCodeCamp/Duluth (users: 2, id: 55da2afc0fc9f982beae5a0d)_
  • [ ] _FreeCodeCamp/FrederickMD (users: 2, id: 55e54d1e0fc9f982beaf408c)_
  • [ ] _FreeCodeCamp/Riga (users: 2, id: 55e54d5e0fc9f982beaf4092)_
  • [ ] _FreeCodeCamp/Lexington (users: 2, id: 55ebdb160fc9f982beafcb58)_
  • [ ] _FreeCodeCamp/SalisburyMD (users: 2, id: 55ebdb640fc9f982beafcb67)_
  • [ ] _FreeCodeCamp/Derby (users: 2, id: 55ebdb850fc9f982beafcb72)_
  • [ ] _FreeCodeCamp/Harare (users: 2, id: 55f3c17b0fc9f982beb072d6)_
  • [ ] _FreeCodeCamp/Trondheim (users: 2, id: 55f3c1950fc9f982beb072d9)_
  • [ ] _FreeCodeCamp/CedarRapids (users: 2, id: 55f3c2040fc9f982beb072eb)_
  • [ ] _FreeCodeCamp/Leeds (users: 2, id: 560a54e60fc9f982beb22ace)_
  • [ ] _FreeCodeCamp/TranslationAmharic (users: 2, id: 56bd1476e610378809c103fa)_
  • [ ] _FreeCodeCamp/TranslationKartuli (users: 2, id: 5739c392c43b8c6019732d9d)_
  • [ ] _FreeCodeCamp/Apucarana (users: 3, id: 559391a115522ed4b3e324e1)_
  • [ ] _FreeCodeCamp/Belem (users: 3, id: 5593921415522ed4b3e324f6)_
  • [ ] _FreeCodeCamp/Bijeljina (users: 3, id: 5593925c15522ed4b3e32509)_
  • [ ] _FreeCodeCamp/Coventry (users: 3, id: 559393a615522ed4b3e32553)_
  • [ ] _FreeCodeCamp/Durango (users: 3, id: 5593941715522ed4b3e32575)_
  • [ ] _FreeCodeCamp/Galveston (users: 3, id: 5593951915522ed4b3e325a3)_
  • [ ] _FreeCodeCamp/Gdynia (users: 3, id: 5593952415522ed4b3e325a5)_
  • [ ] _FreeCodeCamp/Guntur (users: 3, id: 5593953815522ed4b3e325a9)_
  • [ ] _FreeCodeCamp/LaCrosse (users: 3, id: 5593969915522ed4b3e325f1)_
  • [ ] _FreeCodeCamp/Mysore (users: 3, id: 559397e815522ed4b3e32630)_
  • [ ] _FreeCodeCamp/Sidoarjo (users: 3, id: 559399d215522ed4b3e326b6)_
  • [ ] _FreeCodeCamp/Yaounde (users: 3, id: 55939a6815522ed4b3e326e3)_
  • [ ] _FreeCodeCamp/Hagerstown (users: 3, id: 55a06e065e0d51bd787af991)_
  • [ ] _FreeCodeCamp/Multan (users: 3, id: 55a072305e0d51bd787afa0c)_
  • [ ] _FreeCodeCamp/Struga (users: 3, id: 55a0940b5e0d51bd787afddc)_
  • [ ] _FreeCodeCamp/TheWarOfArt (users: 3, id: 55a19d2c5e0d51bd787b13e3)_
  • [ ] _FreeCodeCamp/Perugia (users: 3, id: 55a1a26b5e0d51bd787b144f)_
  • [ ] _FreeCodeCamp/NewWestminster (users: 3, id: 55a2dc8e5e0d51bd787b29c0)_
  • [ ] _FreeCodeCamp/Wuerzburg (users: 3, id: 55a4bb0d5e0d51bd787b5168)_
  • [ ] _FreeCodeCamp/StrokeOnTrent (users: 3, id: 55a5ff285e0d51bd787b6c9b)_
  • [ ] _FreeCodeCamp/Ticino (users: 3, id: 55a5ff5e5e0d51bd787b6ca2)_
  • [ ] _FreeCodeCamp/FortCollins (users: 3, id: 55a600755e0d51bd787b6cb8)_
  • [ ] _FreeCodeCamp/NorthMississippi (users: 3, id: 55a600c05e0d51bd787b6cc5)_
  • [ ] _FreeCodeCamp/TriCitiesWashington (users: 3, id: 55ab726b37f2ad22587e624b)_
  • [ ] _FreeCodeCamp/Ipswich (users: 3, id: 55ab72e137f2ad22587e6257)_
  • [ ] _FreeCodeCamp/Anacortes (users: 3, id: 55ab73c837f2ad22587e6270)_
  • [ ] _FreeCodeCamp/IdahoFalls (users: 3, id: 55aefb1c0fc9f982beaa826a)_
  • [ ] _FreeCodeCamp/Luanda (users: 3, id: 55b560b40fc9f982beab0ef3)_
  • [ ] _FreeCodeCamp/Ferizaj (users: 3, id: 55b560d40fc9f982beab0efb)_
  • [ ] _FreeCodeCamp/ElPaso (users: 3, id: 55c3af450fc9f982beac7e11)_
  • [ ] _FreeCodeCamp/Farmville (users: 3, id: 55c3af500fc9f982beac7e14)_
  • [ ] _FreeCodeCamp/Lae (users: 3, id: 55c3af920fc9f982beac7e2b)_
  • [ ] _FreeCodeCamp/Spartanburg (users: 3, id: 55c3afbd0fc9f982beac7e38)_
  • [ ] _FreeCodeCamp/Srinagar (users: 3, id: 55c3afc80fc9f982beac7e3b)_
  • [ ] _FreeCodeCamp/Chernivtsi (users: 3, id: 55cee2330fc9f982bead75d0)_
  • [ ] _FreeCodeCamp/Barranquilla (users: 3, id: 55cee40a0fc9f982bead760a)_
  • [ ] _FreeCodeCamp/LondonON (users: 3, id: 55d77ab80fc9f982beae32c0)_
  • [ ] _FreeCodeCamp/Mangalore (users: 3, id: 55e54cd40fc9f982beaf4082)_
  • [ ] _FreeCodeCamp/Sasebo (users: 3, id: 55e54d350fc9f982beaf408f)_
  • [ ] _FreeCodeCamp/Canberra (users: 3, id: 55ebdb7d0fc9f982beafcb6e)_
  • [ ] _FreeCodeCamp/HarrisburgPA (users: 3, id: 55ebf9d30fc9f982beafcceb)_
  • [ ] _FreeCodeCamp/Szczecin (users: 3, id: 55f3c1b40fc9f982beb072e2)_
  • [ ] _FreeCodeCamp/CoderDojo (users: 3, id: 5660943616b6c7089cbd44d6)_
  • [ ] _FreeCodeCamp/TranslationFarsi (users: 3, id: 5717b71d659847a7aff3b740)_
  • [ ] _FreeCodeCamp/TranslationPolish (users: 3, id: 577d9ad4c2f0db084a21cd84)_
  • [ ] _FreeCodeCamp/TranslationRomanian (users: 3, id: 57b0906140f3a6eec05f69d7)_
  • [ ] _FreeCodeCamp/CapeCod (users: 4, id: 5593930715522ed4b3e32536)_
  • [ ] _FreeCodeCamp/Irkutsk (users: 4, id: 5593960115522ed4b3e325c8)_
  • [ ] _FreeCodeCamp/Kemerovo (users: 4, id: 5593966715522ed4b3e325e3)_
  • [ ] _FreeCodeCamp/KryvyiRih (users: 4, id: 5593969115522ed4b3e325ef)_
  • [ ] _FreeCodeCamp/MississippiGulfCoast (users: 4, id: 559397b215522ed4b3e32623)_
  • [ ] _FreeCodeCamp/Parana (users: 4, id: 5593986515522ed4b3e32657)_
  • [ ] _FreeCodeCamp/Quibdo (users: 4, id: 559398f515522ed4b3e32683)_
  • [ ] _FreeCodeCamp/SaintGeorge (users: 4, id: 5593995215522ed4b3e32695)_
  • [ ] _FreeCodeCamp/Solo (users: 4, id: 559399f515522ed4b3e326c0)_
  • [ ] _FreeCodeCamp/Hove (users: 4, id: 55a06cfb5e0d51bd787af963)_
  • [ ] _FreeCodeCamp/Bishkek (users: 4, id: 55a06d305e0d51bd787af975)_
  • [ ] _FreeCodeCamp/RiceLake (users: 4, id: 55a094195e0d51bd787afdde)_
  • [ ] _FreeCodeCamp/Belize (users: 4, id: 55a094625e0d51bd787afdf6)_
  • [ ] _FreeCodeCamp/LasCruces (users: 4, id: 55a0946c5e0d51bd787afdf9)_
  • [ ] _FreeCodeCamp/Torino (users: 4, id: 55a1a1b95e0d51bd787b142c)_
  • [ ] _FreeCodeCamp/Leesville (users: 4, id: 55a1a2d95e0d51bd787b145a)_
  • [ ] _FreeCodeCamp/Lindsay (users: 4, id: 55a1a7d65e0d51bd787b14bc)_
  • [ ] _FreeCodeCamp/SierraVista (users: 4, id: 55a2db275e0d51bd787b298a)_
  • [ ] _FreeCodeCamp/CentralMississippi (users: 4, id: 55a76eee8a7b72f55c3f926a)_
  • [ ] _FreeCodeCamp/MossPoint (users: 4, id: 55ab721837f2ad22587e6248)_
  • [ ] _FreeCodeCamp/Goettingen (users: 4, id: 55aefa460fc9f982beaa8256)_
  • [ ] _FreeCodeCamp/Lakeland (users: 4, id: 55aefb460fc9f982beaa826d)_
  • [ ] _FreeCodeCamp/Warrington (users: 4, id: 55b187770fc9f982beaac632)_
  • [ ] _FreeCodeCamp/AthensOH (users: 4, id: 55c3aac30fc9f982beac7d1f)_
  • [ ] _FreeCodeCamp/Isfahan (users: 4, id: 55c3af6d0fc9f982beac7e1d)_
  • [ ] _FreeCodeCamp/SydneyNS (users: 4, id: 55cee27b0fc9f982bead75d5)_
  • [ ] _FreeCodeCamp/Jaffna (users: 4, id: 55cee32f0fc9f982bead75e5)_
  • [ ] _FreeCodeCamp/Allahabad (users: 4, id: 55cee3550fc9f982bead75e8)_
  • [ ] _FreeCodeCamp/Folsom (users: 4, id: 55cee3d80fc9f982bead7603)_
  • [ ] _FreeCodeCamp/Lawrence (users: 4, id: 55cee41a0fc9f982bead760e)_
  • [ ] _FreeCodeCamp/Goiania (users: 4, id: 55d77ae10fc9f982beae32c4)_
  • [ ] _FreeCodeCamp/Tashkent (users: 4, id: 55ebdb740fc9f982beafcb6a)_
  • [ ] _FreeCodeCamp/Tunis (users: 4, id: 55ebdb8d0fc9f982beafcb75)_
  • [ ] _FreeCodeCamp/FreeCodeCampFire (users: 4, id: 56241c6216b6c7089cb7705b)_
  • [ ] _FreeCodeCamp/UrbanTechnologyProject (users: 4, id: 56778d9e16b6c7089cbf6d2f)_
  • [ ] _FreeCodeCamp/TranslationBangla (users: 4, id: 56e1714685d51f252ab81fd7)_
  • [ ] _FreeCodeCamp/TranslationDutch (users: 4, id: 57378306c43b8c601972f037)_
  • [ ] _FreeCodeCamp/Clarksville (users: 5, id: 5593937115522ed4b3e3254d)_
  • [ ] _FreeCodeCamp/Freehold (users: 5, id: 5593950f15522ed4b3e325a1)_
  • [ ] _FreeCodeCamp/IvanoFrankivsk (users: 5, id: 5593961215522ed4b3e325cc)_
  • [ ] _FreeCodeCamp/Kerch (users: 5, id: 5593966f15522ed4b3e325e5)_
  • [ ] _FreeCodeCamp/Krasnodar (users: 5, id: 5593968915522ed4b3e325ed)_
  • [ ] _FreeCodeCamp/Nicosia (users: 5, id: 5593982915522ed4b3e32641)_
  • [ ] _FreeCodeCamp/Tirana (users: 5, id: 55939a2715522ed4b3e326d1)_
  • [ ] _FreeCodeCamp/Kampala (users: 5, id: 5595843915522ed4b3e3420e)_
  • [ ] _FreeCodeCamp/Cuenca (users: 5, id: 559a18b115522ed4b3e37207)_
  • [ ] _FreeCodeCamp/Noida (users: 5, id: 559a18f415522ed4b3e3720e)_
  • [ ] _FreeCodeCamp/Salamanca (users: 5, id: 559a190115522ed4b3e37210)_
  • [ ] _FreeCodeCamp/Savannah (users: 5, id: 55a06c725e0d51bd787af956)_
  • [ ] _FreeCodeCamp/KingstonON (users: 5, id: 55a06d935e0d51bd787af980)_
  • [ ] _FreeCodeCamp/BuryStEdmunds (users: 5, id: 55a06e795e0d51bd787af9a2)_
  • [ ] _FreeCodeCamp/Tijuana (users: 5, id: 55a06e8f5e0d51bd787af9a4)_
  • [ ] _FreeCodeCamp/Yerevan (users: 5, id: 55a1a3555e0d51bd787b1467)_
  • [ ] _FreeCodeCamp/Evansville (users: 5, id: 55a600365e0d51bd787b6cb4)_
  • [ ] _FreeCodeCamp/Puebla (users: 5, id: 55a76ec58a7b72f55c3f9266)_
  • [ ] _FreeCodeCamp/Almeria (users: 5, id: 55aefac20fc9f982beaa825c)_
  • [ ] _FreeCodeCamp/UniversityCenter (users: 5, id: 55aefbc40fc9f982beaa8293)_
  • [ ] _FreeCodeCamp/Nusajaya (users: 5, id: 55b042430fc9f982beaa9f12)_
  • [ ] _FreeCodeCamp/BryanCollegeStation (users: 5, id: 55bbaa870fc9f982beabb194)_
  • [ ] _FreeCodeCamp/Bakersfield (users: 5, id: 55c3af330fc9f982beac7e0e)_
  • [ ] _FreeCodeCamp/Huntsville (users: 5, id: 55c3af630fc9f982beac7e1a)_
  • [ ] _FreeCodeCamp/Jerusalem (users: 5, id: 55c3af740fc9f982beac7e20)_
  • [ ] _FreeCodeCamp/Juarezchi (users: 5, id: 55c3af820fc9f982beac7e24)_
  • [ ] _FreeCodeCamp/Reading (users: 5, id: 55c3afa60fc9f982beac7e31)_
  • [ ] _FreeCodeCamp/SanJoseCostaRica (users: 5, id: 55c3afb40fc9f982beac7e35)_
  • [ ] _FreeCodeCamp/Vladivostok (users: 5, id: 55c3afea0fc9f982beac7e4f)_
  • [ ] _FreeCodeCamp/Tegucigalpa (users: 5, id: 55cee1f00fc9f982bead75c6)_
  • [ ] _FreeCodeCamp/Aurora (users: 5, id: 55cee2940fc9f982bead75d8)_
  • [ ] _FreeCodeCamp/Kozhikode (users: 5, id: 55cee2f90fc9f982bead75e2)_
  • [ ] _FreeCodeCamp/Fremont (users: 5, id: 55d77aea0fc9f982beae32ca)_
  • [ ] _FreeCodeCamp/Gurgaon (users: 5, id: 55ebdb5b0fc9f982beafcb64)_
  • [ ] _FreeCodeCamp/CodingOnAPhone (users: 5, id: 565e3e5016b6c7089cbcfb7e)_
  • [ ] _FreeCodeCamp/Aracaju (users: 6, id: 559391ab15522ed4b3e324e3)_
  • [ ] _FreeCodeCamp/Bucaramanga (users: 6, id: 559392c715522ed4b3e32526)_
  • [ ] _FreeCodeCamp/HamptonRoads (users: 6, id: 5593955815522ed4b3e325af)_
  • [ ] _FreeCodeCamp/Harcourt (users: 6, id: 5593957615522ed4b3e325b3)_
  • [ ] _FreeCodeCamp/JoaoPessoa (users: 6, id: 5593962515522ed4b3e325d3)_
  • [ ] _FreeCodeCamp/Leesburg (users: 6, id: 559396bf15522ed4b3e325f9)_
  • [ ] _FreeCodeCamp/Limassol (users: 6, id: 559396d915522ed4b3e325ff)_
  • [ ] _FreeCodeCamp/Lubbock (users: 6, id: 5593971915522ed4b3e3260c)_
  • [ ] _FreeCodeCamp/Nashik (users: 6, id: 559397f715522ed4b3e32634)_
  • [ ] _FreeCodeCamp/NorthPlatte (users: 6, id: 5593983115522ed4b3e32645)_
  • [ ] _FreeCodeCamp/Yekaterinburg (users: 6, id: 559d449115522ed4b3e3a6fd)_
  • [ ] _FreeCodeCamp/BloomingtonNormal (users: 6, id: 55a06cde5e0d51bd787af961)_
  • [ ] _FreeCodeCamp/TomsRiver (users: 6, id: 55a4b8455e0d51bd787b5129)_
  • [ ] _FreeCodeCamp/Napoli (users: 6, id: 55a4b8e15e0d51bd787b513d)_
  • [ ] _FreeCodeCamp/Beirut (users: 6, id: 55a4b90e5e0d51bd787b513f)_
  • [ ] _FreeCodeCamp/Cali (users: 6, id: 55a5f3ae5e0d51bd787b6be6)_
  • [ ] _FreeCodeCamp/Montevideo (users: 6, id: 55aef9e80fc9f982beaa8247)_
  • [ ] _FreeCodeCamp/Pondicherry (users: 6, id: 55aefa1c0fc9f982beaa8252)_
  • [ ] _FreeCodeCamp/Kosovo (users: 6, id: 55b560e30fc9f982beab0efe)_
  • [ ] _FreeCodeCamp/Bacau (users: 6, id: 55c3af2a0fc9f982beac7e0b)_
  • [ ] _FreeCodeCamp/Swedish (users: 6, id: 55cae71e0fc9f982bead1849)_
  • [ ] _FreeCodeCamp/Fayetteville (users: 6, id: 55cee36b0fc9f982bead75eb)_
  • [ ] _FreeCodeCamp/Baku (users: 6, id: 55cee3810fc9f982bead75f4)_
  • [ ] _FreeCodeCamp/AndroidApp (users: 6, id: 55eb540d0fc9f982beafc528)_
  • [ ] _FreeCodeCamp/Victoria (users: 7, id: 559a18a815522ed4b3e37201)_
  • [ ] _FreeCodeCamp/Campinas (users: 7, id: 559392fd15522ed4b3e32534)_
  • [ ] _FreeCodeCamp/Curitiba (users: 7, id: 559393b115522ed4b3e32555)_
  • [ ] _FreeCodeCamp/Kaduna (users: 7, id: 5593963615522ed4b3e325d7)_
  • [ ] _FreeCodeCamp/Bhaktapur (users: 7, id: 5593925215522ed4b3e32506)_
  • [ ] _FreeCodeCamp/Waterford (users: 7, id: 55a093fb5e0d51bd787afdda)_
  • [ ] _FreeCodeCamp/Christchurch (users: 7, id: 55a1a3cf5e0d51bd787b1477)_
  • [ ] _FreeCodeCamp/Hobart (users: 7, id: 55b55f7a0fc9f982beab0edd)_
  • [ ] _FreeCodeCamp/Surrey (users: 7, id: 55b55fa20fc9f982beab0ee3)_
  • [ ] _FreeCodeCamp/Norfolk (users: 7, id: 55b85adf0fc9f982beab5984)_
  • [ ] _FreeCodeCamp/Surabaya (users: 7, id: 55c3afd30fc9f982beac7e3e)_
  • [ ] _FreeCodeCamp/Timisoara (users: 7, id: 55c3afe20fc9f982beac7e4a)_
  • [ ] _FreeCodeCamp/Ames (users: 7, id: 560a52ec0fc9f982beb22a9f)_
  • [ ] _FreeCodeCamp/TranslateHindi (users: 7, id: 56c0614ae610378809c15ab3)_
  • [ ] _FreeCodeCamp/TranslateSerbian (users: 7, id: 56c06a19e610378809c15b68)_
  • [ ] _FreeCodeCamp/Firenze (users: 8, id: 5593942a15522ed4b3e3257a)_
  • [ ] _FreeCodeCamp/NorthernArizona (users: 8, id: 5593943315522ed4b3e32583)_
  • [ ] _FreeCodeCamp/Geneva (users: 8, id: 5593952e15522ed4b3e325a7)_
  • [ ] _FreeCodeCamp/SaintPaul (users: 8, id: 55939ca115522ed4b3e32711)_
  • [ ] _FreeCodeCamp/Glendora (users: 8, id: 55939cb515522ed4b3e32715)_
  • [ ] _FreeCodeCamp/Colombo (users: 8, id: 55a4b7d15e0d51bd787b5118)_
  • [ ] _FreeCodeCamp/Trivandrum (users: 8, id: 55a6d1ed5e0d51bd787b7da1)_
  • [ ] _FreeCodeCamp/JacksonMS (users: 8, id: 55a76e918a7b72f55c3f9262)_
  • [x] _FreeCodeCamp/Albanian (users: 8, id: 55b555b40fc9f982beab0e20)_
  • [ ] _FreeCodeCamp/LittleRock (users: 8, id: 55b55f1a0fc9f982beab0ed3)_
  • [x] _FreeCodeCamp/Albuquerque (users: 8, id: 55c3ab550fc9f982beac7d4c)_
  • [ ] _FreeCodeCamp/Thessaloniki (users: 8, id: 55c3afda0fc9f982beac7e41)_
  • [ ] _FreeCodeCamp/TranslationDeutsch (users: 8, id: 56ba7421e610378809c0ac8a)_
  • [ ] _FreeCodeCamp/TranslationChinese (users: 8, id: 56fa817e85d51f252abb6443)_
  • [ ] _FreeCodeCamp/Asuncion (users: 9, id: 559391cf15522ed4b3e324e7)_
  • [ ] _FreeCodeCamp/VirginiaBeach (users: 9, id: 55939c8c15522ed4b3e3270d)_
  • [x] _FreeCodeCamp/Albany (users: 9, id: 5593908715522ed4b3e324cc)_
  • [ ] _FreeCodeCamp/Bydgoszcz (users: 9, id: 5593926615522ed4b3e3250b)_
  • [ ] _FreeCodeCamp/Doha (users: 9, id: 559393fd15522ed4b3e3256f)_
  • [ ] _FreeCodeCamp/Kalamazoo (users: 9, id: 5593964015522ed4b3e325d9)_
  • [ ] _FreeCodeCamp/Lehi (users: 9, id: 559396c815522ed4b3e325fb)_
  • [ ] _FreeCodeCamp/SantaCruz (users: 9, id: 559399ad15522ed4b3e326aa)_
  • [ ] _FreeCodeCamp/Stuttgart (users: 9, id: 559399fc15522ed4b3e326c7)_
  • [ ] _FreeCodeCamp/Vitoria (users: 9, id: 55939c8115522ed4b3e3270b)_
  • [ ] _FreeCodeCamp/LaPaz (users: 9, id: 559396a015522ed4b3e325f3)_
  • [ ] _FreeCodeCamp/StCloud (users: 9, id: 559cadc915522ed4b3e39e48)_
  • [ ] _FreeCodeCamp/Tallahassee (users: 9, id: 55a5f3815e0d51bd787b6be4)_
  • [ ] _FreeCodeCamp/ChampaignUrbana (users: 9, id: 55c3dbcd0fc9f982beac8324)_
  • [ ] _FreeCodeCamp/ChiangMai (users: 10, id: 5593933b15522ed4b3e32545)_
  • [ ] _FreeCodeCamp/Penang (users: 10, id: 5593988915522ed4b3e32663)_
  • [ ] _FreeCodeCamp/SanBernardino (users: 10, id: 5593997c15522ed4b3e3269e)_
  • [ ] _FreeCodeCamp/SanLuisObispo (users: 10, id: 5593999c15522ed4b3e326a6)_
  • [ ] _FreeCodeCamp/SantaBarbara (users: 10, id: 559399a415522ed4b3e326a8)_
  • [ ] _FreeCodeCamp/Temecula (users: 10, id: 55939a2015522ed4b3e326cf)_
  • [ ] _FreeCodeCamp/Lviv (users: 10, id: 559cab8415522ed4b3e39e2b)_
  • [ ] _FreeCodeCamp/NewPaltz (users: 10, id: 5593981a15522ed4b3e3263d)_
  • [ ] _FreeCodeCamp/Wichita (users: 10, id: 55a06e565e0d51bd787af99e)_
  • [ ] _FreeCodeCamp/SanJuan (users: 10, id: 55a2db8d5e0d51bd787b2995)_
  • [ ] _FreeCodeCamp/AbuDhabi (users: 10, id: 55a4bb4b5e0d51bd787b516a)_
  • [ ] _FreeCodeCamp/Buffalo (users: 10, id: 55ab736b37f2ad22587e6262)_
  • [ ] _FreeCodeCamp/Casablanca (users: 10, id: 55b55eb60fc9f982beab0ecd)_
  • [ ] _FreeCodeCamp/Olympia (users: 10, id: 55becad90fc9f982beabebd2)_
  • [ ] _FreeCodeCamp/Security (users: 10, id: 55f3b4c00fc9f982beb0723b)_
  • [ ] _FreeCodeCamp/TranslateTurkish (users: 10, id: 56c06b64e610378809c15b7a)_
  • [ ] _FreeCodeCamp/Florianopolis (users: 11, id: 5593944e15522ed4b3e32585)_
  • [ ] _FreeCodeCamp/Boulder (users: 11, id: 5593929a15522ed4b3e3251c)_
  • [ ] _FreeCodeCamp/Winnipeg (users: 11, id: 55939a6015522ed4b3e326e1)_
  • [ ] _FreeCodeCamp/Bellingham (users: 11, id: 5593922615522ed4b3e324fa)_
  • [ ] _FreeCodeCamp/Brighton (users: 11, id: 55a093d65e0d51bd787afdcb)_
  • [ ] _FreeCodeCamp/Modesto (users: 11, id: 55a4bb8f5e0d51bd787b516e)_
  • [ ] _FreeCodeCamp/PanamaCity (users: 11, id: 55a5f3de5e0d51bd787b6be9)_
  • [ ] _FreeCodeCamp/RiversideCA (users: 11, id: 55a5ff8c5e0d51bd787b6ca5)_
  • [ ] _FreeCodeCamp/Tallinn (users: 11, id: 55b55f820fc9f982beab0ee0)_
  • [ ] _FreeCodeCamp/TranslationArabic (users: 11, id: 56fec4c5187bb6f0eadd6ad2)_
  • [ ] _FreeCodeCamp/ServerSideChat (users: 12, id: 558602c015522ed4b3e23712)_
  • [ ] _FreeCodeCamp/Bandung (users: 12, id: 5593920115522ed4b3e324f2)_
  • [ ] _FreeCodeCamp/Brasilia (users: 12, id: 559392a315522ed4b3e3251e)_
  • [ ] _FreeCodeCamp/Brno (users: 12, id: 559392b515522ed4b3e32522)_
  • [ ] _FreeCodeCamp/Dnipropetrovsk (users: 12, id: 559393f415522ed4b3e3256d)_
  • [ ] _FreeCodeCamp/Frankfurt (users: 12, id: 5593950415522ed4b3e3259f)_
  • [ ] _FreeCodeCamp/Zurich (users: 12, id: 55939a7815522ed4b3e326e7)_
  • [ ] _FreeCodeCamp/Amman (users: 12, id: 559a190d15522ed4b3e37212)_
  • [ ] _FreeCodeCamp/Fresno (users: 12, id: 559a192215522ed4b3e37216)_
  • [ ] _FreeCodeCamp/Hamburg (users: 12, id: 55a06df05e0d51bd787af98e)_
  • [ ] _FreeCodeCamp/GainesvilleFL (users: 12, id: 55a1a2b55e0d51bd787b1456)_
  • [ ] _FreeCodeCamp/Reno (users: 12, id: 55b185850fc9f982beaac600)_
  • [x] _FreeCodeCamp/Algiers (users: 12, id: 55b560ed0fc9f982beab0f01)_
  • [ ] _FreeCodeCamp/Columbus (users: 12, id: 55cee2010fc9f982bead75cd)_
  • [ ] _FreeCodeCamp/Skopje (users: 13, id: 559399e415522ed4b3e326ba)_
  • [ ] _FreeCodeCamp/Provo (users: 13, id: 559398ed15522ed4b3e32681)_
  • [ ] _FreeCodeCamp/SouthBend (users: 13, id: 55939c9715522ed4b3e3270f)_
  • [ ] _FreeCodeCamp/Valencia (users: 13, id: 55939a4715522ed4b3e326db)_
  • [ ] _FreeCodeCamp/Tulsa (users: 13, id: 55939a3c15522ed4b3e326d9)_
  • [ ] _FreeCodeCamp/Boise (users: 13, id: 55a06d6d5e0d51bd787af97a)_
  • [ ] _FreeCodeCamp/Sheffield (users: 13, id: 55a093be5e0d51bd787afdc4)_
  • [ ] _FreeCodeCamp/BloomingtonIN (users: 13, id: 55a093e65e0d51bd787afdd5)_
  • [ ] _FreeCodeCamp/Ankara (users: 13, id: 55a1a2375e0d51bd787b1440)_
  • [ ] _FreeCodeCamp/NewBrunswick (users: 13, id: 55ab731937f2ad22587e625a)_
  • [ ] _FreeCodeCamp/Sarajevo (users: 13, id: 55f3bda00fc9f982beb072b9)_
  • [ ] _FreeCodeCamp/TranslationItaliana (users: 13, id: 572bd749c43b8c6019716388)_
  • [ ] _FreeCodeCamp/Jacksonville (users: 14, id: 559a191915522ed4b3e37214)_
  • [x] _FreeCodeCamp/Adelaide (users: 14, id: 55a1a3775e0d51bd787b1470)_
  • [ ] _FreeCodeCamp/Louisville (users: 14, id: 55aef9ae0fc9f982beaa823a)_
  • [ ] _FreeCodeCamp/Stockholm (users: 14, id: 55d786650fc9f982beae33f4)_
  • [ ] _FreeCodeCamp/Monterrey (users: 15, id: 5595842315522ed4b3e3420a)_
  • [ ] _FreeCodeCamp/Coimbatore (users: 15, id: 5593939a15522ed4b3e32551)_
  • [ ] _FreeCodeCamp/Iasi (users: 15, id: 559395d115522ed4b3e325c6)_
  • [ ] _FreeCodeCamp/Missoula (users: 15, id: 559397bc15522ed4b3e32625)_
  • [ ] _FreeCodeCamp/BeloHorizonte (users: 15, id: 5593923015522ed4b3e324fc)_
  • [ ] _FreeCodeCamp/Knoxville (users: 15, id: 55a093f15e0d51bd787afdd8)_
  • [ ] _FreeCodeCamp/ColoradoSprings (users: 15, id: 55a0944b5e0d51bd787afdef)_
  • [ ] _FreeCodeCamp/Milan (users: 15, id: 55aefaa80fc9f982beaa8259)_
  • [ ] _FreeCodeCamp/Halifax (users: 15, id: 55c3af5b0fc9f982beac7e17)_
  • [ ] _FreeCodeCamp/LasVegas (users: 15, id: 55c3af8a0fc9f982beac7e28)_
  • [ ] _FreeCodeCamp/Omaha (users: 16, id: 5593984615522ed4b3e3264a)_
  • [ ] _FreeCodeCamp/NodeSchool (users: 16, id: 5520117215522ed4b3de5a2f)_
  • [ ] _FreeCodeCamp/Birmingham (users: 16, id: 5593926e15522ed4b3e3250d)_
  • [ ] _FreeCodeCamp/Hartford (users: 16, id: 5593957f15522ed4b3e325b5)_
  • [ ] _FreeCodeCamp/Pasadena (users: 16, id: 5593987715522ed4b3e3265e)_
  • [ ] _FreeCodeCamp/SanAntonio (users: 16, id: 55a4bbbd5e0d51bd787b5175)_
  • [ ] _FreeCodeCamp/GrandRapids (users: 16, id: 55b181eb0fc9f982beaac5ae)_
  • [ ] _FreeCodeCamp/Tehran (users: 16, id: 55b560c30fc9f982beab0ef7)_
  • [ ] _FreeCodeCamp/Busan (users: 16, id: 55cee39a0fc9f982bead75f7)_
  • [ ] _FreeCodeCamp/Bratislava (users: 17, id: 559392ab15522ed4b3e32520)_
  • [ ] _FreeCodeCamp/LosAngeles (users: 17, id: 5593971015522ed4b3e32609)_
  • [ ] _FreeCodeCamp/Johannesburg (users: 17, id: 5593962c15522ed4b3e325d5)_
  • [ ] _FreeCodeCamp/Kathmandu (users: 17, id: 5593965e15522ed4b3e325e0)_
  • [ ] _FreeCodeCamp/Asheville (users: 17, id: 559391c415522ed4b3e324e5)_
  • [ ] _FreeCodeCamp/Tucson (users: 17, id: 55939a3515522ed4b3e326d7)_
  • [ ] _FreeCodeCamp/Trojmiasto (users: 17, id: 55a06d545e0d51bd787af977)_
  • [x] _FreeCodeCamp/Aarhus (users: 17, id: 55ab72b337f2ad22587e6254)_
  • [ ] _FreeCodeCamp/TranslationRussian (users: 17, id: 56d17d02e610378809c3d9d2)_
  • [ ] _FreeCodeCamp/Porto (users: 18, id: 559398b315522ed4b3e32670)_
  • [ ] _FreeCodeCamp/NewHaven (users: 18, id: 5593980815522ed4b3e32638)_
  • [ ] _FreeCodeCamp/Hanoi (users: 18, id: 5593956c15522ed4b3e325b1)_
  • [ ] _FreeCodeCamp/Providence (users: 18, id: 559398e515522ed4b3e3267f)_
  • [ ] _FreeCodeCamp/Vilnius (users: 18, id: 55a1a2095e0d51bd787b143b)_
  • [ ] _FreeCodeCamp/Edinburgh (users: 18, id: 55aefc130fc9f982beaa829b)_
  • [ ] _FreeCodeCamp/Chattanooga (users: 19, id: 5593932b15522ed4b3e3253f)_
  • [ ] _FreeCodeCamp/RochesterNY (users: 19, id: 559ca9b015522ed4b3e39e14)_
  • [ ] _FreeCodeCamp/Rotterdam (users: 19, id: 5593993b15522ed4b3e3268f)_
  • [ ] _FreeCodeCamp/Italian (users: 19, id: 574bc382c43b8c601975a6bd)_
  • [ ] _FreeCodeCamp/Bangkok (users: 20, id: 5593920b15522ed4b3e324f4)_
  • [ ] _FreeCodeCamp/Hermosillo (users: 20, id: 5593958915522ed4b3e325b7)_
  • [ ] _FreeCodeCamp/Islamabad (users: 20, id: 5593960915522ed4b3e325ca)_
  • [ ] _FreeCodeCamp/Recife (users: 20, id: 5593990315522ed4b3e32687)_
  • [ ] _FreeCodeCamp/Brisbane (users: 20, id: 55ab71e337f2ad22587e6239)_
  • [ ] _FreeCodeCamp/Caracas (users: 21, id: 5593931a15522ed4b3e3253a)_
  • [ ] _FreeCodeCamp/Dubai (users: 21, id: 5593940715522ed4b3e32571)_
  • [ ] _FreeCodeCamp/BirminghamAlabama (users: 21, id: 5593927715522ed4b3e3250f)_
  • [x] _FreeCodeCamp/Accra (users: 21, id: 5593906b15522ed4b3e324c6)_
  • [ ] _FreeCodeCamp/Minsk (users: 21, id: 55a1a3245e0d51bd787b145e)_
  • [ ] _FreeCodeCamp/Vietnamese (users: 21, id: 55a5ec8b5e0d51bd787b6b68)_
  • [ ] _FreeCodeCamp/Ottawa (users: 21, id: 55aefbe20fc9f982beaa8296)_
  • [ ] _FreeCodeCamp/OfflineMode (users: 21, id: 5629507a16b6c7089cb7efe6)_
  • [ ] _FreeCodeCamp/Edmonton (users: 22, id: 5593942115522ed4b3e32578)_
  • [ ] _FreeCodeCamp/Roma (users: 22, id: 5593991d15522ed4b3e3268d)_
  • [ ] _FreeCodeCamp/Jaipur (users: 22, id: 5595842c15522ed4b3e3420c)_
  • [ ] _FreeCodeCamp/TranslationFrench (users: 22, id: 56cfbdf1e610378809c38c4f)_
  • [ ] _FreeCodeCamp/Backend-Challenges (users: 22, id: 57179440659847a7aff3b114)_
  • [ ] _FreeCodeCamp/NewOrleans (users: 23, id: 5593981215522ed4b3e3263a)_
  • [x] _FreeCodeCamp/Ahmedabad (users: 24, id: 5593907a15522ed4b3e324c8)_
  • [ ] _FreeCodeCamp/TwitchTV (users: 24, id: 5522a2ab15522ed4b3de6b61)_
  • [ ] _FreeCodeCamp/Lisbon (users: 24, id: 559396e315522ed4b3e32601)_
  • [ ] _FreeCodeCamp/Cluj (users: 24, id: 5593938015522ed4b3e3254f)_
  • [ ] _FreeCodeCamp/DesMoines (users: 24, id: 559393d715522ed4b3e32567)_
  • [ ] _FreeCodeCamp/Korean (users: 24, id: 55a5ec7a5e0d51bd787b6b66)_
  • [ ] _FreeCodeCamp/YouTube (users: 24, id: 571109bf187bb6f0eadf9fcf)_
  • [ ] _FreeCodeCamp/OklahomaCity (users: 25, id: 5593983a15522ed4b3e32648)_
  • [ ] _FreeCodeCamp/AnnArbor (users: 25, id: 5593919515522ed4b3e324df)_
  • [ ] _FreeCodeCamp/Madison (users: 25, id: 55a181e85e0d51bd787b11bd)_
  • [ ] _FreeCodeCamp/Izmir (users: 25, id: 55a5f30d5e0d51bd787b6bdc)_
  • [ ] _FreeCodeCamp/Karachi (users: 26, id: 5593965415522ed4b3e325de)_
  • [ ] _FreeCodeCamp/SocialNetwork (users: 26, id: 55a19b4f5e0d51bd787b13c8)_
  • [ ] _FreeCodeCamp/TelAviv (users: 27, id: 55a093d05e0d51bd787afdc9)_
  • [ ] _FreeCodeCamp/Barcelona (users: 27, id: 55a5ffd95e0d51bd787b6caa)_
  • [ ] _FreeCodeCamp/Vienna (users: 27, id: 570f342a187bb6f0eadf5f72)_
  • [ ] _FreeCodeCamp/Auckland (users: 28, id: 559391e315522ed4b3e324eb)_
  • [ ] _FreeCodeCamp/CapeTown (users: 28, id: 5593931215522ed4b3e32538)_
  • [ ] _FreeCodeCamp/Kolkata (users: 28, id: 5593968115522ed4b3e325eb)_
  • [ ] _FreeCodeCamp/Guadalajara (users: 28, id: 5595b8a215522ed4b3e34571)_
  • [ ] _FreeCodeCamp/Romanian (users: 28, id: 55b8637f0fc9f982beab5a05)_
  • [ ] _FreeCodeCamp/Perth (users: 29, id: 559a18dc15522ed4b3e3720b)_
  • [ ] _FreeCodeCamp/Detroit (users: 29, id: 559393e215522ed4b3e32569)_
  • [ ] _FreeCodeCamp/Milwaukee (users: 30, id: 5593979f15522ed4b3e3261f)_
  • [ ] _FreeCodeCamp/Tokyo (users: 30, id: 55a5f32c5e0d51bd787b6bdf)_
  • [ ] _FreeCodeCamp/Bogota (users: 31, id: 5593928a15522ed4b3e32513)_
  • [ ] _FreeCodeCamp/KansasCity (users: 31, id: 5593964a15522ed4b3e325db)_
  • [x] _FreeCodeCamp/HongKong (users: 31, id: 5593959c15522ed4b3e325bb)_
  • [ ] _FreeCodeCamp/TranslationBahasaIndonesia (users: 31, id: 570b7531187bb6f0eadedc32)_
  • [ ] _FreeCodeCamp/SantoDomingo (users: 32, id: 55a094285e0d51bd787afde4)_
  • [ ] _FreeCodeCamp/TimeCoordinatorApp (users: 33, id: 54f7772815522ed4b3dccf75)_
  • [ ] _FreeCodeCamp/Richmond (users: 33, id: 5593990a15522ed4b3e32689)_
  • [ ] _FreeCodeCamp/Bhubaneswar (users: 33, id: 55a094455e0d51bd787afded)_
  • [ ] _FreeCodeCamp/Santiago (users: 33, id: 55ab739a37f2ad22587e6268)_
  • [ ] _FreeCodeCamp/tagalog (users: 33, id: 55b1cacc0fc9f982beaacbc4)_
  • [ ] _FreeCodeCamp/PortoAlegre (users: 33, id: 55c3af9c0fc9f982beac7e2e)_
  • [ ] _FreeCodeCamp/RiodeJaneiro (users: 34, id: 5593991415522ed4b3e3268b)_
  • [ ] _FreeCodeCamp/Lahore (users: 34, id: 559396b715522ed4b3e325f7)_
  • [ ] _FreeCodeCamp/Dutch (users: 35, id: 5593a16c15522ed4b3e32755)_
  • [ ] _FreeCodeCamp/Cairo (users: 35, id: 559392ec15522ed4b3e32530)_
  • [ ] _FreeCodeCamp/Brussels (users: 35, id: 559392bf15522ed4b3e32524)_
  • [ ] _FreeCodeCamp/Salvador (users: 35, id: 5593997015522ed4b3e3269b)_
  • [ ] _FreeCodeCamp/Beta (users: 35, id: 55ba68240fc9f982beab918f)_
  • [ ] _FreeCodeCamp/Manchester (users: 36, id: 55939cab15522ed4b3e32713)_
  • [ ] _FreeCodeCamp/React (users: 36, id: 55c96a410fc9f982beacf1f7)_
  • [ ] _FreeCodeCamp/Cleveland (users: 37, id: 55959b4515522ed4b3e34373)_
  • [ ] _FreeCodeCamp/Lima (users: 38, id: 559396d015522ed4b3e325fd)_
  • [ ] _FreeCodeCamp/Dhaka (users: 38, id: 559393eb15522ed4b3e3256b)_
  • [ ] _FreeCodeCamp/Baltimore (users: 38, id: 559391f815522ed4b3e324f0)_
  • [ ] _FreeCodeCamp/Cincinnati (users: 39, id: 5593935815522ed4b3e3254b)_
  • [ ] _FreeCodeCamp/Athens (users: 39, id: 55a5f2ff5e0d51bd787b6bda)_
  • [ ] _FreeCodeCamp/Shanghai (users: 39, id: 55aefb680fc9f982beaa827b)_
  • [ ] _FreeCodeCamp/Amsterdam (users: 41, id: 5593918415522ed4b3e324dd)_
  • [ ] _FreeCodeCamp/SaintLouis (users: 41, id: 5593995b15522ed4b3e32697)_
  • [ ] _FreeCodeCamp/Pittsburgh (users: 42, id: 5593989b15522ed4b3e3266b)_
  • [ ] _FreeCodeCamp/Indianapolis (users: 42, id: 559395c215522ed4b3e325c4)_
  • [ ] _FreeCodeCamp/CoreTeam (users: 42, id: 559ac28e15522ed4b3e37de7)_
  • [ ] _FreeCodeCamp/Munich (users: 42, id: 559397df15522ed4b3e3262d)_
  • [ ] _FreeCodeCamp/Mumbai (users: 43, id: 55c3aff30fc9f982beac7e54)_
  • [ ] _FreeCodeCamp/Calgary (users: 45, id: 559392f415522ed4b3e32532)_
  • [ ] _FreeCodeCamp/HoChiMinhCity (users: 45, id: 5593959215522ed4b3e325b9)_
  • [ ] _FreeCodeCamp/BuenosAires (users: 46, id: 559392d115522ed4b3e32529)_
  • [ ] _FreeCodeCamp/Charlotte (users: 46, id: 5593932315522ed4b3e3253d)_
  • [ ] _FreeCodeCamp/Budapest (users: 47, id: 559392e215522ed4b3e3252e)_
  • [ ] _FreeCodeCamp/Seoul (users: 47, id: 5595844215522ed4b3e34210)_
  • [ ] _FreeCodeCamp/Raleigh (users: 47, id: 559398fc15522ed4b3e32685)_
  • [ ] _FreeCodeCamp/Zagreb (users: 47, id: 55a06d115e0d51bd787af970)_
  • [ ] _FreeCodeCamp/Istanbul (users: 48, id: 559395b915522ed4b3e325c1)_
  • [ ] _FreeCodeCamp/Pune (users: 49, id: 559398c215522ed4b3e32673)_
  • [ ] _FreeCodeCamp/Nairobi (users: 49, id: 559397f015522ed4b3e32632)_
  • [ ] _FreeCodeCamp/Chennai (users: 49, id: 5593933315522ed4b3e32541)_
  • [ ] _FreeCodeCamp/Vancouver (users: 50, id: 55939a4d15522ed4b3e326dd)_
  • [ ] _FreeCodeCamp/Prague (users: 50, id: 55aefaec0fc9f982beaa8261)_
  • [ ] _FreeCodeCamp/Minneapolis (users: 51, id: 559397a915522ed4b3e32621)_
  • [ ] _FreeCodeCamp/Bucharest (users: 52, id: 559392da15522ed4b3e3252b)_
  • [ ] _FreeCodeCamp/deutsch (users: 53, id: 55939e7d15522ed4b3e32727)_
  • [ ] _FreeCodeCamp/Berlin (users: 53, id: 5593924315522ed4b3e32500)_
  • [ ] _FreeCodeCamp/Nashville (users: 53, id: 559397ff15522ed4b3e32636)_
  • [ ] _FreeCodeCamp/Orlando (users: 55, id: 5593985b15522ed4b3e32655)_
  • [ ] _FreeCodeCamp/Montreal (users: 55, id: 559397cf15522ed4b3e32629)_
  • [ ] _FreeCodeCamp/SaltLakeCity (users: 55, id: 5593996715522ed4b3e32699)_
  • [ ] _FreeCodeCamp/MexicoCity (users: 57, id: 5593973d15522ed4b3e32618)_
  • [ ] _FreeCodeCamp/Melbourne (users: 58, id: 5593973315522ed4b3e32615)_
  • [ ] _FreeCodeCamp/Madrid (users: 58, id: 5593972315522ed4b3e32610)_
  • [ ] _FreeCodeCamp/Taipei (users: 59, id: 55939a0315522ed4b3e326c9)_
  • [ ] _FreeCodeCamp/Tampa (users: 60, id: 55939a1715522ed4b3e326cd)_
  • [ ] _FreeCodeCamp/Paris (users: 63, id: 5593986e15522ed4b3e3265a)_
  • [ ] _FreeCodeCamp/Kiev (users: 64, id: 5593967815522ed4b3e325e7)_
  • [ ] _FreeCodeCamp/Denver (users: 64, id: 559393cd15522ed4b3e32560)_
  • [ ] _FreeCodeCamp/Miami (users: 64, id: 5593979615522ed4b3e3261d)_
  • [ ] _FreeCodeCamp/CampCounselors (users: 67, id: 5485fa47db8155e6700dd19c)_
  • [ ] _FreeCodeCamp/Japanese (users: 67, id: 55a5e8e35e0d51bd787b6b3d)_
  • [ ] _FreeCodeCamp/KualaLumpur (users: 69, id: 55a2dc255e0d51bd787b29ad)_
  • [ ] _FreeCodeCamp/News (users: 69, id: 55ba682b0fc9f982beab9192)_
  • [ ] _FreeCodeCamp/cplusplus (users: 70, id: 570ff99b187bb6f0eadf7e72)_
  • [ ] _FreeCodeCamp/DallasFortWorth (users: 71, id: 559394d015522ed4b3e32596)_
  • [ ] _FreeCodeCamp/arabic (users: 71, id: 55939ea015522ed4b3e3272f)_
  • [ ] _FreeCodeCamp/vagrant (users: 71, id: 574beacfc43b8c601975abd4)_
  • [ ] _FreeCodeCamp/BookClub (users: 72, id: 55c796740fc9f982beacc566)_
  • [ ] _FreeCodeCamp/Sacramento (users: 73, id: 5593994715522ed4b3e32691)_
  • [ ] _FreeCodeCamp/Belgrade (users: 73, id: 5593921d15522ed4b3e324f8)_
  • [ ] _FreeCodeCamp/EastBay (users: 73, id: 559390a715522ed4b3e324d2)_
  • [ ] _FreeCodeCamp/Lagos (users: 74, id: 559396ae15522ed4b3e325f5)_
  • [ ] _FreeCodeCamp/Warsaw (users: 74, id: 55a5f3645e0d51bd787b6be2)_
  • [ ] _FreeCodeCamp/camperbot (users: 74, id: 5641134a16b6c7089cba1834)_
  • [ ] _FreeCodeCamp/Jakarta (users: 75, id: 5593961b15522ed4b3e325ce)_
  • [ ] _FreeCodeCamp/Philadelphia (users: 75, id: 5593989415522ed4b3e32669)_
  • [ ] _FreeCodeCamp/Dublin (users: 79, id: 5593940f15522ed4b3e32573)_
  • [ ] _FreeCodeCamp/Delhi (users: 80, id: 559393c515522ed4b3e3255e)_
  • [ ] _FreeCodeCamp/SanJose (users: 80, id: 5593999315522ed4b3e326a4)_
  • [ ] _FreeCodeCamp/TVandMovies (users: 81, id: 55ab712137f2ad22587e621e)_
  • [ ] _FreeCodeCamp/SanDiego (users: 84, id: 5593998315522ed4b3e326a0)_
  • [ ] _FreeCodeCamp/Saving (users: 86, id: 55ab70f637f2ad22587e6205)_
  • [ ] _FreeCodeCamp/BrazilianPortuguese (users: 87, id: 56aab314e610378809bebcc2)_
  • [ ] _FreeCodeCamp/SaoPaulo (users: 88, id: 559399b515522ed4b3e326ac)_
  • [ ] _FreeCodeCamp/Sydney (users: 88, id: 55a072d85e0d51bd787afa1a)_
  • [ ] _FreeCodeCamp/Issues (users: 88, id: 55b1866c0fc9f982beaac613)_
  • [ ] _FreeCodeCamp/Houston (users: 90, id: 559395a715522ed4b3e325bd)_
  • [ ] _FreeCodeCamp/Phoenix (users: 90, id: 559398c915522ed4b3e32675)_
  • [ ] _FreeCodeCamp/francais (users: 93, id: 55939e7115522ed4b3e32725)_
  • [ ] FreeCodeCamp/Bengaluru (users: 101, id: 5593923815522ed4b3e324fe)
  • [ ] FreeCodeCamp/hikes (users: 102, id: 55ea1cee0fc9f982beafb358)
  • [ ] FreeCodeCamp/textEditorReligiousWars (users: 104, id: 547ba98bdb8155e6700d9a8b)
  • [ ] FreeCodeCamp/Singapore (users: 104, id: 559399da15522ed4b3e326b8)
  • [ ] FreeCodeCamp/Moscow (users: 106, id: 559397d815522ed4b3e3262b)
  • [ ] FreeCodeCamp/Music (users: 106, id: 55ab711137f2ad22587e6215)
  • [ ] FreeCodeCamp/Portland (users: 111, id: 559398d215522ed4b3e32677)
  • [ ] FreeCodeCamp/WashingtonDC (users: 112, id: 55939a5615522ed4b3e326df)
  • [ ] FreeCodeCamp/Design (users: 115, id: 55c58de30fc9f982beaca7dd)
  • [ ] FreeCodeCamp/LocalLeaders (users: 115, id: 565ded3516b6c7089cbced2a)
  • [ ] FreeCodeCamp/Austin (users: 118, id: 559391ec15522ed4b3e324ed)
  • [ ] FreeCodeCamp/Atlanta (users: 122, id: 559391d915522ed4b3e324e9)
  • [x] FreeCodeCamp/40PlusDevs (users: 125, id: 55ca87910fc9f982bead115c)
  • [ ] FreeCodeCamp/OrangeCounty (users: 130, id: 5593985115522ed4b3e3264d)
  • [ ] FreeCodeCamp/elixir (users: 135, id: 56d5592fe610378809c460e4)
  • [ ] FreeCodeCamp/go (users: 136, id: 56d55897e610378809c460bf)
  • [ ] FreeCodeCamp/Hardware (users: 139, id: 55ab718537f2ad22587e622c)
  • [ ] FreeCodeCamp/Translators (users: 146, id: 5594861c15522ed4b3e3343f)
  • [ ] FreeCodeCamp/Manila (users: 148, id: 5593972b15522ed4b3e32612)
  • [ ] FreeCodeCamp/Boston (users: 157, id: 5593929215522ed4b3e3251a)
  • [ ] FreeCodeCamp/Chicago (users: 167, id: 5593934815522ed4b3e32548)
  • [ ] FreeCodeCamp/Toronto (users: 169, id: 55939a2e15522ed4b3e326d4)
  • [ ] FreeCodeCamp/Business (users: 179, id: 55ab710037f2ad22587e6209)
  • [ ] FreeCodeCamp/Gaming (users: 187, id: 55ab712a37f2ad22587e6227)
  • [ ] FreeCodeCamp/Git (users: 189, id: 570692b0187bb6f0eade598b)
  • [ ] FreeCodeCamp/dotnet (users: 190, id: 56d5598ae610378809c46101)
  • [ ] FreeCodeCamp/portugues (users: 196, id: 55939e9515522ed4b3e3272c)
  • [ ] FreeCodeCamp/FCCLosAngeles (users: 200, id: 5586e5fe15522ed4b3e241eb)
  • [ ] FreeCodeCamp/Seattle (users: 212, id: 559399cb15522ed4b3e326b2)
  • [ ] FreeCodeCamp/London (users: 231, id: 559396f315522ed4b3e32604)
  • [ ] FreeCodeCamp/SanFrancisco (users: 238, id: 5593998b15522ed4b3e326a2)
  • [ ] FreeCodeCamp/Contributors (users: 238, id: 57dcf2eb40f3a6eec065b5a9)
  • [ ] FreeCodeCamp/ruby (users: 267, id: 56d55861e610378809c460b9)
  • [ ] FreeCodeCamp/SQL (users: 268, id: 56d55954e610378809c460f1)
  • [ ] FreeCodeCamp/TeamViewer (users: 279, id: 5595a8f615522ed4b3e3446b)
  • [ ] FreeCodeCamp/Wiki (users: 323, id: 55c12bce0fc9f982beac384a)
  • [ ] FreeCodeCamp/php (users: 351, id: 56d55839e610378809c460b3)
  • [ ] FreeCodeCamp/Russian (users: 358, id: 5592f45815522ed4b3e31e8d)
  • [ ] FreeCodeCamp/GameDev (users: 375, id: 55ab718e37f2ad22587e622f)
  • [ ] FreeCodeCamp/HelpContributors (users: 382, id: 565aa11b16b6c7089cbc8f48)
  • [ ] FreeCodeCamp/HelpBasejumps (users: 472, id: 55b5223e0fc9f982beab0a46)
  • [ ] FreeCodeCamp/linux (users: 483, id: 56d636d4e610378809c488bc)
  • [ ] FreeCodeCamp/SelfImprovement (users: 523, id: 55ab70ea37f2ad22587e6202)
  • [ ] FreeCodeCamp/camperbotPlayground (users: 547, id: 5650c32f16b6c7089cbba10e)
  • [ ] FreeCodeCamp/java (users: 553, id: 56d558cbe610378809c460c3)
  • [ ] FreeCodeCamp/LiveCoding (users: 666, id: 55a098e95e0d51bd787afe92)
  • [ ] FreeCodeCamp/python (users: 729, id: 56d558f5e610378809c460cd)
  • [ ] FreeCodeCamp/CurriculumDevelopment (users: 841, id: 54d96d6915522ed4b3dbd2ce)
  • [ ] FreeCodeCamp/CamperPracticeProjects (users: 1695, id: 54ef614115522ed4b3dc863b)
  • [ ] FreeCodeCamp/HelpZiplines (users: 2195, id: 55b522300fc9f982beab0a40)
  • [ ] FreeCodeCamp/HelpBonfires (users: 4139, id: 55b516800fc9f982beab0950)
  • FreeCodeCamp/admin (users: 155, id: 56438e7616b6c7089cba58f8)
  • FreeCodeCamp/CodingJobs (users: 4720, id: 55ab492d8a7b72f55c3fcca1)
  • FreeCodeCamp/chinese (users: 5910, id: 55939e8615522ed4b3e3272a)
  • FreeCodeCamp/LetsPair (users: 6232, id: 546fdda2db8155e6700d6ee4)
  • FreeCodeCamp/HelpFrontEnd (users: 7716, id: 5695eab116b6c7089cc24de2)
  • FreeCodeCamp/CodeReview (users: 8471, id: 55c2ffbc0fc9f982beac696a)
  • FreeCodeCamp/HelpJavaScript (users: 15909, id: 5695e9a116b6c7089cc24db5)
  • FreeCodeCamp/Help (users: 39224, id: 54a2fa80db8155e6700e42c3)
  • FreeCodeCamp/FreeCodeCamp (users: 96653, id: 546fd572db8155e6700d6eaf)
  • FreeCodeCamp/PairProgrammingWomen (users: 542, id: 55ab262a8a7b72f55c3fcb8c)
  • FreeCodeCamp/DataScience (users: 802, id: 55bb9cab0fc9f982beabafce)
  • FreeCodeCamp/Casual (users: 840, id: 56120120d33f749381a847aa)
  • FreeCodeCamp/YouCanDoThis (users: 3782, id: 55ab461a8a7b72f55c3fcc67)
  • FreeCodeCamp/NewYorkCity (users: 392, id: 5593982115522ed4b3e3263f)
  • FreeCodeCamp/HelpBackEnd (users: 1690, id: 5695eb3e16b6c7089cc24e10)
  • FreeCodeCamp/Espanol (users: 669, id: 5592f44e15522ed4b3e31e8b)
  • FreeCodeCamp/Contributors
  • FreeCodeCamp/CoreTeam
  • FreeCodeCamp/HelpDataViz (users: 591, id: 5695eb9116b6c7089cc24e2f)

@abhisekp perfect. Thank you!

@abhisekp I updated your list so that all the rooms we don't intend to delete are at the bottom.

Question: Is there a way to keep the necessary data from deprecated rooms, but still have them removed from this page? https://gitter.im/orgs/FreeCodeCamp/rooms
WaitButWhy: Because in pursuing an active and relevant room, students are easily misled, distracted and deterred from core rooms, that are not conveniently displayed on the first page of the explore FCC link. A consolidation certainly helps fix this 💯 . I believe that if we can easily find such rooms like _Git_ we would see more positive engagement in rooms that are relevant to Freecodecamp's mission.

https://gitter.im/FreeCodeCamp/Git

Furthermore, I think that _Git_ is a perfect example of a necessary room. There are no active rooms on Gitter that are so specific as to have a community dedicated to Git or Github both of which I am told are essential to becoming a developer. I think we can make the room more inclusive to increase community engagement by including not only git but the _command line_, _editors_, _GUI clients of which there are many_ and of course _all things Github related_👍

@ladybugtju sorry for late response:
yes that could be a problem when using node but check: are you async? Perhaps writing in chunks and trying not to keep data in memory? I have been using python which doesn't have that limit; my problem would be more RAM but I could also make chunks too.

The main room is not listed for download.

@evaristoc: Hi there, thanks for the message and sorry the snail reply, I ve been busy recently. Will have more time in 1/2 weeks. Last time when I was looking at this, I found out that it was a memory issue that we have to face in both node and python. It seems it is related to the kernel, a single process cannot use more than 2GB at a time even despite a bigger physical RAM. This can be increased to 3GB using /3gb boot.ini. Maybe fun to try (I attached the post where I found this).
Python
http://stackoverflow.com/questions/4285185/upper-memory-limit
Node
https://www.youtube.com/watch?v=NLtL-EEclRc

This appart, I downloaded some rooms but maybe better to coordinate? I started looking at the list @abhisekp posted but found differences between the posted message and Json file. Where are you at guys? I remember room numbers were big with some that don't have messages or barely have some. Please also share your python approach. I know some python as well now :)

@ladybugtju Hi! Thanks for looking into the issue and for the link.
I've uploaded my source for the deprecation script to BitBucket here https://bitbucket.org/abhisekp/gitter-archive/src

This stores in postgresql db instead of a csv file directly which can be later exported to csv.
It downloads messages but stops around 30k messages. But starting again, it begins from where it was stopped.
Due to some technical difficulties I was unable to fix some issues I faced while downloading.

Hi @abhisekp : Sorry for the snail reply, busy days. I ll look at all this again after the 14th but I think I actually already downloaded 10 rooms or so and made a short list. We could close several rooms that are not useful and finish downloading several other small ones for now. Let s split the work? We could tackle other issues later. How many rooms did you download and what would be your preferences?

@ladybugtju Thanks for the update. And thanks for doing this.
Could you please share the list of rooms you've already downloaded?

I was unable to continue due to technical issues with my PC and unstable connectivity.

@ladybugtju I recommend we close all the rooms at once, once you've downloaded all of their data and we've backed them up.

The simplest way to do this is to create individual files for each room and push them to this repo that I've created: https://github.com/FreeCodeCamp/gitter-history

I've granted both you and the entire moderation team (which includes @abhisekp) as members.

What format would be best for these? CSV is more compact, and allows for data to be explored in spreadsheets.

As rooms are pushed, they can be checked off in the checklist above.

@ladybugtju @abhisekp has there been any progress on this? Please let me know if I can be of any help. I am eager to consolidate these rooms.

@QuincyLarson I've downloaded the FreeCodeCamp/FreeCodeCamp main room completely till dated 17-12-2016 3:39:24 PM GMT.

Total Uncompressed Size: 588 MB (tab separated format .tsv)
Compressed using 7z Size: 95 MB (will be uploaded to repo using git-lfs)

Sample Format

room_id | room_uri | sent_at | from_userid | from_username | message_id | text
:----:|:----:|:----:|:----:|:----:|:----:|----:
546fd572db8155e6700d6eaf | FreeCodeCamp/FreeCodeCamp | 2014-11-22T00:26:21.469Z | 546fd823db8155e6700d6eb4 | Rybar | 546fd82da07c098d4401b480 | Hola.
546fd572db8155e6700d6eaf | FreeCodeCamp/FreeCodeCamp | 2014-11-22T00:15:04.643Z | | | 546fd58872a00ba87914fcfe | @FreeCodeCamp first person here

Note: the from_userid and from_username fields were empty in the original message.
This is the First Ever message in FreeCodeCamp room :smiley:


  • Ran archiving script in C9.io and the whole room downloaded in just 1 night.
  • Will release the script soon so that gitter archives can be made for any community in gitter. :zap:

Note. I've monitored the whole download and there is absolutely NO errors while downloading the messages.
I used http://papertrailapp.com for logging.

// cc: @evaristoc

git-lfs cannot be used as it is chargeable. And github is not the right place to upload large files.

https://github.com/ckolivas/lrzip gives the best compression. I was able to compress 588 MB file to only 75 MB. And then decompress it. (both using C9 i.e. 512 MB memory limit)

@abhisekp Awesome! I didn't realize Git-LFS costs money. Can't we just push these files to a repo? FreeCodeCamp/FreeCodeCamp is the largest Gitter room by an order of magnitude, so at that level of compression, the other rooms shouldn't be much of a problem.

Can we dump this to Amazon S3? GitHub clearly isn't the right place for data storage. It comes with Free 5GB of storage and data retrievals cost $0.01 per GB.

I think we already have an instance for this?

@raisedadead yes - I can put them into our AWS S3 account for hosting. Once you have the files ready for all the rooms we're archiving, let's hop on a call and figure out how to get them from your computer to our S3 instance.

@QuincyLarson, @abhisekp has the data currently. So maybe he can only guide the best.
Uploading should be pretty straight as long as you can (maybe with help from Berkeley) create credentials for him with the correct scopes

But, do let me know if I can help in any way.

@raisedadead Thanks for the idea! I've created an S3 key especially for @abhisekp and sent it to him.

Hi there
Glad to see such progress :) @abhisekp, the rooms downloaded are on the same link I shared sometime ago: https://docs.google.com/spreadsheets/d/1HSRL-HTOREYF86mNDczNp7XNA5Tuo4TWP4AiMYyZDU8/edit#gid=0
It dates back to October though, so probably better to realign the data. I actually picked important and active rooms so there is for sure lots of new stuff. Did you automate downloading all rooms or do you have to do that separately? Let me know if you need help. Cheers

PS: Here is a link for the downloaded rooms: https://we.tl/lcBU6Cs7E4
12 rooms on October 21. It s just a weTransfer but you could use Github, AWS or other

gitter-archive-cli Released :tada:

Archive gitter communities worry-free :smiley:

Feature

  • :zap: Fast download using multiple gitter tokens
  • :hand: :gear: Pause and Resume feature (CTRL + C to end the process) and on start, it resumes from where it left off (as per auto-generated file gitterarchive-settings.json).
  • Archive and No archive room list using wildcard pattern matching. (example below)

How to use

# install globally
$ npm i -g gitter-archive-cli

Create a directory where you want to save the gitter community archives.

Create a .env file and .gitterarchiverc.json as per example below, in that directory.

NOTE: noArchiveList takes precedence over archiveList.

Now simply start the archiving process using gitter-archive command. :smile:

Example

.env

# Gitter Tokens
GITTER_TOKEN_username1=
GITTER_TOKEN_username2=
GITTER_TOKEN_username3=


.gitterarchiverc.json

{
  "rooms": {
    "noArchiveList": [
      "FreeCodeCamp/HelpJavaScript",
      "FreeCodeCamp/FreeCodeCamp",
      "FreeCodeCamp/Help",
      "FreeCodeCamp/HelpFrontend",
      "FreeCodeCamp/HelpBackend",
      "FreeCodeCamp/[a-m]*"
    ],
    "archiveList": [
      "FreeCodeCamp/*"
    ]
  },

  "groups": {
    "enabled": [{
      "uri": "FreeCodeCamp",
      "id": "57542cf4c43b8c6019778297"
    }],
    "disabled": []
  }
}


Run :running_man:

$ gitter-archive

If it stops abruptly, then simply run the above command again and it will auto resume from where it left off. :white_check_mark:


some known bugs

if you see Error Response 429 status, wait for one or two minutes and don't end the process. It will work fine after a few minutes.


Sidenote: It works seamlessly in C9.io


// cc: @evaristoc @ladybugtju

@abhisekp Awesome! If this works well, can you go ahead and set it to run non-stop until all of our rooms are backed up? Then we can zip that up and push it to S3.

@abhisekp Let the magic happen :) Cheers

@QuincyLarson @ladybugtju Thanks. The magic is almost complete :smirk:
:point_right: https://github.com/FreeCodeCamp/gitter-history


Github has a strict file size limit of 100 MB but gives a warning at 50 MB. I was able to push a 53 MB file (FreeCodeCamp/HelpFrontend room archive) .
https://help.github.com/articles/what-is-my-disk-quota/


The only remaining rooms are

  • FreeCodeCamp/Help (messageCount: 1368452) (291 MB uncompressed)
  • FreeCodeCamp/HelpJavaScript
  • FreeCodeCamp/FreeCodeCamp

These are the most largest rooms.


Update

Pushed FreeCodeCamp/Help room after archiving it using zip with maximum compression level of 9.
File size: 62 MB (compressed)

@abhisekp Amazing work. So now that these rooms are in version control, do you think we're safe to start deleting these rooms?

As far as the larger rooms, we might want to break them up into separate files by date. For example: FreeCodeCamp/FreeCodeCamp August 1 2015 - November 31 2015

This will make it easier for us to continue pushing updated archives to them.

This will be a huge public dataset and I imagine a lot of people will be interested in it. We can publish this on Kaggle once it's ready :)

@abhisekp how is this process going? Have you managed to do a full archive of our Gitter rooms? Can we start closing rooms that we don't plan on keeping now?

Our plan is to:

  • [ ] download ALL messages from FreeCodeCamp/Help
  • [ ] download ALL messages from FreeCodeCamp/HelpJavaScript
  • [ ] download ALL messages from FreeCodeCamp/FreeCodeCamp
  • [ ] download messages from all other rooms that occurred after Dec 24th

Once all these messages are in the https://github.com/FreeCodeCamp/gitter-history repo, I will go through and delete all rooms except for those on our official rooms list. All of these rooms already have deprecation messages and aren't being used anyway.

Campers can still create their own unofficial Gitter rooms, but freeCodeCamp's chatroom structure will be clean and simple, with minimal ambiguity about which rooms to go to.

Then we will use https://gitter.im/FreeCodeCamp/home as our main entryway to our chat rooms.

Sorry @QuincyLarson asking why FreeCodeCamp/FreeCodeCamp?

@evaristoc sounds like the answer is

...freeCodeCamp's chatroom structure will be clean and simple, with minimal ambiguity about which rooms to go to. - https://github.com/freeCodeCamp/freeCodeCamp/issues/8418#issuecomment-282459257

A room called just freeCodeCamp isn't really descriptive of what the room does, per se.

@QuincyLarson @erictleung for a small project I was planning to do I downloaded almost all messages from the main room. Data is until yesterday.
That is about 2.5Gb of data without compression (if the data I downloaded is correct). Is this something that would require to be added to the repo?

@erictleung good point but I understand these are the list of official rooms. Freecodecamp room is still there:
https://github.com/freeCodeCamp/freeCodeCamp/issues/8418#issuecomment-247755458

Is it a change in that list I am not aware of?

@erictleung there's no way to rename a Gitter room. Otherwise we would indeed rename that chat room to "general" or "casual".

@evaristoc yes - that would be awesome. If you pull all of freecodecamp/freecodecamp be sure to add it to https://github.com/FreeCodeCamp/gitter-history

OK - all the rooms that were deprecated were backed up afterward. I haven't heard anything from @abhisekp recently so I've gone ahead and deleted the deprecated rooms. Thanks everyone!

New rooms scheduled for archiving:

  • FreeCodeCamp/NewYorkCity (id: 5593982115522ed4b3e3263f)
  • FreeCodeCamp/CoreTeam

Currently exploring @abhisekp approach to archiving before initiating the process of downloading the data:

https://github.com/freeCodeCamp/freeCodeCamp/issues/8418#issuecomment-238083019
https://github.com/freeCodeCamp/freeCodeCamp/issues/8418#issuecomment-269025399
https://github.com/freeCodeCamp/freeCodeCamp/issues/8418#issuecomment-258058263

@QuincyLarson :

I was trying to use the great package made by @abhisekp: https://www.npmjs.com/package/gitter-archive-cli but unfortunately it didn't work on my computer. It is giving a 404 error that I am finding hard to debug.

I will likely work this on Python. My current code seems to be outdated though. Apparently I am also affected by the rate limits with an 459 error - didn't happen before, I managed to download
messages over the limit in March 2017 with a simpler code.

If it works, I will make my Python code available. Hoping that will help to find a standard code to approach chatroom-archiving in the future.

This is a previous message by @abhisekp to be kept here as reference: https://github.com/freeCodeCamp/freeCodeCamp/issues/8418#issuecomment-252860430

@evaristoc please continue on the new thread linked above.

Was this page helpful?
0 / 5 - 0 ratings