Git Product home page Git Product logo

websiteone's Introduction

AgileVentures WebSiteOne

Maintainability Test Coverage

Legacy code

This Ruby on Rails app powers the AgileVentures main developer site, showing lists of active projects, members, upcoming events, past event recordings, as well as information for how to get involved.

Installation

See the Project Setup documentation

Contributing

See our Contribution guidelines

History

in 2011, inspired by Dave Patterson and Armando Fox's UCBerkeley Software Engineering Massive Open Online Class (MOOC), Sam Joseph had the idea for a global online pairing community where everyone worked together to use the agile development methodology to deliver solutions to IT charities and non-profits. Thomas Ochman joined as project manager and led the development of the WebSiteOne codebase with Bryan Yap serving as technical lead. Initialy Sam was the notional "client", not getting involved in the tech development, and many different volunteers contributed code. During this phase the events, projects and user systems were developed. There was also a blog like articles system. Yaro Appletov led a tight integration with Google hangouts to allow recordable hangouts to be launched from the site and report back telemetry.

Later Raoul Diffou joined to take over as project manager as Thomas and Bryan had less and less time for the project. Sam took over the technical lead role in 2016 and also stared pairing with Raoul as project manager. Later in 2016 as Raoul had less and less time Sam became the sole project manager. During the course of 2016 Sam and long time AV contributor Michael revised the events framework, and replaced the articles system with a Premium payments framework intended to help ensure AV was sustainable into the future. In 2017 Google withdrew their Hangouts API breaking various functionality in the site. Sam and Lokesh Sharma replaced the API integration with manual updates, and Sam pulled in the agile-bot node microservice so that WSO now communicates directly with Slack to alert members about new online meetings and their recordings. In 2022 AV contributor Matt Lindsey did some cleanup by replacing the mercury document editor with active text and updated the asset pipeline.

Approaches

  • Agile Development
    • In the past we had regular sprints, offered daily standups, and got regular feedback from end users. We have discussions on Slack and occasional meetings now.
  • Behaviour Driven Development (BDD)
    • We use Cucumber and RSpec testing tools that describe the behaviours of the system and its units
    • We try to work outside in, starting with acceptance tests, dropping to integration tests, then unit tests and then writing application code
    • We do spike application code occasionally to work out what's going on, but then either throw away the spike, or make sure all our tests break before wrapping the application code in tests (by strategically or globally breaking things)
    • Where possible we go for declarative over imperative scenarios in our acceptance tests, trying to boil down the high level features to be easily comprehensible in terms of user intention
  • Domain Driven Design (DDD)
    • Sometimes we switch to inside out, trying to adjust the underlying entity schema to better represent the domain model
  • Self-documenting code
    • We prefer executable documentation (tests) and relatively short methods where the method and variable names effectively document the code

Reading material

Admin rake tasks

rake fetch_github_last_updates
rake fetch_github_languages
rake fetch_github_content_for_static_pages
rake fetch_github_readme_files
rake fetch_github_commits
rake karma_calculator
rake geocode:all
rake user:create_anonymous
rake vcr_billy_caches:reset

Updating the live static pages (like 'About' and 'Getting Started') requires the administrator to run rake fetch_github:content_for_static_pages.

websiteone's People

Contributors

abdellani avatar alejandrobabio avatar aonomike avatar bryszard avatar christophermlne avatar dannybusiness avatar decareano avatar dependabot-preview[bot] avatar dependabot[bot] avatar diraulo avatar erpe avatar florence-njeri avatar johnnymo87 avatar jon-engelbert avatar marianmosley avatar mattlindsey avatar mattwr18 avatar mtc2013 avatar nickschimek avatar nikitaavvakumov avatar nisevi avatar norbertszivos avatar peteboucher avatar sampritipanda avatar sidhene avatar tansaku avatar techsailor avatar tochman avatar yarospace avatar yggie avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

websiteone's Issues

Add labels to a story even if you don't have write access to the repo

As a user without write access to a repo
When I raise a github issue
I would like to be able to label the issue

My thinking is this:

  • hook into github to detect the issue was created
  • receiver parses the issue to see if there are any embedded labels (in some syntax TBD)
  • receiver updates the issue to add the labels "properly", possibly removing them from the body of the issue at the same time.

Needs investigation to establish if this is even possible...

Do we need the @channel tag for every pairing in pairing_notifications channel

I realize the idea it to get notified of every pairing, but you get that with or without the channel tag. The channel tag just marks the new message more forcefully. I think the channel is a good idea, and gives a good sense of the amount of pairing going on, however many may drop the channel because of the channel tag since it does a forceful notification of every single chat.

Adding hangout recordings to the site is a bit flaky

Copied from https://www.pivotaltracker.com/projects/982890/stories/112965677

The Refugee Tech project initiation meeting does not appear on the project page:
http://www.agileventures.org/projects/refugee_tech#video
I understand from @tansaku that this feature can be a bit flaky anyway so perhaps there is an intermittent bug lurking there....

The second meeting today again does not appear, so unless it is operator error, there is something dodgy in general or maybe specifically with this project?

User preference for 'Hire Me' button can be bypassed

imported from https://www.pivotaltracker.com/story/show/79861342

As an AG user
In order to not receive messages through the Hire Me button
I would like to have my preference setting respected

Somewhat related to the 'hire me' spam bug #76244298

Currently the controller will receive the hire me form params and send and email even if the user has chosen not to place a hire me button on their profile page.

The users controller needs to be updated to guard against this: https://github.com/AgileVentures/WebsiteOne/blob/develop/app/controllers/users_controller.rb#L16

[EPIC] consolidate all documentation around CONTRIBUTING.md

we have legacy documentation in the wiki and in the AV project pages. Let's pull all of that into the repo (docs dir?) and clear out all other locations with links to the canonical CONTRIBUTING.md start point ...

We have documentation on a number of subjects that needs sorting. Let's deal with one at a time:

It looks like the wiki has been largely cloned to the AV site or vice versa, so for all the above we need to check both locations

Projects index page redesign

Imported from https://www.pivotaltracker.com/story/show/79660056

Story
As an agile ventures user
So that I can (find a new | create a new | find my | promote my) project(s)
I would like to see a fully featured projects index view

Supporting documents
Feature request on AG: http://agileventures.org/projects/websiteone/documents/project-index-page-ux-proposal
Direct link to wireframes: https://drive.google.com/file/d/0B9FqKjpP8_MUQXBlcWZ2R3JzV2c/edit?usp=sharing

Tasks:

  • No tab for current users projects
  • No search
  • No featured project

Ability to connect scheduled events to a project

As an event planner,
In order to connect my event's hangout recording to my project,
I would like to set a project connection in the Event setup interface.

Right now, when an event is scheduled and started from the Event#show page, no project_id is being assigned to the EventInstance instance, thus it is not being shown on the Videos tab for the project. I would like that to happen. One idea is that we can allow who ever is planning an event to connect it to a project on the Event#create or #edit

AgileVentures - thoughts on moving forward

Developers

I think for new developers, there are a few barriers to entry:-

  • I don't know what skills the projects need so I don't know if I could help. If you look at http://up-for-grabs.net/#/tags/ you can zero in on the projects that match your skillset so you find ones more "relevant" to you.
  • My experience with the technology is a bit shakey so I'm afraid I will commit to something beyond my skillset. Some projects tag issues with an indicaton of how easy/difficult they are - e.g. https://github.com/influxdata/influxdb/labels/status%2Fhelp-wanted - so maybe I start with some easy/quick issues to get my feet wet, get some confidence, and move on from there.
  • I'm scared of breaking things - I don't know the project, maybe I'm new to this whole contributing to open source game. Perhaps an experienced team member could guide me through my first issue or two? Maybe there is a sample project for newbies to play around with and contribute to and see how it all works, somewhere they don't need to be afraid of contributing.
  • I can't commit to pairing - My availability is all over the place, I'm not sure I can commit to meeting up online with someone at certain times, or my connection is really bad or many other reasons I can't pair, or I just don't like the idea of it. Maybe I know the benefits of pairing and I would encourage people to try it but maybe it is emphasised too much and I want to start off without pairing, submtting pull requests for someone to review. Basically not wanting or not being able to pair shouldn't be a barrier to contributing to a project.
  • Limited technologies. There seems to be a clear "bias" towards Ruby here, which is fair enough, but what if I am an awesome .NET developer or node.js developer and would like to work on a project using those skills - is this possible? Is AV "meant" to be a ruby shop or is that just the way it has panned out?
  • I can't easily find projects I'm interested in - I want to find projects particularly about saving badgers, or the most active projects or the newest projects, or the "hottest" projects (most ractivity recently? Most developers joinging recently?) - there's no way to do that, I just have to trawl the pages.

Charities

You need to attract new business from charities in order to continue to grow, so you need to make charities want to use you, which means it must be easy for them to find you and find what you do and be confident you can meet their needs.

Scenario - I am a charity looking to have a site made, I google for and go to agileventures.org

The first thing I see is stuff about pairing and learning to code and developing my team skills. But I am not a developer, I am a charity - this site seems focused on coders, not on businesses looking for a site to be developed. It doesn't seem relevant to me at all, so I go elsewhere...

Lets say I get past the front screen because maybe you are relevant after all. I want to see what you guys have been doing to gauge if you are any good or not. Where do I go? hmm, I click into "Projects" as the most likely place to get a feel for what you do and...I get a random list of projects.

I really want to see one of the actual sites in action, so I pick one at random, say LocalSupport, (Note, I tried a few other at random such as MetPlus, but I couldn't a link to the site at all in the ones I tried!) in the hope that I will get a link to click on to the actual site. Hmm..nothing obvious - though I notice under the title of the site, the page says "VAH's Local Support site is at www.harrowcn.org.uk" but this isn't even a clickable link, so I have to copy and paste it....oh wait, further down the page there is an actual clickable link to the LocalSupport site, so I can finally see one of the sites you have developed.

Boy that was hard work! Other projects don't even seem to have any links - I have no idea (as a developer or as a potential customer) if these sites are live at all, if they are just at the early alpha stage, if they have even gotten off the ground.

What I would like to see is a very obvious link, front and centre, to the current production site. Regardless of whether the site is live or not, I would also like a link to the latest deployment of the development/UAT instance so I can see what it looks like - for not-yet-live sites I can now see what they are about and for currently live sites, I can see what's due to be released soon presumably.

It would be nice to see a thumbnail of the site on the project page also.

I know you said in the meeting that you didn't think a showcase was that important at the moment, but if you want to attract new customers then you need to make it more customer-friendly and a showcase is one way to do that - or, for now, just spruce up the project pages and make them more "discoverable" and easy to see what they look like.

Premium Services

There are two potential sources of revenue here - the charities and the developers:

Charities

Free service gets people working on your site as and when, so don't hold your breath for it to be developed...

Paid for at different levels can offer things like:

Your project is promoted on the site so hopefully will attract more developers
We could offer to pay the developers a small amount, thus likely attracting more people to it. Not sure how you would work out how to pay them - per commit? per lines of code? per feature? If stories were assigned points then a fee per story point? So a 1 point story gets you X, a 2 point story gets you 2X etc?
We could specifically direct developers to your project
We could promote your charity (as opposed to the project itself) since after all the website is a means to an end - the charity itself is the main thing.

Developers

This is a bit tricky since the developers are already giving their free time to help out on projects and now you want some money from them too? Hmmm...

The "fee" would have to be quite small methinks because of said donation of time to projects, but the sorts of things you could offer are:

They get first dibs on any paid for work - the premium members are made aware of it for a period of time before it is opened out to everyone,
They get some kind of ranking on your site in the members directory
Other members can "endorse" their skills (like on LinkedIn)
Maybe people who have worked with them will write testimonials about them on their member page (can help them get other paid work)
I think the area to concentrate on here would be helping the developers to promote themselves in order to get paid for work elsewhere, since we all need to make a living right?

Provide audio only stream of meetings

Two aspects to this:

  1. While the video is livestreaming
  2. After it is finished and published to youtube - is there a way to provide an audio only stream?
    (note this is distinct from the other issue which was about publishing as a podcast)

Another option might just be to identify existing apps that people could use to live stream audio only or stream the audio only after it has been published

Show local time in events/index view

importing from https://www.pivotaltracker.com/story/show/82968236 (requested by amy-lightholder)

As a user, I would like to see the time for listed events in local as well as universal time

Currently, the Show view for events displays the local time but the Index view does not. This is confusing for users, especially during the transition between standard and daylight savings time, which happens on different dates in in different countries. This can be partially solved by displaying the local time in the index view.

Project description not taking into account the github repository

Imported from https://www.pivotaltracker.com/story/show/108642934

When you go to the page:
http://www.agileventures.org/projects?page=6

You can see the MetPlus project and it says there are no commits related with the project, despite the fact that we currently have almost 300 commits on it.

Information shown in the website:

MetPlus
11 19 0
Status: ACTIVE
Created 3 months ago by Thomas Ochman
MetPlus is a non-profit that aim to help the people of Detroit, and hopefully Michigan, to find a job that suits them. The vision of the client is to create one application(PETS) that would allow the users to find the a job and for companies to...

User's index visual improvements for long nicknames

As you can see in this screenshot:
now_chrome

long nicknames are breaking the layout in large screen.
You can easily fix this setting: .media-body { display: block; max-width: 100%; }
Here is the result on chrome:
after_chrome

You can also visualize the whole nickname changing the .index-summary class:
.index-summary { overflow: auto; word-wrap: break-word }
and here is the result:
last_chrome

I would make a pull request but i don't really know which .css i should change ๐Ÿ˜…

[EPIC] Project list sort order

As a user
When I am on the Projects page
I would like to see the projects in an order that makes sense.

Currently they seem to be in a random order - is it most active? Longest running?
At the moment it just seems random - I would like the order to be obvious (if most active then show me some activity indicator so it is obvious) or indeed let me sort them however I want

intermittent js failure?

 Scenario: Insert media model rejects badly formatted youtube links                                      # features/documents.feature:170
    Given I am logged in                                                                                  # features/step_definitions/user_steps.rb:19
    And I am using the Mercury Editor to edit document "Guides"                                           # features/step_definitions/mercury_steps.rb:27
    And I am focused on the "document body" within the Mercury Editor                                     # features/step_definitions/contained_search_steps.rb:33
    And I click on the "Insert Media" button within the Mercury Toolbar                                   # features/step_definitions/contained_search_steps.rb:33
    And I fill in "YouTube URL" with "https://www.youtube.io/watch?v=foo" within the Mercury Editor Modal # features/step_definitions/contained_search_steps.rb:33
    And I click "Insert Media" within the Mercury Editor Modal                                            # features/step_definitions/contained_search_steps.rb:33
    Then I should see "is invalid" within the Mercury Modal                                               # features/step_definitions/contained_search_steps.rb:33
      expected to find text "is invalid" in "Insert Media (images and videos)ร— Images URL Videos YouTube URL Vimeo URL Options Alignment Float Width Height" (RSpec::Expectations::ExpectationNotMetError)
      ./features/step_definitions/basic_steps.rb:167:in `/^I should( not)? see "([^"]*)"$/'
      ./features/step_definitions/contained_search_steps.rb:41:in `block (2 levels) in <top (required)>'
      ./features/step_definitions/contained_search_steps.rb:41:in `/^(.*) within the (.*)$/'
      features/documents.feature:177:in `Then I should see "is invalid" within the Mercury Modal'
    And the Mercury Editor modal window should be visible                                                 # features/step_definitions/mercury_steps.rb:61

Failing Scenarios:
cucumber features/documents.feature:170 # Scenario: Insert media model rejects badly formatted youtube links

New Directions for WSO

From Slack Chat:
Sam Joseph [9:16 AM]
@diraulo: so continuing our discussions about WSO we could really use someone to take an active project management role here

we've also got a question about direction
Free Code Camp seem to be making a big splash with things like this: http://freecodecamp.com/stories

but there's is much more accessible and the pictures of people really help

Sam Joseph [9:17 AM]
of course FCC is a different proposition - start from nothing and work your way up where as we are currently focused on people who are already programmers to start with

We have a number of directions we could take:

  1. Adjust AgileVentures to focus on helping those with zero programming experience
  2. Do a new version of WSO but still focused on experienced programmers, but with a tighter focus that the current site
  3. leave the current site as it is and focus on a separate site like Web site two that focuses on bringing in charities and non-profits
  4. something else, different direction entirely ...
  5. focus on upgrading the existing site by improving performance, removing some features and smoothing the pair programming event stuff that the MOOCers are about to use ...

Phantomjs version error when executing cucumber tests

Trying to run the cucumber tests locally, I get:
Could not find an executable 'phantomjs' that matched the requirements '~> 1.8', '>= 1.8.1'. Found versions were {"/usr/local/bin/phantomjs"=>"2.1.1"}. (Cliver::Dependency::VersionMismatch) /Users/tony/.rvm/gems/ruby-2.2.2/gems/cliver-0.3.2/lib/cliver/dependency.rb:151:inraise_version_mismatch!'

Does it have to be a 1.8.x version or can I upgrade to 2.1.1?

tests failing locally for me on OSX Yosemite

(::) failed steps (::)

Unable to find css "#liveHOA-placeholder iframe" (Capybara::ElementNotFound)
./features/step_definitions/hangout_steps.rb:2:in `/^I should see hangout button$/'
features/hangout.feature:27:in `Then I should see hangout button'

Unable to find css "#liveHOA-placeholder iframe" (Capybara::ElementNotFound)
./features/step_definitions/hangout_steps.rb:2:in `/^I should see hangout button$/'
features/hangout.feature:103:in `Then I should see hangout button'

Failing Scenarios:
cucumber features/hangout.feature:25 # Scenario: Create a hangout for a scrum event
cucumber features/hangout.feature:100 # Scenario: Display hangout button on a project's page

Make Learn/Code/Pair/Grow content easier to find

The site has some obvious menus - the main menu on every page, and the Projects menu for example.
But not all pages can be navigated to (or not obviously so) from these menus.
I was completely unaware of all the good content here for example:
http://www.agileventures.org/pair

Why? Because it is "hidden" in the animated "PAIR" image on the front screen.
When I go to the front page, I see four giant circles - it is not obvious that these do anything.
I hover over one and it does a nice animation and changes the words. Since I'm only skimming the site, I don't necessarily notice the "Read more" button (which I appreciate is relatively big) because I am not expecting a link inside this image.

So two suggestions:

  • make the entire image a link so I get a pointer cursor when I hover so it is obvious that this is a link
  • Make the content available via a menu option - it should be easy (and possible) to get to any of the main sections of the site from anywhere - you have a whacking great menu bar at the top of every page, so make use of it!

some local cucumber failures

was checking @alejandrobabio 's rm ytube branch locally and I get these failures in cucumber:

(::) failed steps (::)

Unable to find css "#liveHOA-placeholder iframe" (Capybara::ElementNotFound)
./features/step_definitions/hangout_steps.rb:2:in `/^I should see hangout button$/'
features/hangout.feature:27:in `Then I should see hangout button'

Unable to find css "#liveHOA-placeholder iframe" (Capybara::ElementNotFound)
./features/step_definitions/hangout_steps.rb:2:in `/^I should see hangout button$/'
features/hangout.feature:103:in `Then I should see hangout button'

expected to find text "00:00 15/04" in "Anders Persson My account Log out About Projects Members Articles Events Upcoming events Past scrums Past events Getting started Current Projects hello world hello mars Supporters Become a supporter Projects hello world hello world greetings earthlings Start Live Hangout ร— Info You should join this project before you can start the hangouts Close Project status: ACTIVE Created less than a minute ago by Tester Person Join Project Connected on not linked to GitHub not linked to PivotalTracker Members (0) No members in project hello world ร— The hello world team About Documents (0) Videos (3) Activity (0) Project content missing :( A compelling pitch can make your project more appealing to potential collaborators. Please edit project details to add pitch content. No documents can be found for project hello world PP on hello world - feature: 2 Latest Project videos Video Host Published PP on hello world - feature: 2 John Doe 00:02 14/04 PP on hello world - feature: 1 John Doe 00:01 14/04 PP on hello world - feature: 0 John Doe 00:00 14/04 No PivotalTracker Stories can be found for project hello world Learn More About Us Getting Started Dashboard Social Facebook Twitter Our Sponsors Makers Academy AirPair Becoming a sponsor AgileVentures - Crowdsourced Learning Contact us Send a traditional email to [email protected]." (RSpec::Expectations::ExpectationNotMetError)
./features/step_definitions/basic_steps.rb:161:in `block (2 levels) in <top (required)>'
./features/step_definitions/basic_steps.rb:160:in `each'
./features/step_definitions/basic_steps.rb:160:in `/^I should( not)? see:$/'
features/project_videos.feature:24:in `And I should see:'

Failing Scenarios:
cucumber features/hangout.feature:25 # Scenario: Create a hangout for a scrum event
cucumber features/hangout.feature:100 # Scenario: Display hangout button on a project's page
cucumber features/project_videos.feature:16 # Scenario: Project show page renders a list of videos

CI is fine - so assume I am missing something on my local system ...

Remove mailer Credentials from git

The mailer credentials should be removed from development.rb and added in intializers like setup_mailer.rb but add setup_mailer.rb.sample.

Publish meetings as podcasts

Is it possible to automate doing this?
The workflow would be:

  • Livestream ends and is automatically posted to youtube (which happens now)
  • The audio is extracted and published as an audio only podcast into iTunes (possibly others?)
  • This video is published as a video podcast into iTunes (possibly others?), though this is perhaps less important since there are already ways to download youtube videos to your device

Post story point votes into slack

As a user
when I vote on a story
the story link and vote should be automatically posted to slack

This could be per person voting or perhaps once all votes are in and the points assigned to the story then a summary is posted to slack?
The voting would take place inside the PM tool (in chat?) or perhaps some external tool used by all projects (planningpoker? similar functionality added to WSO?) if there is no way to support the "popular" PM tools like Pivotal, waffle, JIRA....

junk in the rspec log

Would like to get this all cleaned out:

$ bundle exec rspec -fp

Randomized with seed 43332
..................................................................................................-- add_column(:events, :start_time, :time)
   -> 0.0253s
-- add_column(:events, :event_date, :date)
   -> 0.0008s
-- add_column(:events, :end_time, :time)
   -> 0.0019s
-- remove_column(:events, :start_datetime, :datetime)
   -> 0.0053s
-- remove_column(:events, :duration, :integer)
   -> 0.0003s
.-- add_column(:events, :start_time, :time)
   -> 0.0005s
-- add_column(:events, :event_date, :date)
   -> 0.0003s
-- add_column(:events, :end_time, :time)
   -> 0.0003s
-- remove_column(:events, :start_datetime, :datetime)
   -> 0.0004s
-- remove_column(:events, :duration, :integer)
   -> 0.0003s
-- add_column(:events, :start_datetime, :datetime)
   -> 0.0005s
-- add_index(:events, :start_datetime)
   -> 0.0202s
-- add_column(:events, :duration, :integer)
   -> 0.0008s
-- remove_column(:events, :start_time, :time)
   -> 0.0004s
-- remove_column(:events, :event_date, :date)
   -> 0.0003s
-- remove_column(:events, :end_time, :time)
   -> 0.0003s
............................................................................................../Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:24: warning: already initialized constant Newsletter::CHUNK_SIZE
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/app/models/newsletter.rb:15: warning: previous definition of CHUNK_SIZE was here
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:25: warning: already initialized constant Newsletter::SEND_AS
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/app/models/newsletter.rb:14: warning: previous definition of SEND_AS was here
./Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:24: warning: already initialized constant Newsletter::CHUNK_SIZE
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:24: warning: previous definition of CHUNK_SIZE was here
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:25: warning: already initialized constant Newsletter::SEND_AS
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:25: warning: previous definition of SEND_AS was here
..../Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:42: warning: already initialized constant Newsletter::SEND_AS
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:25: warning: previous definition of SEND_AS was here
./Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:42: warning: already initialized constant Newsletter::SEND_AS
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:42: warning: previous definition of SEND_AS was here
./Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:42: warning: already initialized constant Newsletter::SEND_AS
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:42: warning: previous definition of SEND_AS was here
./Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:46: warning: already initialized constant Newsletter::CHUNK_SIZE
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:24: warning: previous definition of CHUNK_SIZE was here
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:47: warning: already initialized constant Newsletter::SEND_AS
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:42: warning: previous definition of SEND_AS was here
........*.....................................................................................The user session path is /users/sign_in
.The user session path is /users/sign_in
.The user session path is /users/sign_in
.The user session path is /users/sign_in
.The user session path is /users/sign_in
...............................................................................Got what I came for from https://github.com/AgileVentures/WebsiteOne
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Andres Grimes stats are okay
Tommie Terry stats are okay
Got what I came for from https://github.com/AgileVentures/WebsiteOne
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Tommie Terry stats are okay
Andres Grimes stats are okay
.Got what I came for from https://github.com/AgileVentures/WebsiteOne
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Domenick Feest stats are okay
Mohamed Toy stats are okay
Got what I came for from https://github.com/AgileVentures/WebsiteOne
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Mohamed Toy stats are okay
Domenick Feest stats are okay
.Got what I came for from https://github.com/AgileVentures/WebsiteOne
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Alene Ankunding stats are okay
Liam Kassulke stats are okay
Got what I came for from https://github.com/AgileVentures/WebsiteOne
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Liam Kassulke stats are okay
Alene Ankunding stats are okay
.Got what I came for from https://github.com/AgileVentures/WebsiteOne
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Charles Tillman stats are okay
Jocelyn Huel stats are okay
Got what I came for from https://github.com/AgileVentures/WebsiteOne
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Jocelyn Huel stats are okay
Charles Tillman stats are okay
.Got what I came for from https://github.com/AgileVentures/WebsiteOne
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Emiliano Leannon stats are okay
Chandler Corkery stats are okay
Got what I came for from https://github.com/AgileVentures/WebsiteOne
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Chandler Corkery stats are okay
Emiliano Leannon stats are okay
.Got what I came for from https://github.com/AgileVentures/WebsiteOne
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Jeanette Hills stats are okay
Adalberto Daniel stats are okay
Got what I came for from https://github.com/AgileVentures/WebsiteOne
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Adalberto Daniel stats are okay
Jeanette Hills stats are okay
................................................................................................................................../Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/jobs/send_newsletter_spec.rb:7: warning: already initialized constant Newsletter::CHUNK_SIZE
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/models/newsletter_spec.rb:46: warning: previous definition of CHUNK_SIZE was here
./Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/jobs/send_newsletter_spec.rb:7: warning: already initialized constant Newsletter::CHUNK_SIZE
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/jobs/send_newsletter_spec.rb:7: warning: previous definition of CHUNK_SIZE was here
./Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/jobs/send_newsletter_spec.rb:7: warning: already initialized constant Newsletter::CHUNK_SIZE
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/jobs/send_newsletter_spec.rb:7: warning: previous definition of CHUNK_SIZE was here
./Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/jobs/send_newsletter_spec.rb:7: warning: already initialized constant Newsletter::CHUNK_SIZE
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/jobs/send_newsletter_spec.rb:7: warning: previous definition of CHUNK_SIZE was here
./Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/jobs/send_newsletter_spec.rb:7: warning: already initialized constant Newsletter::CHUNK_SIZE
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/jobs/send_newsletter_spec.rb:7: warning: previous definition of CHUNK_SIZE was here
./Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/jobs/send_newsletter_spec.rb:14: warning: already initialized constant Newsletter::CHUNK_SIZE
/Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/jobs/send_newsletter_spec.rb:7: warning: previous definition of CHUNK_SIZE was here
...............................invalid keys :visible, should be one of :text, :visible, :between, :count, :maximum, :minimum, :exact, :match, :wait
...............................................................................................................................................................................An expectation of :includes was set on nil. Called from /Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/controllers/projects_controller_spec.rb:46:in `block (3 levels) in <top (required)>'. Use allow_message_expectations_on_nil to disable warnings.
................................................................................................................

Pending: (Failures listed here are expected and do not affect your suite's status)

  1) events/new user is not signed in should redirect to sign in and render a flash error
     # Temporarily skipped with xit
     # ./spec/views/events/new.html.erb_spec.rb:18


Deprecation Warnings:

Using `should` from rspec-expectations' old `:should` syntax without explicitly enabling the syntax is deprecated. Use the new `:expect` syntax or explicitly enable `:should` with `config.expect_with(:rspec) { |c| c.syntax = :should }` instead. Called from /Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/routing/newsletters_routing_spec.rb:22:in `block (3 levels) in <top (required)>'.

Using `stub` from rspec-mocks' old `:should` syntax without explicitly enabling the syntax is deprecated. Use the new `:expect` syntax or explicitly enable `:should` instead. Called from /Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/spec/views/static_page/show.html.erb_spec.rb:24:in `block (2 levels) in <top (required)>'.


If you need more of the backtrace for any of these deprecations to
identify where to make the necessary changes, you can configure
`config.raise_errors_for_deprecations!`, and it will turn the
deprecation warnings into errors, giving you the full backtrace.

2 deprecation warnings total

Finished in 1 minute 28.77 seconds (files took 10.27 seconds to load)
836 examples, 0 failures, 1 pending

Mercury Editor modal window not showing

Craig got 2 cucumber failures on his new WebsiteOne install - on Ubuntu Trusty.

Scenario: A user can insert an image # features/documents.feature:131
  Given the document "Guides" has a child document with title "Howto" # features/step_definitions/projects_steps.rb:54
  And I am logged in # features/step_definitions/user_steps.rb:19
  And I am using the Mercury Editor to edit document "Howto" # features/step_definitions/mercury_steps.rb:27
  And I am focused on the "document body" within the Mercury Editor # features/step_definitions/contained_search_steps.rb:33
  When I click on the "Insert Media" button within the Mercury Toolbar # features/step_definitions/contained_search_steps.rb:33
  Then the Mercury Editor modal window should be visible # features/step_definitions/mercury_steps.rb:62
  expected to find css ".mercury-modal" but there were no matches (Capybara::ExpectationNotMet)
  ./features/step_definitions/mercury_steps.rb:63:in `/^the Mercury Editor modal window should (not |)be visible$/'
  features/documents.feature:137:in `Then the Mercury Editor modal window should be visible'

Accept JIRA, waffle, and links in project attributes for project management tools

Imported from https://www.pivotaltracker.com/story/show/82015510

From Nick: " The OSRA project has recently transitioned to using JIRA rather than Pivotal Tracker for our project management. Since only Pivotal URIs are valid on AV, we cannot update the project page to reflect the change, and even if we could the page would remain hard-coded to display the text "OSRA on PivotalTracker". Is there any way to resolve this?"

NOTE
This does not include a separate JIRA tab similar to what we have for Pivotal Tracker

Vision for standups if there were no technical impediments

Just thinking out loud, what I notice is that fairly frequently we need to do a text scrum, and/or we have a scrum live, but people can only participate by text

In the ideal world the chat for the hangout would just be the slack chat - and recently we've used slack like that, but what we want to publish is not the video, but the transcript of the text chat ...

in the ideal world, unimpeded by any technical issues, we'd have something where everyone could participate whether in audio or text, and the text of the audio session would be recorded and storted etc.

I guess the high level user story is that I'd love the standups to be completely transparent in these ways:

  1. anybody can join by clicking link in slack or AV (we have this, but not autoupdated on website)
  2. full transcript available in real time and stored so anyone can browse now and in future
  3. doesn't matter if you are attending via text or via hangout, so link takes you to hangout or text environment as appropriate ...

junk in the cucumber log

we get this junk in the cucumber log - want to clean this all out:

$ bundle exec cucumber --format progress
[Coveralls] Using SimpleCov's 'rails' settings.
Using the default profile...
...............................................................................................................................................................DEPRECATION WARNING: Passing string argument to #within_window is deprecated. Pass window object or lambda. (called from /Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/features/step_definitions/articles_steps.rb:24)
........................................................................................................invalid keys :visible, should be one of :text, :visible, :between, :count, :maximum, :minimum, :exact, :match, :wait
...............................invalid keys :visible, should be one of :text, :visible, :between, :count, :maximum, :minimum, :exact, :match, :wait
.................................................................................................................................................................................................................................................................................................................F-    HTML screenshot: /Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/tmp/capybara/screenshot_2014-02-03-07-10-06.348.html
    Image screenshot: /Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/tmp/capybara/screenshot_2014-02-03-07-10-06.348.png
..............................................................................F    HTML screenshot: /Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/tmp/capybara/screenshot_2016-02-03-15-07-05.190.html
    Image screenshot: /Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/tmp/capybara/screenshot_2016-02-03-15-07-05.190.png
..................................................invalid keys :visible, should be one of :text, :visible, :between, :count, :maximum, :minimum, :exact, :match, :wait
..........invalid keys :visible, should be one of :text, :visible, :between, :count, :maximum, :minimum, :exact, :match, :wait
....................................................................................................................................................................................................................................F-    HTML screenshot: /Users/tansaku/Documents/Github/AgileVentures/WebSiteOne/tmp/capybara/screenshot_2014-07-15-13-00-07.000.html
.............................................................................................................................................................................................................................................................................................invalid keys :visible, should be one of :text, :visible, :between, :count, :maximum, :minimum, :exact, :match, :wait
.invalid keys :visible, should be one of :text, :visible, :between, :count, :maximum, :minimum, :exact, :match, :wait
.invalid keys :visible, should be one of :text, :visible, :between, :count, :maximum, :minimum, :exact, :match, :wait
.invalid keys :visible, should be one of :text, :visible, :between, :count, :maximum, :minimum, :exact, :match, :wait
...........................................................................................Got what I came for from https://github.com/AgileVentures/WebsiteOne
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Bryan Yap stats are okay
.............Got what I came for from https://github.com/AgileVentures/WebsiteOne
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Bryan Yap stats are okay
........Got what I came for from https://github.com/AgileVentures/WebsiteOne
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Something is Wrooong!
Bryan Yap stats are okay
...................................................................................................................................................................................................-----............................................................................................................................................................................................


Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.