<!DOCTYPE html>
<html ng-app="spokenvote">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script data-require="jquery@*" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
    <script data-require="bootstrap@*" data-semver="3.1.1" src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
    <script data-require="d3@*" data-semver="3.4.6" src="//cdnjs.cloudflare.com/ajax/libs/d3/3.4.6/d3.min.js"></script>
    <script data-require="angular.js@*" data-semver="1.2.9" src="http://code.angularjs.org/1.2.9/angular.js"></script>
    <script src="http://code.angularjs.org/1.2.9/angular-cookies.min.js"></script>
    <script data-require="lodash.js@*" data-semver="2.4.1" src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js"></script>
    <link data-require="bootstrap-css@3.1.1" data-semver="3.1.1" rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" />
    <link data-require="select2@*" data-semver="3.4.5" rel="stylesheet" href="//cdn.jsdelivr.net/select2/3.4.5/select2.css" />
    <script data-require="select2@*" data-semver="3.4.5" src="//cdn.jsdelivr.net/select2/3.4.5/select2.min.js"></script>
    <!-- <script data-require="select2@*" data-semver="3.4.6-fix_leaking_clicks_2" src="//rawgithub.com/antstorm/select2/fix_leaking_clicks_2/select2.js"></script> -->
    <!-- <script data-require="angular-ui@*" data-semver="0.4.0" src="http://rawgithub.com/angular-ui/angular-ui/master/build/angular-ui.js"></script> -->
    <script src="angular-ui.js"></script>
    <!-- <script data-require="angular-ui@*" data-semver="0.4.0" src="https://raw.github.com/angular-ui/angular-ui/master/build/angular-ui.js"></script> -->
    <script data-require="angular-route@*" data-semver="1.2.9" src="http://code.angularjs.org/1.2.9/angular-route.js"></script>
    <script data-require="ui-bootstrap@*" data-semver="0.10.0" src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.10.0.js"></script>
    <script data-require="angular-resource@*" data-semver="1.2.9" src="http://code.angularjs.org/1.2.9/angular-resource.js"></script>
    <link href="http://ivaynberg.github.io/select2/select2-master/select2.css" rel="stylesheet" />
    <!-- <script src="//rawgithub.com/angular-ui/ui-select2/v0.0.4/src/select2.js"></script> -->
    <link rel="stylesheet" href="_modals.css" />
    <script src="spokenvote.js"></script>
    <script src="api.js"></script>
    <script src="session.js"></script>
    <script src="authentication.js"></script>
    <script src="voting.js"></script>
    <script src="root_controller.js"></script>
    <script src="dashboard_controller.js"></script>
    <script src="proposals_controller.js"></script>

    <link rel="stylesheet" href="fireflies-ng/fire.css"/>
    <script src="fireflies-ng/directive.js"></script>
    <script src="fireflies-ng/services.js"></script>
    <script src="fireflies-ng/controller.js"></script>

    <script data-main="fireflies/main.js" data-require="require.js@2.1.4" data-semver="2.1.4" src="//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.4/require.js"></script>
    <link rel="stylesheet" href="fireflies/css/jquery-ui/jquery-ui-1.10.4.custom.min.css" />
  </head>

  <body class="well">
    <div ng-controller="FireCtrl">
      <ng:include src="'fireflies-ng/fire.html'"></ng:include>
    </div>
  </body>

</html>

DashboardCtrl = ( $scope, $route, $location, $timeout, $templateCache, $http ) ->

  $scope.hubFilterSelect2 =
    minimumInputLength: 1
    placeholder: "<div class='fa fa-search'></div>" + "<span> Find your Group or Location</span>"
    width: '100%'
    allowClear: true
    placeholder: 'Spokenvote Select2 Testing'
    allowClear: true

    ajax:
      url: "data.json"
      dataType: "json"
      data: (term, page) ->
        text: term
        
    #ajax:
      #url: "http://staging.spokenvote.org/hubs.json"
      #dataType: "json"
      #data: (term, page) ->
        #hub_filter: term

      results: (data, page) ->
        results: data
  
    createSearchChoice: (term) ->
      id: term
      select_id: term
      text: '(Create New Item) ' + term
      
    escapeMarkup: (m) ->
      m  

    formatResult: (searchedHub) ->
      searchedHub.text
      #searchedHub.full_hub

    id: (obj) ->
      obj.select_id
      
    formatSelection: (searchedHub) ->
      alert "formatSelection has run, so I'm checking to see if I should be creating a new object."      
      searchedHub.text

App.controller 'DashboardCtrl', DashboardCtrl
/**
 * AngularUI - The companion suite for AngularJS
 * @version v0.3.2 - 2012-12-04
 * @link http://angular-ui.github.com
 * @license MIT License, http://www.opensource.org/licenses/MIT
 */


angular.module('ui.config', []).value('ui.config', {});
angular.module('ui.filters', ['ui.config']);
angular.module('ui.directives', ['ui.config']);
angular.module('ui', ['ui.filters', 'ui.directives', 'ui.config']);

/**
 * Enhanced Select2 Dropmenus
 *
 * @AJAX Mode - When in this mode, your value will be an object (or array of objects) of the data used by Select2
 *     This change is so that you do not have to do an additional query yourself on top of Select2's own query
 * @params [options] {object} The configuration options passed to $.fn.select2(). Refer to the documentation
 */
angular.module('ui.directives').directive('uiSelect2', ['ui.config', '$timeout', function (uiConfig, $timeout) {
    var options = {};
    if (uiConfig.select2) {
        angular.extend(options, uiConfig.select2);
    }
    return {
        require: '?ngModel',
        compile: function (tElm, tAttrs) {
            var watch,
                repeatOption,
                repeatAttr,
                isSelect = tElm.is('select'),
                isMultiple = (tAttrs.multiple !== undefined);

            // Enable watching of the options dataset if in use
            if (tElm.is('select')) {
                repeatOption = tElm.find('option[ng-repeat], option[data-ng-repeat]');

                if (repeatOption.length) {
                    repeatAttr = repeatOption.attr('ng-repeat') || repeatOption.attr('data-ng-repeat');
                    watch = jQuery.trim(repeatAttr.split('|')[0]).split(' ').pop();
                }
            }

            return function (scope, elm, attrs, controller) {
                // instance-specific options
                var opts = angular.extend({}, options, scope.$eval(attrs.uiSelect2));

                if (isSelect) {
                    // Use <select multiple> instead
                    delete opts.multiple;
                    delete opts.initSelection;
                } else if (isMultiple) {
                    opts.multiple = true;
                }

                if (controller) {
                    // Watch the model for programmatic changes
                    controller.$render = function () {
                        if (isSelect) {
                            elm.select2('val', controller.$modelValue);
                        } else {
                            if (isMultiple) {
                                if (!controller.$modelValue) {
                                    elm.select2('data', []);
                                } else if (angular.isArray(controller.$modelValue)) {
                                    elm.select2('data', controller.$modelValue);
                                } else {
                                    elm.select2('val', controller.$modelValue);
                                }
                            } else {
                                if (angular.isObject(controller.$modelValue)) {
                                    elm.select2('data', controller.$modelValue);
                                } else {
                                    elm.select2('val', controller.$modelValue);
                                }
                            }
                        }
                    };

                    // Watch the options dataset for changes
                    if (watch) {
                        scope.$watch(watch, function (newVal, oldVal, scope) {
                            if (!newVal) return;
                            // Delayed so that the options have time to be rendered
                            $timeout(function () {
                                elm.select2('val', controller.$viewValue);
                                // Refresh angular to remove the superfluous option
                                elm.trigger('change');
                            });
                        });
                    }

                    if (!isSelect) {
                        // Set the view and model value and update the angular template manually for the ajax/multiple select2.
                        elm.bind("change", function () {
                            scope.$apply(function () {
                                controller.$setViewValue(elm.select2('data'));
                            });
                        });

                        if (opts.initSelection) {
                            var initSelection = opts.initSelection;
                            opts.initSelection = function (element, callback) {
                                initSelection(element, function (value) {
                                    if (value) {
                                        // normal callback
                                        controller.$setViewValue(value);
                                        callback(value);
                                    }
                                    else {
                                        // to circumvent issue #463
                                        // if you want to use ui-select2 within ng-repeat
                                        // you have to provide a initSelection callbacl without any arg
                                        value = scope.$eval(attrs.ngModel);
                                        controller.$setViewValue(value);
                                        callback(value);
                                    }
                                });
                            };
                        }
                    }
                }

                attrs.$observe('disabled', function (value) {
                    elm.select2(value && 'disable' || 'enable');
                });

                if (attrs.ngMultiple) {
                    scope.$watch(attrs.ngMultiple, function(newVal) {
                        elm.select2(opts);
                    });
                }

                // Set initial value since Angular doesn't
                elm.val(scope.$eval(attrs.ngModel));

                // Initialize the plugin late so that the injected DOM does not disrupt the template compiler
                $timeout(function () {
                    elm.select2(opts);
                    // Not sure if I should just check for !isSelect OR if I should check for 'tags' key
                    if (!opts.initSelection && !isSelect)
                        controller.$setViewValue(elm.select2('data'));
                });
            };
        }
    };
}]);
circle.node {
  cursor: pointer;
  stroke-width: 1.5px;
}


circle.node.highlight,
circle.node.highlight.semihighlight { /* highlight "takes priority" over semihighlight */
  stroke: red;
  stroke-width: 1.5px;
}

circle.node.semihighlight {
  stroke: red;
  stroke-width: 1px;
  stroke-opacity: .75;
}

line.link {
  fill: none;
  stroke: #ddd; /*#9ecae1;*/
  stroke-width: 1.5px;
}

body {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}

.highlight {
  font-weight: bold;
  border-bottom-width: 1px;
  border-bottom-style: dotted;
  cursor: help;
}

.ephemeral {
  color: #82b446;
}

.ephemeral > a {
  border-bottom: 1px dotted #82b446;
  cursor: pointer;
}

body {
    font: 14px sans-serif;
}
.axis path, .axis line {
    fill: none;
    stroke: black;
    shape-rendering: crispEdges;
}
.axis path{
    fill: none;
    stroke: none;
}
.bar {
    fill: steelblue;
}
ProposalListCtrl = [ '$scope', '$routeParams', '$location', 'proposals', 'SpokenvoteCookies',
  ($scope, $routeParams, $location, proposals, SpokenvoteCookies) ->
    $scope.proposals = proposals
    $scope.spokenvoteSession = SpokenvoteCookies
    $scope.sessionSettings.actions.detailPage = false

    $scope.setFilter = (filterSelected) ->
      $location.search('filter', filterSelected)

    $scope.setHub = (hubSelected) ->
      $location.path('/proposals/').search('hub', hubSelected.id)

    $scope.$on 'event:proposalsChanged', ->
      $scope.proposals.$query

]

ProposalShowCtrl = [ '$scope', '$location', 'proposal', 'relatedProposals',
  ( $scope, $location , proposal, relatedProposals) ->
    $scope.proposal = proposal
    $scope.relatedProposals = relatedProposals
    $scope.sessionSettings.actions.detailPage = true

    $scope.$on 'event:votesChanged', ->
      $scope.proposal.$get()

    $scope.hubView = ->
      $location.path('/proposals').search('hub', proposal.hub.id)

    $scope.setVoter = ( vote ) ->
      $location.path('/proposals').search('user', vote.user_id)
      $scope.sessionSettings.actions.userFilter = vote.username

    $scope.support = ( clicked_proposal ) ->
      if $scope.currentUser.id?
        $scope.votingService.support clicked_proposal
      else
        $scope.authService.signinFb($scope).then ->
          $scope.votingService.support clicked_proposal

    $scope.improve = ( clicked_proposal ) ->
      if $scope.currentUser.id?
        $scope.votingService.improve $scope, clicked_proposal
      else
        $scope.authService.signinFb($scope).then ->
          $scope.votingService.improve $scope, clicked_proposal

    $scope.edit = ( clicked_proposal ) ->
      $scope.votingService.edit $scope, clicked_proposal

    $scope.delete = ( clicked_proposal ) ->
      $scope.votingService.delete $scope, clicked_proposal

    $scope.tooltips =
      support: "<div ng-controller='ProposalShowCtrl'><h6><b>Support this proposal</b></h6><b>Supporting:</b> You may support only one proposal on this topic,
                but are free to change your support to a <i>different</i> proposal at any time by clicking
                <i>support</i> on that proposal or by composing an <i>improved</i> proposal.
                <br><br><button ng-click='support(proposal)' class='btn btn-support btn-bold main ng-scope'>Ok, got it.</button> <br><br></div>"
      improve: "<h6><b>Create a better proposal</b></h6><b>Improving:</b>
                By composing an <i>improved</i> proposal you automatically become that proposal's first supporter.
                You may change your support to a <i>different</i> proposal at any time by
                supporting it or by composing another <i>improved</i> proposal."
      edit: "<h6><b>Edit your proposal</b></h6><b>Editing: </b>You may edit your proposal<br />
              up until it receives its first support from<br />another user."
      delete: "<h6><b>Delete your proposal</b></h6><b>Deleting: </b>You may delete your<br />proposal
                  up until it receives its first<br />support from another user or if support<br /> ever falls to zero."
      twitter: 'Share this proposal on Twitter'
      facebook: 'Share this proposal on Facebook'
      google: 'Share this proposal on Google+'
#      backtoTopics: 'Return to Topic list'

    $scope.socialSharing =
      twitterUrl: $scope.sessionSettings.socialSharing.twitterRootUrl + 'Check out this Spokenvote proposal:' + $scope.location.absUrl() + ' /via @spokenvote'
      facebookUrl: $scope.sessionSettings.socialSharing.facebookRootUrl + $scope.location.absUrl()
      googleUrl: $scope.sessionSettings.socialSharing.googleRootUrl + $scope.location.absUrl()
]

RelatedProposalShowCtrl = [ '$scope', ( $scope ) ->

    $scope.$on 'event:votesChanged', ->
      $scope.relatedProposals.$get()

    $scope.related_sorter_dropdown = [
      text: "By Votes"
      submenu: [
        text: "Most Votes"
        click: "sortRelatedProposals('Most Votes')"
      ,
        text: "Least Votes"
        click: "sortRelatedProposals('Least Votes')"
      ]
    ,
      text: "By Age"
      submenu: [
        text: "Most Recently Voted on"
        click: "sortRelatedProposals('Most Recently Voted on')"
      ,
        text: "Oldest Most Recent Vote"
        click: "sortRelatedProposals('Oldest Most Recent Vote')"
      ]
    ]

    $scope.sortRelatedProposals = (related_sort_by) ->
      $scope.relatedProposals.$get
        id: $scope.proposal.id
        related_sort_by: related_sort_by
      $scope.selectedSort = related_sort_by
]

# Register
App.controller 'ProposalListCtrl', ProposalListCtrl
App.controller 'ProposalShowCtrl', ProposalShowCtrl
App.controller 'RelatedProposalShowCtrl', RelatedProposalShowCtrl
'use strict'

appConfig = ($routeProvider, $locationProvider, $httpProvider, $modalProvider ) ->
  $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'

  $locationProvider.html5Mode true
  
  $routeProvider
    .when '/',
      templateUrl: '/assets/pages/landing.html'

    .when '/admin/authentications',
      controller: 'RootCtrl'

    .when '/landing',
      templateUrl: '/assets/pages/landing.html'
      controller: 'RootCtrl'

    .when '/proposals',
      templateUrl: '/assets/proposals/index.html'
      controller: 'ProposalListCtrl'
      resolve:
        proposals: [ 'MultiProposalLoader', (MultiProposalLoader) ->
          MultiProposalLoader()
        ]
    .when '/proposals/:proposalId',
      templateUrl: '/assets/proposals/show.html'
      controller: 'ProposalShowCtrl'
      resolve:
        proposal: [ 'ProposalLoader', (ProposalLoader) ->
          ProposalLoader()
        ]
        relatedProposals: [ 'RelatedProposalsLoader', (RelatedProposalsLoader) ->
          RelatedProposalsLoader()
        ]

    .when '/currentuser',
      resolve:
        currentuser: [ 'CurrentUserLoader', (CurrentUserLoader) ->
          CurrentUserLoader()
        ]

    .when '/about',
      templateUrl: '/assets/pages/about.html'

    .when '/terms-of-use',
      templateUrl: '/assets/pages/terms-of-use.html'

    .when '/privacy',
      templateUrl: '/assets/pages/privacy.html'

    .otherwise
      template: '<h3>Whoops, page not found</h3>'

  $modalProvider.options =
    backdrop: true  # 'static' - backdrop is present but modal window is not closed when clicking outside of the modal window.
    keyboard: true
    windowClass: ''  # additional CSS class(es) to be added to a modal window template

  jQuery ->
    $('body').prepend('<div id="fb-root"></div>')

    $.ajax
      url: "#{window.location.protocol}//connect.facebook.net/en_US/all.js"
      dataType: 'script'
      cache: true

window.App = angular.module('spokenvote', [ 'ngRoute', 'spokenvote.services', 'spokenvote.directives', 'ui.bootstrap' ]).config(appConfig)
#window.App = angular.module('spokenvote', [ 'ngRoute', 'spokenvote.services', 'spokenvote.directives', 'spokenvote.templates', 'ui.select2', 'ui.bootstrap' ]).config(appConfig)

App.Directives = angular.module('spokenvote.directives', [])

servicesConfig = ($httpProvider) ->
  $httpProvider.responseInterceptors.push('errorHttpInterceptor')

App.Services = angular.module('spokenvote.services', ['ngResource', 'ngCookies']).config(servicesConfig).run(['$rootScope', '$location', ($rootScope, $location) -> $rootScope.location = $location])

# Rest
CurrentUser = ($resource) ->
  $resource '/currentuser'

Hub = ($resource) ->
  $resource '/hubs/:id',
    id: '@id'
  ,
    update:
      method: 'PUT'

Vote = ($resource) ->
  $resource '/votes/:id',
    id: '@id'
  ,
    update:
      method: 'PUT'

Proposal = ($resource) ->
  $resource '/proposals/:id',
    id: '@id'
  ,
    update:
      method: 'PUT'

RelatedProposals = ($resource) ->
  $resource '/proposals/:id/related_proposals?related_sort_by=:related_sort_by',
    id: '@id'
    related_sort_by: '@related_sort_by'

RelatedVoteInTree = ($resource) ->
  $resource '/proposals/:id/related_vote_in_tree',
    id: '@id'

# Resources
UserOmniauthResource = ($http) ->
  UserOmniauth = (options) ->
    angular.extend this, options

  UserOmniauth::$save = ->
    $http.post '/authentications',
      auth: @auth

  UserOmniauth::$destroy = ->
    $http.delete "/users/logout"

  UserOmniauth

UserSessionResource = ($http) ->
  UserSession = (options) ->
    angular.extend this, options

  UserSession

UserRegistrationResource = ($http) ->
  UserRegistration = (options) ->
    angular.extend this, options

  UserRegistration::$save = ->
    $http.post "/users",
      user:
        name: @name
        email: @email
        password: @password
        password_confirmation: @password_confirmation

  UserRegistration

# Loaders
CurrentUserLoader = (CurrentUser, $route, $q) ->
  ->
    delay = $q.defer()
    CurrentUser.get {}
    , (current_user) ->
      delay.resolve current_user
    , ->
      delay.reject 'Unable to locate a current user '
    delay.promise

CurrentHubLoader = (Hub, $route, $q) ->
  ->
    delay = $q.defer()
    if $route.current.params.hub
      Hub.get
        id: $route.current.params.hub
      , (hub) ->
        delay.resolve hub
      , ->
        delay.reject 'Unable to locate a hub '
    else
      delay.resolve false
    delay.promise

ProposalLoader = (Proposal, $route, $q) ->
  ->
    delay = $q.defer()
    Proposal.get
      id: $route.current.params.proposalId
    , (proposal) ->
      delay.resolve proposal
    , ->
      delay.reject 'Unable to locate proposal ' + $route.current.params.proposalId
    delay.promise

MultiProposalLoader = [ 'Proposal', '$route', '$q', (Proposal, $route, $q) ->
  ->
    delay = $q.defer()
    Proposal.query
      hub: $route.current.params.hub
      filter: $route.current.params.filter
      user: $route.current.params.user
    , (proposals) ->
        delay.resolve proposals
    , ->
      delay.reject 'Unable to locate proposals for hub' + $route.current.params.hub
    delay.promise
]

RelatedProposalsLoader = (RelatedProposals, $route, $q) ->
  ->
    delay = $q.defer()
    RelatedProposals.get
      id: $route.current.params.proposalId
      related_sort_by:  $route.current.params.related_sort_by
    , (related_proposals) ->
      delay.resolve related_proposals
    , ->
      delay.reject 'Unable to locate related proposals ' + $route.current.params.proposalId
    delay.promise

RelatedVoteInTreeLoader = (RelatedVoteInTree, $q) ->
  (clicked_proposal) ->
    delay = $q.defer()
    RelatedVoteInTree.get
      id: clicked_proposal.id
    , (relatedVoteInTree) ->
      delay.resolve relatedVoteInTree
    , ->
      delay.reject 'Unable to find any related votes in the tree for proposal: ' + clicked_proposal.id
    delay.promise


# Register
App.Services.factory 'CurrentUser', CurrentUser
App.Services.factory 'Hub', Hub
App.Services.factory 'Vote', Vote
App.Services.factory 'Proposal', Proposal

App.Services.factory 'CurrentHubLoader', CurrentHubLoader
App.Services.factory 'RelatedProposals', RelatedProposals
App.Services.factory 'RelatedVoteInTree', RelatedVoteInTree

App.Services.factory 'UserOmniauthResource', UserOmniauthResource
App.Services.factory 'UserSessionResource', UserSessionResource
App.Services.factory 'UserRegistrationResource', UserRegistrationResource

App.Services.factory 'CurrentUserLoader', CurrentUserLoader
App.Services.factory 'ProposalLoader', ProposalLoader
App.Services.factory 'MultiProposalLoader', MultiProposalLoader
App.Services.factory 'RelatedProposalsLoader', RelatedProposalsLoader
App.Services.factory 'RelatedVoteInTreeLoader', RelatedVoteInTreeLoader
# Miscellaneous
SessionService = ($cookieStore, UserSessionResource, UserRegistrationResource, UserOmniauthResource) ->
  currentUser: $cookieStore.get '_spokenvote_session'

  signedIn: !!$cookieStore.get '_spokenvote_session'

  signedOut: not @signedIn

  userSession: new UserSessionResource
    email: $cookieStore.get 'spokenvote_email'
    password: null
    remember_me: true

  userOmniauth: new UserOmniauthResource
    auth: null

  userRegistration: new UserRegistrationResource
    name: null
    email: $cookieStore.get 'spokenvote_email'
    password: null
    password_confirmation: null

AlertService = ($timeout) ->
  callingScope: null
  alertMessage: null
  jsonResponse: null
  jsonErrors: null
  alertClass: null
  alertDestination: null
  cltActionResult: null

  setSuccess: (msg, scope, dest) ->
    @alertMessage = msg
    @alertDestination = dest
    @alertClass = 'alert-success'
    $timeout  (-> scope.hideAlert()), 7000 if scope?

  setInfo: (msg, scope, dest) ->
    @alertMessage = msg
    @alertDestination = dest
    @alertClass = 'alert-info'
    $timeout  (-> scope.hideAlert()), 7000 if scope?

  setError: (msg, scope, dest) ->
    @alertMessage = msg
    @alertDestination = dest
    @alertClass = 'alert-danger'
    $timeout  (-> scope.hideAlert()), 7000 if scope?

  setCtlResult: (result, scope, dest) ->
    @cltActionResult = result
    @alertDestination = dest
    @alertClass = 'alert-danger'
#    $timeout  (-> scope.hideAlert()), 7000 if scope?

  setJson: (json) ->
    @jsonResponse = json
    @jsonErrors = json if json > ' '

  setCallingScope: (scope) ->
    @callingScope = scope

  setClass: (alertclass) ->
    @alertClass = alertclass

  clearAlerts: ->
    @callingScope = null
    @alertMessage = null
    @jsonResponse = null
    @jsonErrors = null
    @alertClass = null
    @cltActionResult = null

# Interceptors
errorHttpInterceptor = ($q, $location, $rootScope, AlertService) ->
  (promise) ->
    promise.then ((response) ->
      response
    ), (response) ->
      if response.status is 406
        AlertService.setError "Please sign in to continue."
        $rootScope.$broadcast "event:loginRequired"
      else AlertService.setError "The server was unable to process your request."  if response.status >= 400 and response.status < 500
      $q.reject response


SessionSettings = ->
  facebookUser:
    auth: {}
    me: {}
  actions:
    hubFilter: 'All Groups'
    userFilter: null
    changeHub: false
    newProposalHub: null
    searchTerm: null
    wizardToGroup: null
    selectHub: false
    offcanvas: false
    detailPage: false
  openModals:
    signIn: false
    register: false
    register: false
    userSettings: false
    supportProposal: false
    improveProposal: false
    newProposal: false
    editProposal: false
    deleteProposal: false
    getStarted: false
  searchedHub: {}
  routeParams: {}
  hub_attributes: {}
  newProposal: {}
  newSupport:
    target: {}
    related: {}
    save: {}
  lastLocation:
    location_id: null
    formatted_location: null
  socialSharing:
    twitterRootUrl: 'http://twitter.com/home?status='
    facebookRootUrl: 'http://www.facebook.com/sharer.php?u='
    googleRootUrl: 'https://plus.google.com/share?url='
  spokenvote_attributes:
    defaultGravatar: 'http://www.spokenvote.com/' + 'assets/icons/sv-30.png'
    googleOauth2Config:
      client_id: '390524033908-kqnb56kof2vfr4gssi2q84nth2n981g5'
      scope: [ 'https://www.googleapis.com/auth/plus.login',
               'https://www.googleapis.com/auth/plus.me',
               'https://www.googleapis.com/auth/userinfo.email',
               'https://www.googleapis.com/auth/userinfo.profile' ]

# Cookies
SpokenvoteCookies = ($cookies) ->
  $cookies.SpokenvoteSession = "Setting a value"
  sessionCookie: $cookies.SpokenvoteSession

# Register
App.Services.factory 'SessionService', SessionService
App.Services.factory 'AlertService', AlertService
App.Services.factory 'errorHttpInterceptor', errorHttpInterceptor
App.Services.factory 'SpokenvoteCookies', SpokenvoteCookies
App.Services.factory 'SessionSettings', SessionSettings
RootCtrl = ['$scope', '$rootScope', '$route', 'AlertService', '$location', '$modal', 'Auth', 'SessionService', 'SessionSettings', 'CurrentUserLoader', 'VotingService',
  ($scope, $rootScope, $route, AlertService, $location, $modal, Auth, SessionService, SessionSettings, CurrentUserLoader, VotingService) ->
    $rootScope.alertService = AlertService
    $rootScope.authService = Auth
    $rootScope.sessionSettings = SessionSettings
    $rootScope.votingService = VotingService
    #CurrentUserLoader().then (current_user) ->
      #$rootScope.currentUser = current_user
      #$location.path('/proposals').search('filter', 'my') if $rootScope.currentUser.username? and $location.path() == '/'


    $scope.fbIntro = ->
        modalInstance = $modal.open
          templateUrl: 'intro_modal.html'
          windowClass: 'dialog-sm'
          #controller: 'UserSettingsCtrl'
        modalInstance.opened.then ->
          SessionSettings.openModals.fbIntro = true
        modalInstance.result.finally ->
          SessionSettings.openModals.fbIntro = false


    window.fbAsyncInit = ->
      FB.init
        appId:
          switch $location.host().substring(0,3)
            when 'loc' then '449408378433518'
            when 'sta' then '122901591225638'
            when 'www' then '374325849312759'
        cookie: true
        status: true
        xfbml: true

    $scope.$on "event:loginRequired", ->
      $scope.authService.signinFb($scope)

    $scope.signinAuth = ->
      $scope.authService.signinFb($scope)

    $scope.userSettings = ->
      if SessionSettings.openModals.userSettings is false
        modalInstance = $modal.open
          templateUrl: '/assets/user/_settings_modal.html'
          controller: 'UserSettingsCtrl'
        modalInstance.opened.then ->
          SessionSettings.openModals.userSettings = true
        modalInstance.result.finally ->
          SessionSettings.openModals.userSettings = false

    $scope.signOut = ->
      SessionService.userOmniauth.$destroy()
      $rootScope.currentUser = {}
      $location.path('/').search('')
      AlertService.setInfo 'You are signed out of Spokenvote.', $scope, 'main'

    $scope.clearFilter = (filter) ->
      $location.search(filter, null)
      $rootScope.sessionSettings.routeParams.user = null

    $scope.showProposal = (proposal) ->
      $location.path('/proposals/' + proposal.id).hash('navigationBar')

    $scope.backtoTopics = ->
      $scope.sessionSettings.routeParams = $route.current.params
      $location.path('/proposals').hash('prop'+$scope.sessionSettings.routeParams.proposalId)

    $scope.newTopic = ->
      if $scope.currentUser.id?
        $scope.votingService.new $scope
      else
        $scope.authService.signinFb($scope).then ->
          $scope.votingService.new $scope

    $scope.getStarted = ->
      $scope.votingService.wizard $scope

    $rootScope.rootTips =
      newHub: "You may change the group to which you are directing
                                this proposal by clicking here."

]

App.controller 'RootCtrl', RootCtrl
Auth = ($q, $rootScope, SessionSettings, SessionService, AlertService, CurrentUserLoader) ->

  fbResolve = (userInfo, error, deferredFb, scope) ->
    $rootScope.$apply ->
      AlertService.clearAlerts()
      if userInfo
        SessionSettings.facebookUser.me = userInfo
#        AlertService.setSuccess 'Facebook accepted your credentials. Now we\'re signing you into Spokenvote...', scope, 'main'
        signinSv deferredFb, scope
      else
        AlertService.setError 'Error trying to sign you in to Facebook. Please try again', scope, 'main'
        if error?
          AlertService.setCtlResult error.message, scope, 'main'
          console.log error   # permanent console.log
        deferredFb.reject error


  signinSv = (deferred, scope) ->
    SessionService.userOmniauth.auth =
      provider: 'facebook'
      uid: SessionSettings.facebookUser.me.id
      name: SessionSettings.facebookUser.me.name
      email: SessionSettings.facebookUser.me.email if SessionSettings.facebookUser.me.email?
      token: SessionSettings.facebookUser.auth.authResponse.accessToken
      expiresIn: SessionSettings.facebookUser.auth.authResponse.expiresIn

    if SessionService.signedOut
      console.log "signed out"
      SessionService.userOmniauth.$save().success (sessionResponse) ->
        if sessionResponse.success == true
          $rootScope.authService.updateUserSession(scope).then ->
            deferred.resolve sessionResponse
        if sessionResponse.success == false
          AlertService.setCtlResult 'Sorry, we were not able to sign you in to Spokenvote.', scope, 'main'
          deferred.reject sessionResponse


  signinFb: (scope) ->
    deferredFb = $q.defer()
    FB.getLoginStatus (authResponse) ->
      if authResponse.status is "connected"
        SessionSettings.facebookUser.auth = authResponse
        FB.api "/me", (userInfo) ->
          if userInfo.error
            fbResolve null, userInfo.error, deferredFb, scope
          else
            fbResolve userInfo, null, deferredFb, scope
      else
        FB.login ((authResponse) ->
          SessionSettings.facebookUser.auth = authResponse
          if authResponse.status is "connected"
            FB.api "/me", (userInfo) ->
              if userInfo.error
                fbResolve null, userInfo.error, deferredFb, scope
              else
                fbResolve userInfo, null, deferredFb, scope
          else
            fbResolve null, authResponse, deferredFb, scope
          ),
            scope: 'email,user_likes'


    deferredFb.promise

  updateUserSession: (scope) ->
    CurrentUserLoader().then (current_user) ->
      $rootScope.currentUser = current_user
      $rootScope.alertService.clearAlerts
      $rootScope.alertService.setInfo 'You are signed in to Spokenvote!', scope, 'main'
      $rootScope.$broadcast 'event:votesChanged'
      CurrentUserLoader()

#Auth.$inject = [ '$q', '$rootScope', 'SessionSettings', 'SessionService', 'AlertService', 'CurrentUserLoader' ]
App.Services.factory 'Auth', Auth
VotingService = [ '$rootScope', '$location', '$modal', 'SessionSettings', 'RelatedVoteInTreeLoader', 'Proposal',
  ( $rootScope, $location, $modal, SessionSettings, RelatedVoteInTreeLoader, Proposal ) ->

    support: ( clicked_proposal ) ->
      $rootScope.sessionSettings.newSupport.target = clicked_proposal
      $rootScope.sessionSettings.newSupport.related = null
      $rootScope.alertService.clearAlerts()

      if !$rootScope.currentUser.id?
        $rootScope.alertService.setInfo 'To support proposals you need to sign in.', scope, 'main'
      else
        RelatedVoteInTreeLoader(clicked_proposal).then (relatedSupport) ->
          if relatedSupport.id?
            $rootScope.sessionSettings.newSupport.related = relatedSupport
            if relatedSupport.proposal.id == clicked_proposal.id
              $rootScope.alertService.setInfo 'Good news, it looks as if you have already supported this proposal. Further editing is not allowed at this time.', $rootScope, 'main'
            else
              if SessionSettings.openModals.supportProposal is false
                modalInstance = $modal.open
                  templateUrl: '/assets/proposals/_support_modal.html'
                  controller: 'SupportCtrl'
                modalInstance.opened.then ->
                  SessionSettings.openModals.supportProposal = true
                modalInstance.result.finally ->
                  SessionSettings.openModals.supportProposal = false

    improve: ( scope, clicked_proposal ) ->
      scope.clicked_proposal = clicked_proposal
      scope.current_user_support = null
      $rootScope.alertService.clearAlerts()

      if !scope.currentUser.id?
        $rootScope.alertService.setInfo 'To improve proposals you need to sign in.', scope, 'main'
      else
        RelatedVoteInTreeLoader(clicked_proposal).then (relatedSupport) ->
          scope.current_user_support = 'related_proposal' if relatedSupport.id?

          if SessionSettings.openModals.improveProposal is false
            modalInstance = $modal.open
              templateUrl: '/assets/proposals/_improve_proposal_modal.html'
              controller: 'ImroveCtrl'
              scope: scope
            modalInstance.opened.then ->
              SessionSettings.openModals.improveProposal = true
            modalInstance.result.finally ->
              SessionSettings.openModals.improveProposal = false

    edit: ( scope, clicked_proposal ) ->
      scope.clicked_proposal = clicked_proposal

      if !scope.currentUser.id?
        $rootScope.alertService.setInfo 'To proceed you need to sign in.', scope, 'main'
      else
        if SessionSettings.openModals.editProposal is false
          modalInstance = $modal.open
            templateUrl: '/assets/proposals/_edit_proposal_modal.html'
            controller: 'EditProposalCtrl'
            scope: scope
          modalInstance.opened.then ->
            SessionSettings.openModals.editProposal = true
          modalInstance.result.finally ->
            SessionSettings.openModals.editProposal = false

    delete: (scope, clicked_proposal) ->
      scope.clicked_proposal = clicked_proposal

      if !scope.currentUser.id?
        $rootScope.alertService.setInfo 'To proceed you need to sign in.', scope, 'main'
      else
        if SessionSettings.openModals.deleteProposal is false
          modalInstance = $modal.open
            templateUrl: '/assets/proposals/_delete_proposal_modal.html'
            controller: 'DeleteProposalCtrl'
            scope: scope
          modalInstance.opened.then ->
            SessionSettings.openModals.deleteProposal = true
          modalInstance.result.finally ->
            SessionSettings.openModals.deleteProposal = false

    new: (scope) ->
      $rootScope.alertService.clearAlerts()
      if SessionSettings.hub_attributes.id?
        SessionSettings.actions.changeHub = false
      else
        SessionSettings.actions.changeHub = true
        SessionSettings.actions.searchTerm = null
      if !$rootScope.currentUser.id?
        $rootScope.alertService.setInfo 'To create proposals you need to sign in.', $rootScope, 'main'
      else
        if SessionSettings.openModals.newProposal is false
          modalInstance = $modal.open
            templateUrl: '/assets/proposals/_new_proposal_modal.html'
            controller: 'NewProposalCtrl'
  #          scope: scope           # Passed in scope was getting clobbered, so letting it set to $rootscope
          modalInstance.opened.then ->
            SessionSettings.openModals.newProposal = true
          modalInstance.result.finally ->
            SessionSettings.openModals.newProposal = false

    wizard: (scope) ->
      if SessionSettings.openModals.getStarted is false
        modalInstance = $modal.open
          templateUrl: '/assets/shared/_get_started_modal.html'
          controller: 'GetStartedCtrl'
        #        scope: scope           # Passed in scope was getting clobbered, so letting it set to $rootscope
        modalInstance.opened.then ->
          SessionSettings.openModals.getStarted = true
        modalInstance.result.finally ->
          SessionSettings.openModals.getStarted = false

    changeHub: (request) ->
      if request = true and SessionSettings.actions.changeHub != 'new'
        SessionSettings.actions.newProposalHub = null
        SessionSettings.actions.changeHub = !SessionSettings.actions.changeHub

    saveNewProposal: ($modalInstance) ->
      if !SessionSettings.hub_attributes.id?
        SessionSettings.hub_attributes.group_name = SessionSettings.actions.searchTerm
      newProposal =
        proposal:
          statement: SessionSettings.newProposal.statement
          votes_attributes:
            comment: SessionSettings.newProposal.comment
          hub_id: SessionSettings.hub_attributes.id
          hub_attributes: SessionSettings.hub_attributes

      $rootScope.alertService.clearAlerts()

      Proposal.save(newProposal
      ,  (response, status, headers, config) ->
        $rootScope.$broadcast 'event:proposalsChanged'
        $rootScope.alertService.setSuccess 'Your new proposal stating: \"' + response.statement + '\" was created.', $rootScope, 'main'
        $location.path('/proposals/' + response.id).search('hub', response.hub_id).search('filter', 'my').hash('navigationBar')
        $modalInstance.close(response)
        SessionSettings.actions.offcanvas = false
      ,  (response, status, headers, config) ->
        $rootScope.alertService.setCtlResult 'Sorry, your new proposal was not saved.', $rootScope, 'modal'
        $rootScope.alertService.setJson response.data
      )

]

# Register
App.Services.factory 'VotingService', VotingService

.dialog-sm .modal-dialog {
    max-width: 200px;
  }




/* .modal-dialog {
  @media (max-width: $grid-float-breakpoint-max) {
    margin: 5px;
  }
}

.modal-header {
  @media (max-width: $grid-float-breakpoint-max) {
    padding-top: 0;
    .close {
      padding: 5px 1px;
    }
  }
  h2 {
    color: $happy-blue;
    font-size: 2em;
    font-weight: bold;
  }
  .selectedHub {
    font-family: $logoTypeFace;
    color: $basic-brown !important;
    text-align: right;
    text-decoration: none;
    margin-top: -10px;
    @media (max-width: $grid-float-breakpoint-max) {
      margin-top: -5px;
    }
    .groupName {
      font-size: 27px;
      margin-right: 3px;
      i {
        font-size: 14px;
      }
    }
    .groupLocation {
      font-size: 14px;
      margin-top: -4px;
      margin-bottom: -6px;
      margin-right: 3px;
    }
    :hover {
      color: $happy-blue;
      cursor: pointer;
    }
  }
}

.modal-body {
  background-color: $modal-body-off-white;
  padding: 3%;
  .form-group {
    padding: 3px 3px 0 3px;
  }
  .instructions {
    color: $soft-brown-text;
    padding: 0 3% 3% 3%;
    .avatar {
      padding: 0 8px;
      float: left;
      @media (min-width: $grid-float-breakpoint) {
        padding: 0 15px;
      }
      img {
        width: 35px;
        height: auto;
      }
    }
  }
}

.modal-footer {
  margin: 0;
  padding: 20px;
  min-height: 55px;
  .pull-left {
    text-align: left;
  }
} */
/**
 * Common Sketchbook Configurations.
 *
 * This require file allows for the extension of the JamJS-generated configuration file with common definitions to be
 * shared amongst all experiments.
 *
 * See /_sketch_boilerplate/main.js for an example of how to use this.
 */
require.config({

  // baseUrl: "/", // needed b/c experiment index.html's reference their local main.js as the main-data (and main-data is used as default baseUrl)

  paths: {
    // paths can be used to shorten/alias certain modules:
    "boilerplate": "/_sketch_boilerplate_",

    // or assign the sketch's name to a stable version of an experiment.
    // for example: "madExperiment": "/madExperiment/v2"

    //-------
    // jamjs sucks and is outdated.  Start adding manual js libraries.
    "lodash": "http://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash",
    "jquery": "http://code.jquery.com/jquery-2.0.3.min",
    "backbone": "//cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.10/backbone-min",
    "d3": "http://d3js.org/d3.v3.min",
    // "d3": "/lib-user/d3.v3.3.2.min",
    "bootstrap": "/lib-user/bootstrap_232/js/bootstrap.min",
    // "bootstrap": "/lib-user/bootstrap_232/js/bootstrap.min",
    "tpl": "/lib-user/tpl",
    // "lodash": "/lib-user/lodash.2.4.1.min",
    "highcharts": "/lib-user/highcharts-all",
    "jquery-slider": "lib-user/jquery-ui-1.10.4.slider"
  },

  shim: {
    backbone: {
		  deps: ['lodash', 'jquery'],
		  exports: 'Backbone'
		},
    bootstrap: {
      deps: ['jquery']
    },
    d3: {
      exports: "d3"
    },
    highcharts: {
      deps: ['jquery'],
      exports: "Highcharts"
    },
    "jquery-slider": {
      deps: ['jquery'],
      exports: "$"
    }
  }

});
/*! jQuery UI - v1.10.4 - 2014-03-06
* http://jqueryui.com
* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.slider.js
* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */

(function( $, undefined ) {

var uuid = 0,
	runiqueId = /^ui-id-\d+$/;

// $.ui might exist from components with no dependencies, e.g., $.ui.position
$.ui = $.ui || {};

$.extend( $.ui, {
	version: "1.10.4",

	keyCode: {
		BACKSPACE: 8,
		COMMA: 188,
		DELETE: 46,
		DOWN: 40,
		END: 35,
		ENTER: 13,
		ESCAPE: 27,
		HOME: 36,
		LEFT: 37,
		NUMPAD_ADD: 107,
		NUMPAD_DECIMAL: 110,
		NUMPAD_DIVIDE: 111,
		NUMPAD_ENTER: 108,
		NUMPAD_MULTIPLY: 106,
		NUMPAD_SUBTRACT: 109,
		PAGE_DOWN: 34,
		PAGE_UP: 33,
		PERIOD: 190,
		RIGHT: 39,
		SPACE: 32,
		TAB: 9,
		UP: 38
	}
});

// plugins
$.fn.extend({
	focus: (function( orig ) {
		return function( delay, fn ) {
			return typeof delay === "number" ?
				this.each(function() {
					var elem = this;
					setTimeout(function() {
						$( elem ).focus();
						if ( fn ) {
							fn.call( elem );
						}
					}, delay );
				}) :
				orig.apply( this, arguments );
		};
	})( $.fn.focus ),

	scrollParent: function() {
		var scrollParent;
		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
			scrollParent = this.parents().filter(function() {
				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
			}).eq(0);
		} else {
			scrollParent = this.parents().filter(function() {
				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
			}).eq(0);
		}

		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
	},

	zIndex: function( zIndex ) {
		if ( zIndex !== undefined ) {
			return this.css( "zIndex", zIndex );
		}

		if ( this.length ) {
			var elem = $( this[ 0 ] ), position, value;
			while ( elem.length && elem[ 0 ] !== document ) {
				// Ignore z-index if position is set to a value where z-index is ignored by the browser
				// This makes behavior of this function consistent across browsers
				// WebKit always returns auto if the element is positioned
				position = elem.css( "position" );
				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
					// IE returns 0 when zIndex is not specified
					// other browsers return a string
					// we ignore the case of nested elements with an explicit value of 0
					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
					value = parseInt( elem.css( "zIndex" ), 10 );
					if ( !isNaN( value ) && value !== 0 ) {
						return value;
					}
				}
				elem = elem.parent();
			}
		}

		return 0;
	},

	uniqueId: function() {
		return this.each(function() {
			if ( !this.id ) {
				this.id = "ui-id-" + (++uuid);
			}
		});
	},

	removeUniqueId: function() {
		return this.each(function() {
			if ( runiqueId.test( this.id ) ) {
				$( this ).removeAttr( "id" );
			}
		});
	}
});

// selectors
function focusable( element, isTabIndexNotNaN ) {
	var map, mapName, img,
		nodeName = element.nodeName.toLowerCase();
	if ( "area" === nodeName ) {
		map = element.parentNode;
		mapName = map.name;
		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
			return false;
		}
		img = $( "img[usemap=#" + mapName + "]" )[0];
		return !!img && visible( img );
	}
	return ( /input|select|textarea|button|object/.test( nodeName ) ?
		!element.disabled :
		"a" === nodeName ?
			element.href || isTabIndexNotNaN :
			isTabIndexNotNaN) &&
		// the element and all of its ancestors must be visible
		visible( element );
}

function visible( element ) {
	return $.expr.filters.visible( element ) &&
		!$( element ).parents().addBack().filter(function() {
			return $.css( this, "visibility" ) === "hidden";
		}).length;
}

$.extend( $.expr[ ":" ], {
	data: $.expr.createPseudo ?
		$.expr.createPseudo(function( dataName ) {
			return function( elem ) {
				return !!$.data( elem, dataName );
			};
		}) :
		// support: jQuery <1.8
		function( elem, i, match ) {
			return !!$.data( elem, match[ 3 ] );
		},

	focusable: function( element ) {
		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
	},

	tabbable: function( element ) {
		var tabIndex = $.attr( element, "tabindex" ),
			isTabIndexNaN = isNaN( tabIndex );
		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
	}
});

// support: jQuery <1.8
if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
	$.each( [ "Width", "Height" ], function( i, name ) {
		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
			type = name.toLowerCase(),
			orig = {
				innerWidth: $.fn.innerWidth,
				innerHeight: $.fn.innerHeight,
				outerWidth: $.fn.outerWidth,
				outerHeight: $.fn.outerHeight
			};

		function reduce( elem, size, border, margin ) {
			$.each( side, function() {
				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
				if ( border ) {
					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
				}
				if ( margin ) {
					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
				}
			});
			return size;
		}

		$.fn[ "inner" + name ] = function( size ) {
			if ( size === undefined ) {
				return orig[ "inner" + name ].call( this );
			}

			return this.each(function() {
				$( this ).css( type, reduce( this, size ) + "px" );
			});
		};

		$.fn[ "outer" + name] = function( size, margin ) {
			if ( typeof size !== "number" ) {
				return orig[ "outer" + name ].call( this, size );
			}

			return this.each(function() {
				$( this).css( type, reduce( this, size, true, margin ) + "px" );
			});
		};
	});
}

// support: jQuery <1.8
if ( !$.fn.addBack ) {
	$.fn.addBack = function( selector ) {
		return this.add( selector == null ?
			this.prevObject : this.prevObject.filter( selector )
		);
	};
}

// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
	$.fn.removeData = (function( removeData ) {
		return function( key ) {
			if ( arguments.length ) {
				return removeData.call( this, $.camelCase( key ) );
			} else {
				return removeData.call( this );
			}
		};
	})( $.fn.removeData );
}





// deprecated
$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );

$.support.selectstart = "onselectstart" in document.createElement( "div" );
$.fn.extend({
	disableSelection: function() {
		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
			".ui-disableSelection", function( event ) {
				event.preventDefault();
			});
	},

	enableSelection: function() {
		return this.unbind( ".ui-disableSelection" );
	}
});

$.extend( $.ui, {
	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
	plugin: {
		add: function( module, option, set ) {
			var i,
				proto = $.ui[ module ].prototype;
			for ( i in set ) {
				proto.plugins[ i ] = proto.plugins[ i ] || [];
				proto.plugins[ i ].push( [ option, set[ i ] ] );
			}
		},
		call: function( instance, name, args ) {
			var i,
				set = instance.plugins[ name ];
			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
				return;
			}

			for ( i = 0; i < set.length; i++ ) {
				if ( instance.options[ set[ i ][ 0 ] ] ) {
					set[ i ][ 1 ].apply( instance.element, args );
				}
			}
		}
	},

	// only used by resizable
	hasScroll: function( el, a ) {

		//If overflow is hidden, the element might have extra content, but the user wants to hide it
		if ( $( el ).css( "overflow" ) === "hidden") {
			return false;
		}

		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
			has = false;

		if ( el[ scroll ] > 0 ) {
			return true;
		}

		// TODO: determine which cases actually cause this to happen
		// if the element doesn't have the scroll set, see if it's possible to
		// set the scroll
		el[ scroll ] = 1;
		has = ( el[ scroll ] > 0 );
		el[ scroll ] = 0;
		return has;
	}
});

})( jQuery );
(function( $, undefined ) {

var uuid = 0,
	slice = Array.prototype.slice,
	_cleanData = $.cleanData;
$.cleanData = function( elems ) {
	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
		try {
			$( elem ).triggerHandler( "remove" );
		// http://bugs.jquery.com/ticket/8235
		} catch( e ) {}
	}
	_cleanData( elems );
};

$.widget = function( name, base, prototype ) {
	var fullName, existingConstructor, constructor, basePrototype,
		// proxiedPrototype allows the provided prototype to remain unmodified
		// so that it can be used as a mixin for multiple widgets (#8876)
		proxiedPrototype = {},
		namespace = name.split( "." )[ 0 ];

	name = name.split( "." )[ 1 ];
	fullName = namespace + "-" + name;

	if ( !prototype ) {
		prototype = base;
		base = $.Widget;
	}

	// create selector for plugin
	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
		return !!$.data( elem, fullName );
	};

	$[ namespace ] = $[ namespace ] || {};
	existingConstructor = $[ namespace ][ name ];
	constructor = $[ namespace ][ name ] = function( options, element ) {
		// allow instantiation without "new" keyword
		if ( !this._createWidget ) {
			return new constructor( options, element );
		}

		// allow instantiation without initializing for simple inheritance
		// must use "new" keyword (the code above always passes args)
		if ( arguments.length ) {
			this._createWidget( options, element );
		}
	};
	// extend with the existing constructor to carry over any static properties
	$.extend( constructor, existingConstructor, {
		version: prototype.version,
		// copy the object used to create the prototype in case we need to
		// redefine the widget later
		_proto: $.extend( {}, prototype ),
		// track widgets that inherit from this widget in case this widget is
		// redefined after a widget inherits from it
		_childConstructors: []
	});

	basePrototype = new base();
	// we need to make the options hash a property directly on the new instance
	// otherwise we'll modify the options hash on the prototype that we're
	// inheriting from
	basePrototype.options = $.widget.extend( {}, basePrototype.options );
	$.each( prototype, function( prop, value ) {
		if ( !$.isFunction( value ) ) {
			proxiedPrototype[ prop ] = value;
			return;
		}
		proxiedPrototype[ prop ] = (function() {
			var _super = function() {
					return base.prototype[ prop ].apply( this, arguments );
				},
				_superApply = function( args ) {
					return base.prototype[ prop ].apply( this, args );
				};
			return function() {
				var __super = this._super,
					__superApply = this._superApply,
					returnValue;

				this._super = _super;
				this._superApply = _superApply;

				returnValue = value.apply( this, arguments );

				this._super = __super;
				this._superApply = __superApply;

				return returnValue;
			};
		})();
	});
	constructor.prototype = $.widget.extend( basePrototype, {
		// TODO: remove support for widgetEventPrefix
		// always use the name + a colon as the prefix, e.g., draggable:start
		// don't prefix for widgets that aren't DOM-based
		widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
	}, proxiedPrototype, {
		constructor: constructor,
		namespace: namespace,
		widgetName: name,
		widgetFullName: fullName
	});

	// If this widget is being redefined then we need to find all widgets that
	// are inheriting from it and redefine all of them so that they inherit from
	// the new version of this widget. We're essentially trying to replace one
	// level in the prototype chain.
	if ( existingConstructor ) {
		$.each( existingConstructor._childConstructors, function( i, child ) {
			var childPrototype = child.prototype;

			// redefine the child widget using the same prototype that was
			// originally used, but inherit from the new version of the base
			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
		});
		// remove the list of existing child constructors from the old constructor
		// so the old child constructors can be garbage collected
		delete existingConstructor._childConstructors;
	} else {
		base._childConstructors.push( constructor );
	}

	$.widget.bridge( name, constructor );
};

$.widget.extend = function( target ) {
	var input = slice.call( arguments, 1 ),
		inputIndex = 0,
		inputLength = input.length,
		key,
		value;
	for ( ; inputIndex < inputLength; inputIndex++ ) {
		for ( key in input[ inputIndex ] ) {
			value = input[ inputIndex ][ key ];
			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
				// Clone objects
				if ( $.isPlainObject( value ) ) {
					target[ key ] = $.isPlainObject( target[ key ] ) ?
						$.widget.extend( {}, target[ key ], value ) :
						// Don't extend strings, arrays, etc. with objects
						$.widget.extend( {}, value );
				// Copy everything else by reference
				} else {
					target[ key ] = value;
				}
			}
		}
	}
	return target;
};

$.widget.bridge = function( name, object ) {
	var fullName = object.prototype.widgetFullName || name;
	$.fn[ name ] = function( options ) {
		var isMethodCall = typeof options === "string",
			args = slice.call( arguments, 1 ),
			returnValue = this;

		// allow multiple hashes to be passed on init
		options = !isMethodCall && args.length ?
			$.widget.extend.apply( null, [ options ].concat(args) ) :
			options;

		if ( isMethodCall ) {
			this.each(function() {
				var methodValue,
					instance = $.data( this, fullName );
				if ( !instance ) {
					return $.error( "cannot call methods on " + name + " prior to initialization; " +
						"attempted to call method '" + options + "'" );
				}
				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
				}
				methodValue = instance[ options ].apply( instance, args );
				if ( methodValue !== instance && methodValue !== undefined ) {
					returnValue = methodValue && methodValue.jquery ?
						returnValue.pushStack( methodValue.get() ) :
						methodValue;
					return false;
				}
			});
		} else {
			this.each(function() {
				var instance = $.data( this, fullName );
				if ( instance ) {
					instance.option( options || {} )._init();
				} else {
					$.data( this, fullName, new object( options, this ) );
				}
			});
		}

		return returnValue;
	};
};

$.Widget = function( /* options, element */ ) {};
$.Widget._childConstructors = [];

$.Widget.prototype = {
	widgetName: "widget",
	widgetEventPrefix: "",
	defaultElement: "<div>",
	options: {
		disabled: false,

		// callbacks
		create: null
	},
	_createWidget: function( options, element ) {
		element = $( element || this.defaultElement || this )[ 0 ];
		this.element = $( element );
		this.uuid = uuid++;
		this.eventNamespace = "." + this.widgetName + this.uuid;
		this.options = $.widget.extend( {},
			this.options,
			this._getCreateOptions(),
			options );

		this.bindings = $();
		this.hoverable = $();
		this.focusable = $();

		if ( element !== this ) {
			$.data( element, this.widgetFullName, this );
			this._on( true, this.element, {
				remove: function( event ) {
					if ( event.target === element ) {
						this.destroy();
					}
				}
			});
			this.document = $( element.style ?
				// element within the document
				element.ownerDocument :
				// element is window or document
				element.document || element );
			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
		}

		this._create();
		this._trigger( "create", null, this._getCreateEventData() );
		this._init();
	},
	_getCreateOptions: $.noop,
	_getCreateEventData: $.noop,
	_create: $.noop,
	_init: $.noop,

	destroy: function() {
		this._destroy();
		// we can probably remove the unbind calls in 2.0
		// all event bindings should go through this._on()
		this.element
			.unbind( this.eventNamespace )
			// 1.9 BC for #7810
			// TODO remove dual storage
			.removeData( this.widgetName )
			.removeData( this.widgetFullName )
			// support: jquery <1.6.3
			// http://bugs.jquery.com/ticket/9413
			.removeData( $.camelCase( this.widgetFullName ) );
		this.widget()
			.unbind( this.eventNamespace )
			.removeAttr( "aria-disabled" )
			.removeClass(
				this.widgetFullName + "-disabled " +
				"ui-state-disabled" );

		// clean up events and states
		this.bindings.unbind( this.eventNamespace );
		this.hoverable.removeClass( "ui-state-hover" );
		this.focusable.removeClass( "ui-state-focus" );
	},
	_destroy: $.noop,

	widget: function() {
		return this.element;
	},

	option: function( key, value ) {
		var options = key,
			parts,
			curOption,
			i;

		if ( arguments.length === 0 ) {
			// don't return a reference to the internal hash
			return $.widget.extend( {}, this.options );
		}

		if ( typeof key === "string" ) {
			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
			options = {};
			parts = key.split( "." );
			key = parts.shift();
			if ( parts.length ) {
				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
				for ( i = 0; i < parts.length - 1; i++ ) {
					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
					curOption = curOption[ parts[ i ] ];
				}
				key = parts.pop();
				if ( arguments.length === 1 ) {
					return curOption[ key ] === undefined ? null : curOption[ key ];
				}
				curOption[ key ] = value;
			} else {
				if ( arguments.length === 1 ) {
					return this.options[ key ] === undefined ? null : this.options[ key ];
				}
				options[ key ] = value;
			}
		}

		this._setOptions( options );

		return this;
	},
	_setOptions: function( options ) {
		var key;

		for ( key in options ) {
			this._setOption( key, options[ key ] );
		}

		return this;
	},
	_setOption: function( key, value ) {
		this.options[ key ] = value;

		if ( key === "disabled" ) {
			this.widget()
				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
				.attr( "aria-disabled", value );
			this.hoverable.removeClass( "ui-state-hover" );
			this.focusable.removeClass( "ui-state-focus" );
		}

		return this;
	},

	enable: function() {
		return this._setOption( "disabled", false );
	},
	disable: function() {
		return this._setOption( "disabled", true );
	},

	_on: function( suppressDisabledCheck, element, handlers ) {
		var delegateElement,
			instance = this;

		// no suppressDisabledCheck flag, shuffle arguments
		if ( typeof suppressDisabledCheck !== "boolean" ) {
			handlers = element;
			element = suppressDisabledCheck;
			suppressDisabledCheck = false;
		}

		// no element argument, shuffle and use this.element
		if ( !handlers ) {
			handlers = element;
			element = this.element;
			delegateElement = this.widget();
		} else {
			// accept selectors, DOM elements
			element = delegateElement = $( element );
			this.bindings = this.bindings.add( element );
		}

		$.each( handlers, function( event, handler ) {
			function handlerProxy() {
				// allow widgets to customize the disabled handling
				// - disabled as an array instead of boolean
				// - disabled class as method for disabling individual parts
				if ( !suppressDisabledCheck &&
						( instance.options.disabled === true ||
							$( this ).hasClass( "ui-state-disabled" ) ) ) {
					return;
				}
				return ( typeof handler === "string" ? instance[ handler ] : handler )
					.apply( instance, arguments );
			}

			// copy the guid so direct unbinding works
			if ( typeof handler !== "string" ) {
				handlerProxy.guid = handler.guid =
					handler.guid || handlerProxy.guid || $.guid++;
			}

			var match = event.match( /^(\w+)\s*(.*)$/ ),
				eventName = match[1] + instance.eventNamespace,
				selector = match[2];
			if ( selector ) {
				delegateElement.delegate( selector, eventName, handlerProxy );
			} else {
				element.bind( eventName, handlerProxy );
			}
		});
	},

	_off: function( element, eventName ) {
		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
		element.unbind( eventName ).undelegate( eventName );
	},

	_delay: function( handler, delay ) {
		function handlerProxy() {
			return ( typeof handler === "string" ? instance[ handler ] : handler )
				.apply( instance, arguments );
		}
		var instance = this;
		return setTimeout( handlerProxy, delay || 0 );
	},

	_hoverable: function( element ) {
		this.hoverable = this.hoverable.add( element );
		this._on( element, {
			mouseenter: function( event ) {
				$( event.currentTarget ).addClass( "ui-state-hover" );
			},
			mouseleave: function( event ) {
				$( event.currentTarget ).removeClass( "ui-state-hover" );
			}
		});
	},

	_focusable: function( element ) {
		this.focusable = this.focusable.add( element );
		this._on( element, {
			focusin: function( event ) {
				$( event.currentTarget ).addClass( "ui-state-focus" );
			},
			focusout: function( event ) {
				$( event.currentTarget ).removeClass( "ui-state-focus" );
			}
		});
	},

	_trigger: function( type, event, data ) {
		var prop, orig,
			callback = this.options[ type ];

		data = data || {};
		event = $.Event( event );
		event.type = ( type === this.widgetEventPrefix ?
			type :
			this.widgetEventPrefix + type ).toLowerCase();
		// the original event may come from any element
		// so we need to reset the target on the new event
		event.target = this.element[ 0 ];

		// copy original event properties over to the new event
		orig = event.originalEvent;
		if ( orig ) {
			for ( prop in orig ) {
				if ( !( prop in event ) ) {
					event[ prop ] = orig[ prop ];
				}
			}
		}

		this.element.trigger( event, data );
		return !( $.isFunction( callback ) &&
			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
			event.isDefaultPrevented() );
	}
};

$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
		if ( typeof options === "string" ) {
			options = { effect: options };
		}
		var hasOptions,
			effectName = !options ?
				method :
				options === true || typeof options === "number" ?
					defaultEffect :
					options.effect || defaultEffect;
		options = options || {};
		if ( typeof options === "number" ) {
			options = { duration: options };
		}
		hasOptions = !$.isEmptyObject( options );
		options.complete = callback;
		if ( options.delay ) {
			element.delay( options.delay );
		}
		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
			element[ method ]( options );
		} else if ( effectName !== method && element[ effectName ] ) {
			element[ effectName ]( options.duration, options.easing, callback );
		} else {
			element.queue(function( next ) {
				$( this )[ method ]();
				if ( callback ) {
					callback.call( element[ 0 ] );
				}
				next();
			});
		}
	};
});

})( jQuery );
(function( $, undefined ) {

var mouseHandled = false;
$( document ).mouseup( function() {
	mouseHandled = false;
});

$.widget("ui.mouse", {
	version: "1.10.4",
	options: {
		cancel: "input,textarea,button,select,option",
		distance: 1,
		delay: 0
	},
	_mouseInit: function() {
		var that = this;

		this.element
			.bind("mousedown."+this.widgetName, function(event) {
				return that._mouseDown(event);
			})
			.bind("click."+this.widgetName, function(event) {
				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
					$.removeData(event.target, that.widgetName + ".preventClickEvent");
					event.stopImmediatePropagation();
					return false;
				}
			});

		this.started = false;
	},

	// TODO: make sure destroying one instance of mouse doesn't mess with
	// other instances of mouse
	_mouseDestroy: function() {
		this.element.unbind("."+this.widgetName);
		if ( this._mouseMoveDelegate ) {
			$(document)
				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
		}
	},

	_mouseDown: function(event) {
		// don't let more than one widget handle mouseStart
		if( mouseHandled ) { return; }

		// we may have missed mouseup (out of window)
		(this._mouseStarted && this._mouseUp(event));

		this._mouseDownEvent = event;

		var that = this,
			btnIsLeft = (event.which === 1),
			// event.target.nodeName works around a bug in IE 8 with
			// disabled inputs (#7620)
			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
			return true;
		}

		this.mouseDelayMet = !this.options.delay;
		if (!this.mouseDelayMet) {
			this._mouseDelayTimer = setTimeout(function() {
				that.mouseDelayMet = true;
			}, this.options.delay);
		}

		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
			this._mouseStarted = (this._mouseStart(event) !== false);
			if (!this._mouseStarted) {
				event.preventDefault();
				return true;
			}
		}

		// Click event may never have fired (Gecko & Opera)
		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
			$.removeData(event.target, this.widgetName + ".preventClickEvent");
		}

		// these delegates are required to keep context
		this._mouseMoveDelegate = function(event) {
			return that._mouseMove(event);
		};
		this._mouseUpDelegate = function(event) {
			return that._mouseUp(event);
		};
		$(document)
			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
			.bind("mouseup."+this.widgetName, this._mouseUpDelegate);

		event.preventDefault();

		mouseHandled = true;
		return true;
	},

	_mouseMove: function(event) {
		// IE mouseup check - mouseup happened when mouse was out of window
		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
			return this._mouseUp(event);
		}

		if (this._mouseStarted) {
			this._mouseDrag(event);
			return event.preventDefault();
		}

		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
			this._mouseStarted =
				(this._mouseStart(this._mouseDownEvent, event) !== false);
			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
		}

		return !this._mouseStarted;
	},

	_mouseUp: function(event) {
		$(document)
			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);

		if (this._mouseStarted) {
			this._mouseStarted = false;

			if (event.target === this._mouseDownEvent.target) {
				$.data(event.target, this.widgetName + ".preventClickEvent", true);
			}

			this._mouseStop(event);
		}

		return false;
	},

	_mouseDistanceMet: function(event) {
		return (Math.max(
				Math.abs(this._mouseDownEvent.pageX - event.pageX),
				Math.abs(this._mouseDownEvent.pageY - event.pageY)
			) >= this.options.distance
		);
	},

	_mouseDelayMet: function(/* event */) {
		return this.mouseDelayMet;
	},

	// These are placeholder methods, to be overriden by extending plugin
	_mouseStart: function(/* event */) {},
	_mouseDrag: function(/* event */) {},
	_mouseStop: function(/* event */) {},
	_mouseCapture: function(/* event */) { return true; }
});

})(jQuery);
(function( $, undefined ) {

// number of pages in a slider
// (how many times can you page up/down to go through the whole range)
var numPages = 5;

$.widget( "ui.slider", $.ui.mouse, {
	version: "1.10.4",
	widgetEventPrefix: "slide",

	options: {
		animate: false,
		distance: 0,
		max: 100,
		min: 0,
		orientation: "horizontal",
		range: false,
		step: 1,
		value: 0,
		values: null,

		// callbacks
		change: null,
		slide: null,
		start: null,
		stop: null
	},

	_create: function() {
		this._keySliding = false;
		this._mouseSliding = false;
		this._animateOff = true;
		this._handleIndex = null;
		this._detectOrientation();
		this._mouseInit();

		this.element
			.addClass( "ui-slider" +
				" ui-slider-" + this.orientation +
				" ui-widget" +
				" ui-widget-content" +
				" ui-corner-all");

		this._refresh();
		this._setOption( "disabled", this.options.disabled );

		this._animateOff = false;
	},

	_refresh: function() {
		this._createRange();
		this._createHandles();
		this._setupEvents();
		this._refreshValue();
	},

	_createHandles: function() {
		var i, handleCount,
			options = this.options,
			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
			handles = [];

		handleCount = ( options.values && options.values.length ) || 1;

		if ( existingHandles.length > handleCount ) {
			existingHandles.slice( handleCount ).remove();
			existingHandles = existingHandles.slice( 0, handleCount );
		}

		for ( i = existingHandles.length; i < handleCount; i++ ) {
			handles.push( handle );
		}

		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );

		this.handle = this.handles.eq( 0 );

		this.handles.each(function( i ) {
			$( this ).data( "ui-slider-handle-index", i );
		});
	},

	_createRange: function() {
		var options = this.options,
			classes = "";

		if ( options.range ) {
			if ( options.range === true ) {
				if ( !options.values ) {
					options.values = [ this._valueMin(), this._valueMin() ];
				} else if ( options.values.length && options.values.length !== 2 ) {
					options.values = [ options.values[0], options.values[0] ];
				} else if ( $.isArray( options.values ) ) {
					options.values = options.values.slice(0);
				}
			}

			if ( !this.range || !this.range.length ) {
				this.range = $( "<div></div>" )
					.appendTo( this.element );

				classes = "ui-slider-range" +
				// note: this isn't the most fittingly semantic framework class for this element,
				// but worked best visually with a variety of themes
				" ui-widget-header ui-corner-all";
			} else {
				this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
					// Handle range switching from true to min/max
					.css({
						"left": "",
						"bottom": ""
					});
			}

			this.range.addClass( classes +
				( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
		} else {
			if ( this.range ) {
				this.range.remove();
			}
			this.range = null;
		}
	},

	_setupEvents: function() {
		var elements = this.handles.add( this.range ).filter( "a" );
		this._off( elements );
		this._on( elements, this._handleEvents );
		this._hoverable( elements );
		this._focusable( elements );
	},

	_destroy: function() {
		this.handles.remove();
		if ( this.range ) {
			this.range.remove();
		}

		this.element
			.removeClass( "ui-slider" +
				" ui-slider-horizontal" +
				" ui-slider-vertical" +
				" ui-widget" +
				" ui-widget-content" +
				" ui-corner-all" );

		this._mouseDestroy();
	},

	_mouseCapture: function( event ) {
		var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
			that = this,
			o = this.options;

		if ( o.disabled ) {
			return false;
		}

		this.elementSize = {
			width: this.element.outerWidth(),
			height: this.element.outerHeight()
		};
		this.elementOffset = this.element.offset();

		position = { x: event.pageX, y: event.pageY };
		normValue = this._normValueFromMouse( position );
		distance = this._valueMax() - this._valueMin() + 1;
		this.handles.each(function( i ) {
			var thisDistance = Math.abs( normValue - that.values(i) );
			if (( distance > thisDistance ) ||
				( distance === thisDistance &&
					(i === that._lastChangedValue || that.values(i) === o.min ))) {
				distance = thisDistance;
				closestHandle = $( this );
				index = i;
			}
		});

		allowed = this._start( event, index );
		if ( allowed === false ) {
			return false;
		}
		this._mouseSliding = true;

		this._handleIndex = index;

		closestHandle
			.addClass( "ui-state-active" )
			.focus();

		offset = closestHandle.offset();
		mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
			top: event.pageY - offset.top -
				( closestHandle.height() / 2 ) -
				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
		};

		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
			this._slide( event, index, normValue );
		}
		this._animateOff = true;
		return true;
	},

	_mouseStart: function() {
		return true;
	},

	_mouseDrag: function( event ) {
		var position = { x: event.pageX, y: event.pageY },
			normValue = this._normValueFromMouse( position );

		this._slide( event, this._handleIndex, normValue );

		return false;
	},

	_mouseStop: function( event ) {
		this.handles.removeClass( "ui-state-active" );
		this._mouseSliding = false;

		this._stop( event, this._handleIndex );
		this._change( event, this._handleIndex );

		this._handleIndex = null;
		this._clickOffset = null;
		this._animateOff = false;

		return false;
	},

	_detectOrientation: function() {
		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
	},

	_normValueFromMouse: function( position ) {
		var pixelTotal,
			pixelMouse,
			percentMouse,
			valueTotal,
			valueMouse;

		if ( this.orientation === "horizontal" ) {
			pixelTotal = this.elementSize.width;
			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
		} else {
			pixelTotal = this.elementSize.height;
			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
		}

		percentMouse = ( pixelMouse / pixelTotal );
		if ( percentMouse > 1 ) {
			percentMouse = 1;
		}
		if ( percentMouse < 0 ) {
			percentMouse = 0;
		}
		if ( this.orientation === "vertical" ) {
			percentMouse = 1 - percentMouse;
		}

		valueTotal = this._valueMax() - this._valueMin();
		valueMouse = this._valueMin() + percentMouse * valueTotal;

		return this._trimAlignValue( valueMouse );
	},

	_start: function( event, index ) {
		var uiHash = {
			handle: this.handles[ index ],
			value: this.value()
		};
		if ( this.options.values && this.options.values.length ) {
			uiHash.value = this.values( index );
			uiHash.values = this.values();
		}
		return this._trigger( "start", event, uiHash );
	},

	_slide: function( event, index, newVal ) {
		var otherVal,
			newValues,
			allowed;

		if ( this.options.values && this.options.values.length ) {
			otherVal = this.values( index ? 0 : 1 );

			if ( ( this.options.values.length === 2 && this.options.range === true ) &&
					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
				) {
				newVal = otherVal;
			}

			if ( newVal !== this.values( index ) ) {
				newValues = this.values();
				newValues[ index ] = newVal;
				// A slide can be canceled by returning false from the slide callback
				allowed = this._trigger( "slide", event, {
					handle: this.handles[ index ],
					value: newVal,
					values: newValues
				} );
				otherVal = this.values( index ? 0 : 1 );
				if ( allowed !== false ) {
					this.values( index, newVal );
				}
			}
		} else {
			if ( newVal !== this.value() ) {
				// A slide can be canceled by returning false from the slide callback
				allowed = this._trigger( "slide", event, {
					handle: this.handles[ index ],
					value: newVal
				} );
				if ( allowed !== false ) {
					this.value( newVal );
				}
			}
		}
	},

	_stop: function( event, index ) {
		var uiHash = {
			handle: this.handles[ index ],
			value: this.value()
		};
		if ( this.options.values && this.options.values.length ) {
			uiHash.value = this.values( index );
			uiHash.values = this.values();
		}

		this._trigger( "stop", event, uiHash );
	},

	_change: function( event, index ) {
		if ( !this._keySliding && !this._mouseSliding ) {
			var uiHash = {
				handle: this.handles[ index ],
				value: this.value()
			};
			if ( this.options.values && this.options.values.length ) {
				uiHash.value = this.values( index );
				uiHash.values = this.values();
			}

			//store the last changed value index for reference when handles overlap
			this._lastChangedValue = index;

			this._trigger( "change", event, uiHash );
		}
	},

	value: function( newValue ) {
		if ( arguments.length ) {
			this.options.value = this._trimAlignValue( newValue );
			this._refreshValue();
			this._change( null, 0 );
			return;
		}

		return this._value();
	},

	values: function( index, newValue ) {
		var vals,
			newValues,
			i;

		if ( arguments.length > 1 ) {
			this.options.values[ index ] = this._trimAlignValue( newValue );
			this._refreshValue();
			this._change( null, index );
			return;
		}

		if ( arguments.length ) {
			if ( $.isArray( arguments[ 0 ] ) ) {
				vals = this.options.values;
				newValues = arguments[ 0 ];
				for ( i = 0; i < vals.length; i += 1 ) {
					vals[ i ] = this._trimAlignValue( newValues[ i ] );
					this._change( null, i );
				}
				this._refreshValue();
			} else {
				if ( this.options.values && this.options.values.length ) {
					return this._values( index );
				} else {
					return this.value();
				}
			}
		} else {
			return this._values();
		}
	},

	_setOption: function( key, value ) {
		var i,
			valsLength = 0;

		if ( key === "range" && this.options.range === true ) {
			if ( value === "min" ) {
				this.options.value = this._values( 0 );
				this.options.values = null;
			} else if ( value === "max" ) {
				this.options.value = this._values( this.options.values.length-1 );
				this.options.values = null;
			}
		}

		if ( $.isArray( this.options.values ) ) {
			valsLength = this.options.values.length;
		}

		$.Widget.prototype._setOption.apply( this, arguments );

		switch ( key ) {
			case "orientation":
				this._detectOrientation();
				this.element
					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
					.addClass( "ui-slider-" + this.orientation );
				this._refreshValue();
				break;
			case "value":
				this._animateOff = true;
				this._refreshValue();
				this._change( null, 0 );
				this._animateOff = false;
				break;
			case "values":
				this._animateOff = true;
				this._refreshValue();
				for ( i = 0; i < valsLength; i += 1 ) {
					this._change( null, i );
				}
				this._animateOff = false;
				break;
			case "min":
			case "max":
				this._animateOff = true;
				this._refreshValue();
				this._animateOff = false;
				break;
			case "range":
				this._animateOff = true;
				this._refresh();
				this._animateOff = false;
				break;
		}
	},

	//internal value getter
	// _value() returns value trimmed by min and max, aligned by step
	_value: function() {
		var val = this.options.value;
		val = this._trimAlignValue( val );

		return val;
	},

	//internal values getter
	// _values() returns array of values trimmed by min and max, aligned by step
	// _values( index ) returns single value trimmed by min and max, aligned by step
	_values: function( index ) {
		var val,
			vals,
			i;

		if ( arguments.length ) {
			val = this.options.values[ index ];
			val = this._trimAlignValue( val );

			return val;
		} else if ( this.options.values && this.options.values.length ) {
			// .slice() creates a copy of the array
			// this copy gets trimmed by min and max and then returned
			vals = this.options.values.slice();
			for ( i = 0; i < vals.length; i+= 1) {
				vals[ i ] = this._trimAlignValue( vals[ i ] );
			}

			return vals;
		} else {
			return [];
		}
	},

	// returns the step-aligned value that val is closest to, between (inclusive) min and max
	_trimAlignValue: function( val ) {
		if ( val <= this._valueMin() ) {
			return this._valueMin();
		}
		if ( val >= this._valueMax() ) {
			return this._valueMax();
		}
		var step = ( this.options.step > 0 ) ? this.options.step : 1,
			valModStep = (val - this._valueMin()) % step,
			alignValue = val - valModStep;

		if ( Math.abs(valModStep) * 2 >= step ) {
			alignValue += ( valModStep > 0 ) ? step : ( -step );
		}

		// Since JavaScript has problems with large floats, round
		// the final value to 5 digits after the decimal point (see #4124)
		return parseFloat( alignValue.toFixed(5) );
	},

	_valueMin: function() {
		return this.options.min;
	},

	_valueMax: function() {
		return this.options.max;
	},

	_refreshValue: function() {
		var lastValPercent, valPercent, value, valueMin, valueMax,
			oRange = this.options.range,
			o = this.options,
			that = this,
			animate = ( !this._animateOff ) ? o.animate : false,
			_set = {};

		if ( this.options.values && this.options.values.length ) {
			this.handles.each(function( i ) {
				valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
				_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
				if ( that.options.range === true ) {
					if ( that.orientation === "horizontal" ) {
						if ( i === 0 ) {
							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
						}
						if ( i === 1 ) {
							that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
						}
					} else {
						if ( i === 0 ) {
							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
						}
						if ( i === 1 ) {
							that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
						}
					}
				}
				lastValPercent = valPercent;
			});
		} else {
			value = this.value();
			valueMin = this._valueMin();
			valueMax = this._valueMax();
			valPercent = ( valueMax !== valueMin ) ?
					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
					0;
			_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );

			if ( oRange === "min" && this.orientation === "horizontal" ) {
				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
			}
			if ( oRange === "max" && this.orientation === "horizontal" ) {
				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
			}
			if ( oRange === "min" && this.orientation === "vertical" ) {
				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
			}
			if ( oRange === "max" && this.orientation === "vertical" ) {
				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
			}
		}
	},

	_handleEvents: {
		keydown: function( event ) {
			var allowed, curVal, newVal, step,
				index = $( event.target ).data( "ui-slider-handle-index" );

			switch ( event.keyCode ) {
				case $.ui.keyCode.HOME:
				case $.ui.keyCode.END:
				case $.ui.keyCode.PAGE_UP:
				case $.ui.keyCode.PAGE_DOWN:
				case $.ui.keyCode.UP:
				case $.ui.keyCode.RIGHT:
				case $.ui.keyCode.DOWN:
				case $.ui.keyCode.LEFT:
					event.preventDefault();
					if ( !this._keySliding ) {
						this._keySliding = true;
						$( event.target ).addClass( "ui-state-active" );
						allowed = this._start( event, index );
						if ( allowed === false ) {
							return;
						}
					}
					break;
			}

			step = this.options.step;
			if ( this.options.values && this.options.values.length ) {
				curVal = newVal = this.values( index );
			} else {
				curVal = newVal = this.value();
			}

			switch ( event.keyCode ) {
				case $.ui.keyCode.HOME:
					newVal = this._valueMin();
					break;
				case $.ui.keyCode.END:
					newVal = this._valueMax();
					break;
				case $.ui.keyCode.PAGE_UP:
					newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
					break;
				case $.ui.keyCode.PAGE_DOWN:
					newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
					break;
				case $.ui.keyCode.UP:
				case $.ui.keyCode.RIGHT:
					if ( curVal === this._valueMax() ) {
						return;
					}
					newVal = this._trimAlignValue( curVal + step );
					break;
				case $.ui.keyCode.DOWN:
				case $.ui.keyCode.LEFT:
					if ( curVal === this._valueMin() ) {
						return;
					}
					newVal = this._trimAlignValue( curVal - step );
					break;
			}

			this._slide( event, index, newVal );
		},
		click: function( event ) {
			event.preventDefault();
		},
		keyup: function( event ) {
			var index = $( event.target ).data( "ui-slider-handle-index" );

			if ( this._keySliding ) {
				this._keySliding = false;
				this._stop( event, index );
				this._change( event, index );
				$( event.target ).removeClass( "ui-state-active" );
			}
		}
	}

});

}(jQuery));
/**
 * RedditParser: Given a reddit submission URL, parses all comments into a JSON tree structure:
 *   parent: {node} Link to parent node object. null only for the root node.
 *   children: {Array(node)} List of child nodes.  If a leaf node, length will be 0.
 *
 * With this tree, we have object-equalities like: someNode.children[4].parent === someNode.
 *
 * We include all reddit node attributes in these nodes.  The interesting ones are:
 *   author: {string} Username
 *   body: {string} Contents of post
 *   created_utc: {number} ms-since-epoch of when comment was posted (js friendly Date constructor param)
 *   up: {number} upvotes
 *   downs: {number} downvotes
 *   score: {number} upvotes minus downvotes
 *
 * See normalizeNodes() for any transformations / derived data we might have created.
 *
 * TO USE:
 *   When called, returns a jqDeferred promise that gets resolved when the conversation is completely loaded.
 *
 *   For example:
 *     RedditParser('www.reddit.com/r/dataisbeautiful/comments/1ty2i3')
 *     .done(function(rootNode) {
 *       console.log('root node:', rootNode);
 *     })
 *
 * TODO:
 *   Does not yet load any 'more comments' expansions.
 */
define(["jquery"], function($) {
  var printMessage = function(msg) {
    console.log('[RedditParser] ' + msg);
  };

  // Do any appropriate transforms
  var normalizeNode = function(node, parent) {
    node.parent = parent;
    node.children = [];

    // calculate net votes
    node.score = node.ups - node.downs;

    // reddit reports in sec-since-epoch.  Make js-friendly ms-since-epoch
    node.created *= 1000;
    node.created_utc *= 1000;
  };

  /**
   * Converts a redditURL to a JSON comment tree
   * @param {string} redditUrl link to comment thread, like http://www.reddit.com/r/science/comments/2058f5
   * @param {boolean} [noCircular] True to avoid setting circular references, so you can output this to JSON
   */
  return function(redditUrl, noCircular) {
    var deferred = $.Deferred();

    if (!redditUrl || redditUrl.indexOf("comments") === -1) {
      deferred.reject("Expected a URL to reddit comments, eg www.reddit.com/r/dataisbeautiful/comments/1ty2i3");
      return;
    }

    // Cut off trailing slash if it exists
    if (redditUrl.lastIndexOf("/") === redditUrl.length - 1)
      redditUrl = redditUrl.substring(0, redditUrl.length - 1);

    printMessage("Retrieving comment tree...");
    $.getJSON((redditUrl.search('http') > -1 ? '' : 'http://') + redditUrl + ".json?jsonp=?")
    .error(function(err) {
      deferred.reject(new Error("Error retreiving reddit URL comments: " + err));
    })
    .then(function(data) {
      if (data.length != 2) {
        deferred.reject(new Error("Unexpected response length -- expected 2, got " + data));
        return;
      } else if (data[1].kind != "Listing") {
        deferred.reject(new Error("Bad comment container -- expected type 'Listing'"));
        return;
      }
      printMessage("Got it!");

      var root = data[0].data.children[0].data, // Should be a t3 (Link)

        /**
         * List of t3 (comment) Things to visit
         * Any comment in here should have already been added to it's parent's children list..
         */
        toVisit = [],

        /**
         * List of Things that need more API calls to yield comments (eg type: "more").
         * Thing.parent shall always be set on these to the parent node, and the comments that are yielded will be put
         * into that parent's .children list.
         */
        jobQueue = [];

      normalizeNode(root, null); // no parent for root node

      printMessage("Expecting " + root.num_comments + " comments.  Starting parsing.");

      // Bootstrap recursion by adding top-level children to root node
      data[1].data.children.forEach(function(child, i) {
        if (child.kind === "t1") {
          root.children.push(child.data);
          normalizeNode(child.data, noCircular ? undefined : root);
          toVisit.push(child);
        } else {
          // If it's not a t1 / comment, it's something that needs to be asynchronously retrieved (probably a "more")
          // Add it to the jobQueue, but inject the parent reference so the ultimate node tree can be built properly.
          child.parent = noCircular ? undefined : root;
          jobQueue.push(child);
        }
      });

      // Unpack the queue
      var node, i=0;
      while (toVisit.length > 0) {
        console.log("Visiting child: ", i++);
        node = toVisit.pop();

        if (node.kind === "t1") {
          // node.data is the actual comment node that we want extracted.
          // It should already be in it's parent's children list, so lets see if it has any children.
          // If so, add them to the toVisit list or add them to the job queue
          if (node.data.replies) {

            if (node.data.replies.kind !== "Listing") {
              // Should never hit -- this is an API schema I haven't encountered
              console.warn("Warning: Unexpected type for replies.  Expected 'Listing', but got:", node.data.replies.kind);
              continue;
            }

            node.data.replies.data.children.forEach(function(child) {
              if (child.kind === "t1") {
                node.data.children.push(child.data);
                normalizeNode(child.data, noCircular ? undefined : node.data);
                toVisit.push(child);
              } else {
                child.parent = noCircular ? undefined : node.data;
                jobQueue.push(child);
              }
            });

            // node.data is our extracted comment node, so hide its references to the confusing Reddit schema structure
            delete node.data.replies;
          }

        } else {
          // Should never hit.  Did we add a job (type:"more") to the toVisit list?
          console.warn("Warning: Visiting unexpected node kind: ", node.kind, "\tnode:", node);
        }
      }

      deferred.resolve(root, jobQueue);


    })
    .fail(function(err) {
      deferred.reject(new Error("Unexpected Error: " + err));
    });

    return deferred.promise();
  };
});
{"domain":"self.science","banned_by":null,"media_embed":{},"subreddit":"science","selftext_html":"&lt;!-- SC_OFF --&gt;&lt;div class=\"md\"&gt;&lt;p&gt;Thank you &lt;a href=\"/r/science\"&gt;/r/science&lt;/a&gt; and its moderators for letting us be a part of your Science AMA series!  Once again, I&amp;#39;m humbled to be allowed to collaborate with people much, much greater than myself, and I&amp;#39;m extremely happy to bring this project to Reddit, so I think this will be a lot of fun!&lt;/p&gt;\n\n&lt;p&gt;Please feel free to ask us anything at all, whether it be about evolution or our individual fields of study, and we&amp;#39;d be glad to give you an answer!  Everyone will be here at 1 PM EST to answer questions, but we&amp;#39;ll try to answer some earlier and then throughout the day after that.&lt;/p&gt;\n\n&lt;p&gt;&amp;quot;Great Adaptations&amp;quot; is a children&amp;#39;s book which aims to explain evolutionary adaptations in a fun and easy way. It will contain ten stories, each one written by author and evolutionary biologist Dr. Tiffany Taylor, who is working with each scientist to best relate their research and how it ties in to evolutionary concepts. Even better, each story is illustrated by a wonderful dream team of artists including James Monroe, Zach Wienersmith (from SMBC comics) and many more!&lt;/p&gt;\n\n&lt;p&gt;For parents or sharp kids who want to know more about the research talked about in the story, each scientist will also provide a short commentary on their work within the book, too!&lt;/p&gt;\n\n&lt;p&gt;Today we&amp;#39;re joined by:&lt;/p&gt;\n\n&lt;ul&gt;\n&lt;li&gt;&lt;p&gt;Dr. Tiffany Taylor (tiffanyevolves), Post-Doctoral Research Fellow and evolutionary biologist at the University of Reading in the UK. She has done her research in the field of genetics, and is the author of &amp;quot;Great Adaptations&amp;quot; who will be working with the scientists to relate their research to the kids!&lt;/p&gt;&lt;/li&gt;\n&lt;li&gt;&lt;p&gt;Dr. David Sloan Wilson (davidswilson), Distinguished Professor at Binghamton University in the Departments of Biological Sciences and Anthropology who works on the evolution of altruism.&lt;/p&gt;&lt;/li&gt;\n&lt;li&gt;&lt;p&gt;Dr. Niels Dingemanse (dingemanse), joining us from the Max Planck Institute for Ornithology in Germany, a researcher in the ecology of variation, who will be writing a section on personalities in birds.&lt;/p&gt;&lt;/li&gt;\n&lt;li&gt;&lt;p&gt;Ben Eisenkop (Unidan), from Binghamton University, an ecosystem ecologist working on his PhD concerning nitrogen biogeochemical cycling.&lt;/p&gt;&lt;/li&gt;\n&lt;/ul&gt;\n\n&lt;p&gt;We&amp;#39;ll also be joined intermittently by Robert Kadar (evolutionbob), an evolution advocate who came up with the idea of &amp;quot;Great Adaptations&amp;quot; and Baba Brinkman (Baba_Brinkman), a Canadian rapper who has weaved evolution and other ideas into his performances.  One of our artists, Zach Weinersmith (MrWeiner) will also be joining us when he can!&lt;/p&gt;\n\n&lt;p&gt;Special thanks to &lt;a href=\"/r/atheism\"&gt;/r/atheism&lt;/a&gt; and &lt;a href=\"/r/dogecoin\"&gt;/r/dogecoin&lt;/a&gt; for helping us promote this AMA, too!  If you&amp;#39;re interested in donating to our cause via dogecoin, we&amp;#39;ve set up an address at DSzGRTzrWGB12DUB6hmixQmS8QD4GsAJY2 which will be applied to the Kickstarter manually, as they do not accept the coin directly.&lt;/p&gt;\n\n&lt;p&gt;&lt;strong&gt;EDIT: &lt;del&gt;Over seven hours in and still going strong!  Wonderful questions so far, keep &amp;#39;em coming!&lt;/del&gt;&lt;/strong&gt;&lt;/p&gt;\n\n&lt;p&gt;&lt;strong&gt;EDIT 2: Over ten hours in and still answering, really great questions and comments thus far!&lt;/strong&gt;&lt;/p&gt;\n\n&lt;p&gt;If you&amp;#39;re interested in learning more about &amp;quot;Great Adaptations&amp;quot; or want to help us fund it, &lt;a href=\"https://www.kickstarter.com/projects/breadpiginc/great-adaptations-a-childrens-book-about-evolution?ref=live\"&gt;please check out our fundraising page here!&lt;/a&gt;&lt;/p&gt;\n&lt;/div&gt;&lt;!-- SC_ON --&gt;","selftext":"Thank you /r/science and its moderators for letting us be a part of your Science AMA series!  Once again, I'm humbled to be allowed to collaborate with people much, much greater than myself, and I'm extremely happy to bring this project to Reddit, so I think this will be a lot of fun!\n\nPlease feel free to ask us anything at all, whether it be about evolution or our individual fields of study, and we'd be glad to give you an answer!  Everyone will be here at 1 PM EST to answer questions, but we'll try to answer some earlier and then throughout the day after that.\n\n\"Great Adaptations\" is a children's book which aims to explain evolutionary adaptations in a fun and easy way. It will contain ten stories, each one written by author and evolutionary biologist Dr. Tiffany Taylor, who is working with each scientist to best relate their research and how it ties in to evolutionary concepts. Even better, each story is illustrated by a wonderful dream team of artists including James Monroe, Zach Wienersmith (from SMBC comics) and many more!\n\nFor parents or sharp kids who want to know more about the research talked about in the story, each scientist will also provide a short commentary on their work within the book, too!\n\nToday we're joined by:\n\n* Dr. Tiffany Taylor (tiffanyevolves), Post-Doctoral Research Fellow and evolutionary biologist at the University of Reading in the UK. She has done her research in the field of genetics, and is the author of \"Great Adaptations\" who will be working with the scientists to relate their research to the kids!\n\n* Dr. David Sloan Wilson (davidswilson), Distinguished Professor at Binghamton University in the Departments of Biological Sciences and Anthropology who works on the evolution of altruism.\n\n* Dr. Niels Dingemanse (dingemanse), joining us from the Max Planck Institute for Ornithology in Germany, a researcher in the ecology of variation, who will be writing a section on personalities in birds.\n\n* Ben Eisenkop (Unidan), from Binghamton University, an ecosystem ecologist working on his PhD concerning nitrogen biogeochemical cycling.\n\nWe'll also be joined intermittently by Robert Kadar (evolutionbob), an evolution advocate who came up with the idea of \"Great Adaptations\" and Baba Brinkman (Baba_Brinkman), a Canadian rapper who has weaved evolution and other ideas into his performances.  One of our artists, Zach Weinersmith (MrWeiner) will also be joining us when he can!\n\nSpecial thanks to /r/atheism and /r/dogecoin for helping us promote this AMA, too!  If you're interested in donating to our cause via dogecoin, we've set up an address at DSzGRTzrWGB12DUB6hmixQmS8QD4GsAJY2 which will be applied to the Kickstarter manually, as they do not accept the coin directly.\n\n**EDIT: ~~Over seven hours in and still going strong!  Wonderful questions so far, keep 'em coming!~~**\n\n**EDIT 2: Over ten hours in and still answering, really great questions and comments thus far!**\n\nIf you're interested in learning more about \"Great Adaptations\" or want to help us fund it, [please check out our fundraising page here!](https://www.kickstarter.com/projects/breadpiginc/great-adaptations-a-childrens-book-about-evolution?ref=live)","likes":null,"secure_media":null,"link_flair_text":"Biology","id":"2058f5","gilded":0,"secure_media_embed":{},"clicked":false,"stickied":false,"author":"Unidan","media":null,"score":2130,"approved_by":null,"over_18":false,"hidden":false,"thumbnail":"","subreddit_id":"t5_mouw","edited":1394589958,"link_flair_css_class":"bio","author_flair_css_class":null,"downs":9511,"saved":false,"is_self":true,"permalink":"/r/science/comments/2058f5/unidan_here_with_a_team_of_evolutionary/","name":"t3_2058f5","created":1394581235000,"url":"http://www.reddit.com/r/science/comments/2058f5/unidan_here_with_a_team_of_evolutionary/","author_flair_text":null,"title":"Unidan here with a team of evolutionary biologists who are collaborating on \"Great Adaptations,\" a children's book about evolution! Ask Us Anything!","created_utc":1394552435000,"ups":11641,"num_comments":1184,"visited":false,"num_reports":null,"distinguished":null,"parent":null,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwmgc","gilded":0,"author":"AlbirdEinstein","parent_id":"t3_2058f5","approved_by":null,"body":"I'm a pharmacy student, and I've been learning a lot about bacterial evolution towards antibiotic resistance. My question is, if a certain antibiotic has become obsolete (methicillin for example) and isn't used for 50 or so years, will the bacteria \"forget\" it's immunity? It seems as though creating enzymes for antibiotic protection consumes energy. If it was creating this immunity with no purpose, the ones who weren't doing that would be at an advantage, able to more quickly reproduce? Methicillin might be a bad example since there are still beta lactams being used, but if we were to stop using all beta lactams for years?","edited":false,"author_flair_css_class":null,"downs":59,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I&amp;#39;m a pharmacy student, and I&amp;#39;ve been learning a lot about bacterial evolution towards antibiotic resistance. My question is, if a certain antibiotic has become obsolete (methicillin for example) and isn&amp;#39;t used for 50 or so years, will the bacteria &amp;quot;forget&amp;quot; it&amp;#39;s immunity? It seems as though creating enzymes for antibiotic protection consumes energy. If it was creating this immunity with no purpose, the ones who weren&amp;#39;t doing that would be at an advantage, able to more quickly reproduce? Methicillin might be a bad example since there are still beta lactams being used, but if we were to stop using all beta lactams for years?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwmgc","created":1394583848000,"author_flair_text":null,"created_utc":1394555048000,"distinguished":null,"num_reports":null,"ups":331,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzxlbz","gilded":0,"author":"Unidan","parent_id":"t1_cfzwmgc","approved_by":null,"body":"Yes, presumably if the selective pressure to keep that antibiotic resistance is removed (i.e. we stop using that antibiotic because it is no longer effective) it is definitely possible that the immunity can be lost; however, that assumes a non-specific timeline, so I'm not sure I can comment on exactly *how* long that would take, just simply that it is possible.  \n\nYou would still need to go about *losing* that trait, but without selective pressure, traits can be lost in a population, just like other traits can disappear.  A good example of this would be how selective pressure to *keep* scent detection traits (sorry, I'm an animal behaviorist/ecologist, so all my examples are non-petri dish) was very high when tetrapods first appeared on land, but those traits quickly disappeared in some mammals (e.g. whales and other cetaceans) as they returned to the ocean.  As that selective pressure was relaxed, the trait was mainly lost from the population.","edited":false,"author_flair_css_class":null,"downs":72,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Yes, presumably if the selective pressure to keep that antibiotic resistance is removed (i.e. we stop using that antibiotic because it is no longer effective) it is definitely possible that the immunity can be lost; however, that assumes a non-specific timeline, so I&amp;#39;m not sure I can comment on exactly &lt;em&gt;how&lt;/em&gt; long that would take, just simply that it is possible.  &lt;/p&gt;\n\n&lt;p&gt;You would still need to go about &lt;em&gt;losing&lt;/em&gt; that trait, but without selective pressure, traits can be lost in a population, just like other traits can disappear.  A good example of this would be how selective pressure to &lt;em&gt;keep&lt;/em&gt; scent detection traits (sorry, I&amp;#39;m an animal behaviorist/ecologist, so all my examples are non-petri dish) was very high when tetrapods first appeared on land, but those traits quickly disappeared in some mammals (e.g. whales and other cetaceans) as they returned to the ocean.  As that selective pressure was relaxed, the trait was mainly lost from the population.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzxlbz","created":1394585970000,"author_flair_text":null,"created_utc":1394557170000,"distinguished":null,"num_reports":null,"ups":383,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg035a7","gilded":0,"author":"yourboyaddi","parent_id":"t1_cfzxlbz","approved_by":null,"body":"Wouldn't this be how HIV treatment works? I seem to remember that you switch between drugs as the virus adapts to one in the hopes of the virus not being resistant anymore by the time you cycle through all the drugs and use the same drug again. I think the resistant virus was less energy efficient or something like that so when left alone the non-resistant virus would overpower the other one.","edited":false,"author_flair_css_class":null,"downs":7,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Wouldn&amp;#39;t this be how HIV treatment works? I seem to remember that you switch between drugs as the virus adapts to one in the hopes of the virus not being resistant anymore by the time you cycle through all the drugs and use the same drug again. I think the resistant virus was less energy efficient or something like that so when left alone the non-resistant virus would overpower the other one.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg035a7","created":1394597631000,"author_flair_text":null,"created_utc":1394568831000,"distinguished":null,"num_reports":null,"ups":32,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg03ekm","gilded":0,"author":"H_is_for_Human","parent_id":"t1_cg035a7","approved_by":null,"body":"Not Unidan, but a big part of this (that would not apply as readily to bacteria) is the fact that HIV undergoes rapid mutation and replication, to the point where any given patient has lots of variants. While some variants may be resistant to some drugs, no variants (hopefully) are resistant to all drugs. \n\nSo with each drug you are killing lots of the viruses, but whatever small population is resistant will remain. This variant will become the new dominant variant in the patient, but switching the drugs kills the new dominant variant, and the cycle repeats.\n\nTherefore switching drugs prevents any one variant from replicating too much, although eventually you are selecting for more and more resistance to the point where one or more of the drugs might become completely ineffective in a given patient.\n\nThe other thing we like to do with modern patients is give them drug cocktails that kill almost all of the virus. This keeps the number of new viruses being produced as low as possible, which reduces the chances that a mutation for drug resistance will occur in any given patient.","edited":1394571206,"author_flair_css_class":null,"downs":14,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Not Unidan, but a big part of this (that would not apply as readily to bacteria) is the fact that HIV undergoes rapid mutation and replication, to the point where any given patient has lots of variants. While some variants may be resistant to some drugs, no variants (hopefully) are resistant to all drugs. &lt;/p&gt;\n\n&lt;p&gt;So with each drug you are killing lots of the viruses, but whatever small population is resistant will remain. This variant will become the new dominant variant in the patient, but switching the drugs kills the new dominant variant, and the cycle repeats.&lt;/p&gt;\n\n&lt;p&gt;Therefore switching drugs prevents any one variant from replicating too much, although eventually you are selecting for more and more resistance to the point where one or more of the drugs might become completely ineffective in a given patient.&lt;/p&gt;\n\n&lt;p&gt;The other thing we like to do with modern patients is give them drug cocktails that kill almost all of the virus. This keeps the number of new viruses being produced as low as possible, which reduces the chances that a mutation for drug resistance will occur in any given patient.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg03ekm","created":1394598130000,"author_flair_text":null,"created_utc":1394569330000,"distinguished":null,"num_reports":null,"ups":63,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg07vdc","gilded":0,"author":"Unidan","parent_id":"t1_cg03ekm","approved_by":null,"body":"Thanks for the great answer!","edited":false,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Thanks for the great answer!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg07vdc","created":1394607097000,"author_flair_text":null,"created_utc":1394578297000,"distinguished":null,"num_reports":null,"ups":35,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg086zo","gilded":0,"author":"H_is_for_Human","parent_id":"t1_cg07vdc","approved_by":null,"body":"No problem - thanks for your work in bringing accurate biology information to the public!","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;No problem - thanks for your work in bringing accurate biology information to the public!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg086zo","created":1394607798000,"author_flair_text":null,"created_utc":1394578998000,"distinguished":null,"num_reports":null,"ups":25,"children":[],"score":24}],"score":32}],"score":49}],"score":25},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzxr4v","gilded":0,"author":"skydog22","parent_id":"t1_cfzxlbz","approved_by":null,"body":"Is there any we can be the source of that selective pressure? Can we force a strain of bacteria to evolve to lose the immunity?","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Is there any we can be the source of that selective pressure? Can we force a strain of bacteria to evolve to lose the immunity?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzxr4v","created":1394586317000,"author_flair_text":null,"created_utc":1394557517000,"distinguished":null,"num_reports":null,"ups":39,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg010ti","gilded":0,"author":"Unidan","parent_id":"t1_cfzxr4v","approved_by":null,"body":"It would be very difficult to do this effectively, as the situations may differ case-to-case.  We'd essentially have to engineer some *other* conditions that affect the same traits in a multitude of ways to encourage loss of specific traits, or some other strange to conceive situation.  It would be extra effort on our part for no reason.","edited":false,"author_flair_css_class":null,"downs":12,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;It would be very difficult to do this effectively, as the situations may differ case-to-case.  We&amp;#39;d essentially have to engineer some &lt;em&gt;other&lt;/em&gt; conditions that affect the same traits in a multitude of ways to encourage loss of specific traits, or some other strange to conceive situation.  It would be extra effort on our part for no reason.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg010ti","created":1394593237000,"author_flair_text":null,"created_utc":1394564437000,"distinguished":null,"num_reports":null,"ups":76,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg03k8t","gilded":0,"author":"KeScoBo","parent_id":"t1_cg010ti","approved_by":null,"body":"Simply passaging a bug under non-selective conditions for a few generations is often enough for them to lose antibiotic resistance (and a whole host of other virulence mechanisms). \n\nBacteria are much more genetically fluid than eukaryotes. ","edited":false,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Simply passaging a bug under non-selective conditions for a few generations is often enough for them to lose antibiotic resistance (and a whole host of other virulence mechanisms). &lt;/p&gt;\n\n&lt;p&gt;Bacteria are much more genetically fluid than eukaryotes. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg03k8t","created":1394598437000,"author_flair_text":null,"created_utc":1394569637000,"distinguished":null,"num_reports":null,"ups":16,"children":[],"score":13}],"score":64},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzzgwf","gilded":0,"author":"Mampfificationful","parent_id":"t1_cfzxr4v","approved_by":null,"body":"It would be really hard. Bacteria will lose an immunity it doesn't need when there's high selective pressure on saving energy/resources so the best way would be to create an environment that offers low energy/resources and of course to not use the drug it's immune to. \n\nIt would be really hard to deny Bacteria in our own bodies the needed resources though, because those are the things we need aswell. Our food.","edited":false,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;It would be really hard. Bacteria will lose an immunity it doesn&amp;#39;t need when there&amp;#39;s high selective pressure on saving energy/resources so the best way would be to create an environment that offers low energy/resources and of course to not use the drug it&amp;#39;s immune to. &lt;/p&gt;\n\n&lt;p&gt;It would be really hard to deny Bacteria in our own bodies the needed resources though, because those are the things we need aswell. Our food.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzzgwf","created":1394589973000,"author_flair_text":null,"created_utc":1394561173000,"distinguished":null,"num_reports":null,"ups":14,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg043it","gilded":0,"author":"InFearn0","parent_id":"t1_cfzzgwf","approved_by":null,"body":"Wouldn't we want the good bacteria we have squatting in our bodies to be resistant to antibiotics so that when she administer antibiotics we kill the invading bacteria (but not the squatters)?","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Wouldn&amp;#39;t we want the good bacteria we have squatting in our bodies to be resistant to antibiotics so that when she administer antibiotics we kill the invading bacteria (but not the squatters)?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg043it","created":1394599481000,"author_flair_text":null,"created_utc":1394570681000,"distinguished":null,"num_reports":null,"ups":3,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg06dz2","gilded":0,"author":"6roybatty6","parent_id":"t1_cg043it","approved_by":null,"body":"Not necessarily, because of horizontal gene transfer.  Bacteria can trade loops of DNA called plasmids that code for particular traits, even if they're not of the same species.  It's just what they do, it fills a similar niche to sex, mixing up the gene pool.  You wouldn't want your gut bacteria giving some invading nasty the key to the kingdom.\n\nThis is one of the reasons you always end up feeling like crap when you complete a course of antibiotics-  it has to wipe out your gut bacteria so they don't become antibiotic-resistant and pass the genes on to whatever lurking horror lives in the sewers.\n","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Not necessarily, because of horizontal gene transfer.  Bacteria can trade loops of DNA called plasmids that code for particular traits, even if they&amp;#39;re not of the same species.  It&amp;#39;s just what they do, it fills a similar niche to sex, mixing up the gene pool.  You wouldn&amp;#39;t want your gut bacteria giving some invading nasty the key to the kingdom.&lt;/p&gt;\n\n&lt;p&gt;This is one of the reasons you always end up feeling like crap when you complete a course of antibiotics-  it has to wipe out your gut bacteria so they don&amp;#39;t become antibiotic-resistant and pass the genes on to whatever lurking horror lives in the sewers.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg06dz2","created":1394603934000,"author_flair_text":null,"created_utc":1394575134000,"distinguished":null,"num_reports":null,"ups":4,"children":[],"score":4}],"score":3}],"score":11}],"score":37}],"score":311},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg03pjn","gilded":0,"author":"essenceoferlenmeyer","parent_id":"t1_cfzwmgc","approved_by":null,"body":"The concept you're referring to is antibiotic cycling, and there are definite supporters for it. You can read a nice article written about it in 2006 [here](http://cid.oxfordjournals.org/content/43/Supplement_2/S82.full), though the authors did report that \"at the scale relevant to bacterial populations, mixing of antibiotic classes imposes greater heterogeneity than does cycling\". ","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;The concept you&amp;#39;re referring to is antibiotic cycling, and there are definite supporters for it. You can read a nice article written about it in 2006 &lt;a href=\"http://cid.oxfordjournals.org/content/43/Supplement_2/S82.full\"&gt;here&lt;/a&gt;, though the authors did report that &amp;quot;at the scale relevant to bacterial populations, mixing of antibiotic classes imposes greater heterogeneity than does cycling&amp;quot;. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg03pjn","created":1394598725000,"author_flair_text":null,"created_utc":1394569925000,"distinguished":null,"num_reports":null,"ups":13,"children":[],"score":13}],"score":272},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg02ma0","gilded":0,"author":"dingemanse_primus","parent_id":"t3_2058f5","approved_by":null,"body":"so dad,\nI didn'd know that your institute is in norway. so could you explain why we had to learn german? This may also explain why people don't understand *your* german. ","edited":false,"author_flair_css_class":null,"downs":8,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;so dad,\nI didn&amp;#39;d know that your institute is in norway. so could you explain why we had to learn german? This may also explain why people don&amp;#39;t understand &lt;em&gt;your&lt;/em&gt; german. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg02ma0","created":1394596577000,"author_flair_text":null,"created_utc":1394567777000,"distinguished":null,"num_reports":null,"ups":52,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg02wwu","gilded":0,"author":"dingemanse","parent_id":"t1_cg02ma0","approved_by":null,"body":"Son, you are right we are in Germany not in Norway (not sure how this happened). Time to go to bed now.","edited":false,"author_flair_css_class":"journ","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Son, you are right we are in Germany not in Norway (not sure how this happened). Time to go to bed now.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg02wwu","created":1394597177000,"author_flair_text":"Great Adaptations","created_utc":1394568377000,"distinguished":null,"num_reports":null,"ups":34,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg02yz6","gilded":0,"author":"Unidan","parent_id":"t1_cg02wwu","approved_by":null,"body":"Haha, I had a nice laugh at this, I just corrected the error after I spotted it! :)","edited":false,"author_flair_css_class":null,"downs":4,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Haha, I had a nice laugh at this, I just corrected the error after I spotted it! :)&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg02yz6","created":1394597290000,"author_flair_text":null,"created_utc":1394568490000,"distinguished":null,"num_reports":null,"ups":33,"children":[],"score":29}],"score":34}],"score":44},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzx8bx","gilded":0,"author":"DefenTheNation","parent_id":"t3_2058f5","approved_by":null,"body":"will the book contain resources and references for curious adults to expand their understanding of topics covered? kids like to ask the tough questions!","edited":false,"author_flair_css_class":null,"downs":15,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;will the book contain resources and references for curious adults to expand their understanding of topics covered? kids like to ask the tough questions!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzx8bx","created":1394585196000,"author_flair_text":null,"created_utc":1394556396000,"distinguished":null,"num_reports":null,"ups":118,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzxn6a","gilded":0,"author":"Unidan","parent_id":"t1_cfzx8bx","approved_by":null,"body":"Yes, absolutely!  Along with each of the children's stories, there will be a page for the adult reader by the scientist whose research was used describing the research in adult terms.","edited":false,"author_flair_css_class":null,"downs":24,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Yes, absolutely!  Along with each of the children&amp;#39;s stories, there will be a page for the adult reader by the scientist whose research was used describing the research in adult terms.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzxn6a","created":1394586080000,"author_flair_text":null,"created_utc":1394557280000,"distinguished":null,"num_reports":null,"ups":173,"children":[],"score":149}],"score":103},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg038hp","gilded":0,"author":"keener101","parent_id":"t3_2058f5","approved_by":null,"body":"Dr.  Wilson, I'm very excited to see you here. \n\nWould you mind giving redditors your strongest pitch on why multi - level selection theory is true?\n\nSimilarly, I'm interested in what you consider to be the strongest argument against it. \n\nThanks for the great work you guys do.  I'm an ecology student about to go into a PhD program and it's excited to see such a prominent biologist involved in outreach. ","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Dr.  Wilson, I&amp;#39;m very excited to see you here. &lt;/p&gt;\n\n&lt;p&gt;Would you mind giving redditors your strongest pitch on why multi - level selection theory is true?&lt;/p&gt;\n\n&lt;p&gt;Similarly, I&amp;#39;m interested in what you consider to be the strongest argument against it. &lt;/p&gt;\n\n&lt;p&gt;Thanks for the great work you guys do.  I&amp;#39;m an ecology student about to go into a PhD program and it&amp;#39;s excited to see such a prominent biologist involved in outreach. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg038hp","created":1394597802000,"author_flair_text":null,"created_utc":1394569002000,"distinguished":null,"num_reports":null,"ups":27,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg03ndq","gilded":0,"author":"davidswilson","parent_id":"t1_cg038hp","approved_by":null,"body":"Multilevel selection notes that natural selection can take place at different levels of a nested hierarchy: \n• Among genes within individuals\n• Among individuals within groups\n• Among groups in a multi-group population\n• And so on...\nAs soon as you make fitness comparisons in this way, it is controversial that natural selection can be a significant evolutionary force at higher levels of the hierarchy and that group selection is an especially strong force in human cultural evolution. There is no cogent argument against it. The appearance of disagreement is based on other frames of comparison; for example, by averaging the fitness of individuals across groups or the fitness of genes across individuals and groups. The situation is similar to someone who speaks only English complaining the German is confusing and wrong, just because he doesn't speak German. \n\nFor more on outreach, check out the Evolution Institute--easily found on Google.","edited":false,"author_flair_css_class":"journ","downs":7,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Multilevel selection notes that natural selection can take place at different levels of a nested hierarchy: \n• Among genes within individuals\n• Among individuals within groups\n• Among groups in a multi-group population\n• And so on...\nAs soon as you make fitness comparisons in this way, it is controversial that natural selection can be a significant evolutionary force at higher levels of the hierarchy and that group selection is an especially strong force in human cultural evolution. There is no cogent argument against it. The appearance of disagreement is based on other frames of comparison; for example, by averaging the fitness of individuals across groups or the fitness of genes across individuals and groups. The situation is similar to someone who speaks only English complaining the German is confusing and wrong, just because he doesn&amp;#39;t speak German. &lt;/p&gt;\n\n&lt;p&gt;For more on outreach, check out the Evolution Institute--easily found on Google.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg03ndq","created":1394598606000,"author_flair_text":"Great Adaptations","created_utc":1394569806000,"distinguished":null,"num_reports":null,"ups":35,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg07w4f","gilded":0,"author":"rhiever","parent_id":"t1_cg03ndq","approved_by":null,"body":"Reformatted for easier reading:\n\n&gt;Multilevel selection notes that natural selection can take place at different levels of a nested hierarchy:\n\n&gt;* Among genes within individuals\n\n&gt;* Among individuals within groups\n\n&gt;* Among groups in a multi-group population\n\n&gt;* And so on...\n\n&gt;As soon as you make fitness comparisons in this way, it is controversial that natural selection can be a significant evolutionary force at higher levels of the hierarchy and that group selection is an especially strong force in human cultural evolution. There is no cogent argument against it. The appearance of disagreement is based on other frames of comparison; for example, by averaging the fitness of individuals across groups or the fitness of genes across individuals and groups. The situation is similar to someone who speaks only English complaining the German is confusing and wrong, just because he doesn't speak German.\n\n&gt;For more on outreach, check out the Evolution Institute--easily found on Google.","edited":false,"author_flair_css_class":null,"downs":5,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Reformatted for easier reading:&lt;/p&gt;\n\n&lt;blockquote&gt;\n&lt;p&gt;Multilevel selection notes that natural selection can take place at different levels of a nested hierarchy:&lt;/p&gt;\n\n&lt;ul&gt;\n&lt;li&gt;&lt;p&gt;Among genes within individuals&lt;/p&gt;&lt;/li&gt;\n&lt;li&gt;&lt;p&gt;Among individuals within groups&lt;/p&gt;&lt;/li&gt;\n&lt;li&gt;&lt;p&gt;Among groups in a multi-group population&lt;/p&gt;&lt;/li&gt;\n&lt;li&gt;&lt;p&gt;And so on...&lt;/p&gt;&lt;/li&gt;\n&lt;/ul&gt;\n\n&lt;p&gt;As soon as you make fitness comparisons in this way, it is controversial that natural selection can be a significant evolutionary force at higher levels of the hierarchy and that group selection is an especially strong force in human cultural evolution. There is no cogent argument against it. The appearance of disagreement is based on other frames of comparison; for example, by averaging the fitness of individuals across groups or the fitness of genes across individuals and groups. The situation is similar to someone who speaks only English complaining the German is confusing and wrong, just because he doesn&amp;#39;t speak German.&lt;/p&gt;\n\n&lt;p&gt;For more on outreach, check out the Evolution Institute--easily found on Google.&lt;/p&gt;\n&lt;/blockquote&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg07w4f","created":1394607141000,"author_flair_text":null,"created_utc":1394578341000,"distinguished":null,"num_reports":null,"ups":17,"children":[],"score":12}],"score":28}],"score":25},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzykcr","gilded":0,"author":"dolphin_flogger","parent_id":"t3_2058f5","approved_by":null,"body":"How did laughter evolve, and will this be in the book? I think kids, and adults, would be interested in this one.","edited":false,"author_flair_css_class":null,"downs":8,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;How did laughter evolve, and will this be in the book? I think kids, and adults, would be interested in this one.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzykcr","created":1394588064000,"author_flair_text":null,"created_utc":1394559264000,"distinguished":null,"num_reports":null,"ups":49,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzyuqm","gilded":0,"author":"davidswilson","parent_id":"t1_cfzykcr","approved_by":null,"body":"Matthew Gervais and I wrote a scientific review article on this topic, which would be GREAT for Great Adaptations, but it must wait for volume 2. As a hint, it's pretty clear that laughter evolved before language.There was a period in our evolutionary history when we were laughing merrily without having a thing to say to each other :)\n","edited":false,"author_flair_css_class":"journ","downs":12,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Matthew Gervais and I wrote a scientific review article on this topic, which would be GREAT for Great Adaptations, but it must wait for volume 2. As a hint, it&amp;#39;s pretty clear that laughter evolved before language.There was a period in our evolutionary history when we were laughing merrily without having a thing to say to each other :)&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzyuqm","created":1394588674000,"author_flair_text":"Great Adaptations","created_utc":1394559874000,"distinguished":null,"num_reports":null,"ups":122,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg00f6j","gilded":0,"author":"Marimba_Ani","parent_id":"t1_cfzyuqm","approved_by":null,"body":"So slapstick/physical comedy IS the highest form of comedy, after all?!\n\nHa!","edited":false,"author_flair_css_class":null,"downs":13,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;So slapstick/physical comedy IS the highest form of comedy, after all?!&lt;/p&gt;\n\n&lt;p&gt;Ha!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg00f6j","created":1394591976000,"author_flair_text":null,"created_utc":1394563176000,"distinguished":null,"num_reports":null,"ups":91,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg020h4","gilded":0,"author":"Unidan","parent_id":"t1_cg00f6j","approved_by":null,"body":"You should read Kurt Vonnegut's book \"Galapagos\" which shows that even in a million years, fart jokes will still be funny.","edited":false,"author_flair_css_class":null,"downs":17,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;You should read Kurt Vonnegut&amp;#39;s book &amp;quot;Galapagos&amp;quot; which shows that even in a million years, fart jokes will still be funny.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg020h4","created":1394595337000,"author_flair_text":null,"created_utc":1394566537000,"distinguished":null,"num_reports":null,"ups":119,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg046lm","gilded":0,"author":"Rikkety","parent_id":"t1_cg020h4","approved_by":null,"body":"Louis C.K. said it best, in my opinion: \" You don't have to be smart to laugh at farts, but you'd have to be stupid not to.\"","edited":false,"author_flair_css_class":null,"downs":6,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Louis C.K. said it best, in my opinion: &amp;quot; You don&amp;#39;t have to be smart to laugh at farts, but you&amp;#39;d have to be stupid not to.&amp;quot;&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg046lm","created":1394599645000,"author_flair_text":null,"created_utc":1394570845000,"distinguished":null,"num_reports":null,"ups":52,"children":[],"score":46},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg06mcb","gilded":0,"author":"Kiloku","parent_id":"t1_cg020h4","approved_by":null,"body":"If I'm not mistaken, the oldest recorded joke (as in, written in a stone tablet or something) is a fart joke.\n\n[\"Something which has never occurred since time immemorial; a young woman did not fart in her husband's lap.\"](http://uk.reuters.com/article/2008/07/31/uk-britain-joke-life-idUKL129052420080731)\n\nSumerians didn't have the best comedians.","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;If I&amp;#39;m not mistaken, the oldest recorded joke (as in, written in a stone tablet or something) is a fart joke.&lt;/p&gt;\n\n&lt;p&gt;&lt;a href=\"http://uk.reuters.com/article/2008/07/31/uk-britain-joke-life-idUKL129052420080731\"&gt;&amp;quot;Something which has never occurred since time immemorial; a young woman did not fart in her husband&amp;#39;s lap.&amp;quot;&lt;/a&gt;&lt;/p&gt;\n\n&lt;p&gt;Sumerians didn&amp;#39;t have the best comedians.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg06mcb","created":1394604419000,"author_flair_text":null,"created_utc":1394575619000,"distinguished":null,"num_reports":null,"ups":10,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg096ym","gilded":0,"author":"ifightwalruses","parent_id":"t1_cg06mcb","approved_by":null,"body":"i'm sure something was lost in translation as we cannot directly translate cuneiform and it's later adaptions into any modern language ","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;i&amp;#39;m sure something was lost in translation as we cannot directly translate cuneiform and it&amp;#39;s later adaptions into any modern language &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg096ym","created":1394610002000,"author_flair_text":null,"created_utc":1394581202000,"distinguished":null,"num_reports":null,"ups":10,"children":[],"score":10}],"score":9}],"score":102}],"score":78},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg039ta","gilded":0,"author":"miwim","parent_id":"t1_cfzyuqm","approved_by":null,"body":"On this topic, why is OW! My balls! kind of humor so pervasive? Is it related to disabling reproductive capabilities of your competition?\n\nEDIT: Changed wording to make my question more generalized.","edited":1394569310,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;On this topic, why is OW! My balls! kind of humor so pervasive? Is it related to disabling reproductive capabilities of your competition?&lt;/p&gt;\n\n&lt;p&gt;EDIT: Changed wording to make my question more generalized.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg039ta","created":1394597870000,"author_flair_text":null,"created_utc":1394569070000,"distinguished":null,"num_reports":null,"ups":11,"children":[],"score":8}],"score":110},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzyye4","gilded":0,"author":"evolutionbob","parent_id":"t1_cfzykcr","approved_by":null,"body":"Hey. This one is a David question! I'll link you to this http://www.eurekalert.org/pub_releases/2005-11/uocp-tfl112205.php\n\nThis would be great for a story! It is interesting that laughter evolved before language. It is also a great way to bond individuals and groups together. A type of social lubricate.","edited":false,"author_flair_css_class":"journ","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Hey. This one is a David question! I&amp;#39;ll link you to this &lt;a href=\"http://www.eurekalert.org/pub_releases/2005-11/uocp-tfl112205.php\"&gt;http://www.eurekalert.org/pub_releases/2005-11/uocp-tfl112205.php&lt;/a&gt;&lt;/p&gt;\n\n&lt;p&gt;This would be great for a story! It is interesting that laughter evolved before language. It is also a great way to bond individuals and groups together. A type of social lubricate.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzyye4","created":1394588883000,"author_flair_text":"Great Adaptations: Robert Kadar","created_utc":1394560083000,"distinguished":null,"num_reports":null,"ups":19,"children":[],"score":19},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cfzytru","gilded":0,"author":"Unidan","parent_id":"t1_cfzykcr","approved_by":null,"body":"I don't believe we'll be covering it in this book, but we may want to look into it for ones in the future!","edited":false,"author_flair_css_class":null,"downs":5,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I don&amp;#39;t believe we&amp;#39;ll be covering it in this book, but we may want to look into it for ones in the future!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzytru","created":1394588617000,"author_flair_text":null,"created_utc":1394559817000,"distinguished":null,"num_reports":null,"ups":35,"children":[],"score":30}],"score":41},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzx0ny","gilded":0,"author":"asd_dad","parent_id":"t3_2058f5","approved_by":null,"body":"I have children with autism and because of that I meet and interact with a lot of other  parents that have children with various learning disorders.  There seems to be a growing sentiment amongst these parents that if it isn't obviously useful to their child that they will not allow their children to be educated in certain subjects.  Subjects like reading, writing and basic math will all be worked on while others, including history and science, might be passed over.\n\nDo you think it's important for children with learning disorders to learn about evolution and other areas of science?  If so, what would you say to these parents to get them to reconsider their position?","edited":false,"author_flair_css_class":null,"downs":15,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I have children with autism and because of that I meet and interact with a lot of other  parents that have children with various learning disorders.  There seems to be a growing sentiment amongst these parents that if it isn&amp;#39;t obviously useful to their child that they will not allow their children to be educated in certain subjects.  Subjects like reading, writing and basic math will all be worked on while others, including history and science, might be passed over.&lt;/p&gt;\n\n&lt;p&gt;Do you think it&amp;#39;s important for children with learning disorders to learn about evolution and other areas of science?  If so, what would you say to these parents to get them to reconsider their position?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzx0ny","created":1394584729000,"author_flair_text":null,"created_utc":1394555929000,"distinguished":null,"num_reports":null,"ups":73,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzxaq8","gilded":0,"author":"Unidan","parent_id":"t1_cfzx0ny","approved_by":null,"body":"I think kids really, really like learning about *function.*  \n\nFor me, when I'm with my nieces and nephews, they are incessantly asking about how things work, or why things work.  I think having a way to explain the multitude of animals around us, which can be very captivating for children is important.\n\nMy uncle is mentally handicapped, but faces some of the same problems in terms of trying to show him the relevancy of certain things.  That said, he is still fascinated with animals and the different types of animals that exist, so I'll likely be giving this book to him for the illustrations but also to maybe read to him, as he enjoys some children's books of the same level and seems to get the point of them very quickly.","edited":false,"author_flair_css_class":null,"downs":18,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I think kids really, really like learning about &lt;em&gt;function.&lt;/em&gt;  &lt;/p&gt;\n\n&lt;p&gt;For me, when I&amp;#39;m with my nieces and nephews, they are incessantly asking about how things work, or why things work.  I think having a way to explain the multitude of animals around us, which can be very captivating for children is important.&lt;/p&gt;\n\n&lt;p&gt;My uncle is mentally handicapped, but faces some of the same problems in terms of trying to show him the relevancy of certain things.  That said, he is still fascinated with animals and the different types of animals that exist, so I&amp;#39;ll likely be giving this book to him for the illustrations but also to maybe read to him, as he enjoys some children&amp;#39;s books of the same level and seems to get the point of them very quickly.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzxaq8","created":1394585339000,"author_flair_text":null,"created_utc":1394556539000,"distinguished":null,"num_reports":null,"ups":116,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg058w5","gilded":0,"author":"NorthofBarrie","parent_id":"t1_cfzxaq8","approved_by":null,"body":"As a teacher, I have used science and other subjects as a way to teach reading and math to autistic children.I had one student who was fascinated with the human body. Learning to read was done with simple books about the body. Any time a book couldn't be found at the appropriate level for her, we made one. I had another student who loved trains. Same idea. ","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;As a teacher, I have used science and other subjects as a way to teach reading and math to autistic children.I had one student who was fascinated with the human body. Learning to read was done with simple books about the body. Any time a book couldn&amp;#39;t be found at the appropriate level for her, we made one. I had another student who loved trains. Same idea. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg058w5","created":1394601689000,"author_flair_text":null,"created_utc":1394572889000,"distinguished":null,"num_reports":null,"ups":16,"children":[],"score":16}],"score":98}],"score":58},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwm9l","gilded":0,"author":"LyingPervert","parent_id":"t3_2058f5","approved_by":null,"body":"Howdy /u/Unidan! What do you think about cloned animals being reintroduced back into the wild and/or genetically modified animals (see goat that has spider web silk in it's milk) in general? ","edited":1394556036,"author_flair_css_class":null,"downs":17,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Howdy &lt;a href=\"/u/Unidan\"&gt;/u/Unidan&lt;/a&gt;! What do you think about cloned animals being reintroduced back into the wild and/or genetically modified animals (see goat that has spider web silk in it&amp;#39;s milk) in general? &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwm9l","created":1394583836000,"author_flair_text":null,"created_utc":1394555036000,"distinguished":null,"num_reports":null,"ups":106,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwzwg","gilded":0,"author":"Unidan","parent_id":"t1_cfzwm9l","approved_by":null,"body":"Hi there!\n\nI'm a little concerned for reintroducing cloned animals, as in many cases, their niche is already gone.  As an ecologist, I think it's unreasonable to just assume reproducing woolly mammoths and letting them loose will work out.  The world is a changing place, and we have certainly changed it, so perhaps its our responsibility to undo or minimize our *own* change, but some species have gone extinct completely naturally, as they have for billions of years.\n\nAt what point in history do we want to recreate?  10,000 years ago?  100,000 years ago?  At some point, it becomes an arbitrary choice.\n\nAs for genetically engineered individuals, they can certainly be promising for technological innovation.  I think if used responsibly and through public transparency and conservation of natural variation in populations, they have the potential for good things.  Some people certainly have a more financial or malicious angle to them, which can be worrisome.  ","edited":false,"author_flair_css_class":null,"downs":25,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Hi there!&lt;/p&gt;\n\n&lt;p&gt;I&amp;#39;m a little concerned for reintroducing cloned animals, as in many cases, their niche is already gone.  As an ecologist, I think it&amp;#39;s unreasonable to just assume reproducing woolly mammoths and letting them loose will work out.  The world is a changing place, and we have certainly changed it, so perhaps its our responsibility to undo or minimize our &lt;em&gt;own&lt;/em&gt; change, but some species have gone extinct completely naturally, as they have for billions of years.&lt;/p&gt;\n\n&lt;p&gt;At what point in history do we want to recreate?  10,000 years ago?  100,000 years ago?  At some point, it becomes an arbitrary choice.&lt;/p&gt;\n\n&lt;p&gt;As for genetically engineered individuals, they can certainly be promising for technological innovation.  I think if used responsibly and through public transparency and conservation of natural variation in populations, they have the potential for good things.  Some people certainly have a more financial or malicious angle to them, which can be worrisome.  &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwzwg","created":1394584683000,"author_flair_text":null,"created_utc":1394555883000,"distinguished":null,"num_reports":null,"ups":197,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg00odl","gilded":0,"author":"chainsawvigilante","parent_id":"t1_cfzwzwg","approved_by":null,"body":"What about reintroducing \"cloned\" animals like [*Nothrotheriops shastense*](http://en.wikipedia.org/wiki/Nothrotheriops) into a very specific [ecosystem that could benefit](http://coyot.es/crossing/2006/12/08/joshua-trees-and-extinction/) from it's reintroduction?","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;What about reintroducing &amp;quot;cloned&amp;quot; animals like &lt;a href=\"http://en.wikipedia.org/wiki/Nothrotheriops\"&gt;&lt;em&gt;Nothrotheriops shastense&lt;/em&gt;&lt;/a&gt; into a very specific &lt;a href=\"http://coyot.es/crossing/2006/12/08/joshua-trees-and-extinction/\"&gt;ecosystem that could benefit&lt;/a&gt; from it&amp;#39;s reintroduction?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg00odl","created":1394592507000,"author_flair_text":null,"created_utc":1394563707000,"distinguished":null,"num_reports":null,"ups":38,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg012rg","gilded":0,"author":"Unidan","parent_id":"t1_cg00odl","approved_by":null,"body":"It's an interesting thought, for sure, it just makes me wonder what our role as stewards truly is in the environment, and whether species have \"rights\" to exist in their ecosystem.  Is it fair to remove animals that have filled those niches?  \n\nPerhaps we should just preserve niches as best we can, regardless of what fills them?  \n\nThe sloth example reminds me of planted honey locust trees here.  It's been theorized those spines were once anti-herbivory defenses against giant sloths.","edited":false,"author_flair_css_class":null,"downs":11,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;It&amp;#39;s an interesting thought, for sure, it just makes me wonder what our role as stewards truly is in the environment, and whether species have &amp;quot;rights&amp;quot; to exist in their ecosystem.  Is it fair to remove animals that have filled those niches?  &lt;/p&gt;\n\n&lt;p&gt;Perhaps we should just preserve niches as best we can, regardless of what fills them?  &lt;/p&gt;\n\n&lt;p&gt;The sloth example reminds me of planted honey locust trees here.  It&amp;#39;s been theorized those spines were once anti-herbivory defenses against giant sloths.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg012rg","created":1394593350000,"author_flair_text":null,"created_utc":1394564550000,"distinguished":null,"num_reports":null,"ups":93,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg01gb8","gilded":0,"author":"chainsawvigilante","parent_id":"t1_cg012rg","approved_by":null,"body":"&gt; Perhaps we should just preserve niches as best we can, regardless of what fills them?\n\n*High five*\n\nAs much as I'd love to see some extinct fauna we should be working harder on preservation. But hey, if desertification ramps up in the future it might be a cool thing to have in our back pocket. Think giant sloth caravans in the distant post apocalypse. ","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;blockquote&gt;\n&lt;p&gt;Perhaps we should just preserve niches as best we can, regardless of what fills them?&lt;/p&gt;\n&lt;/blockquote&gt;\n\n&lt;p&gt;&lt;em&gt;High five&lt;/em&gt;&lt;/p&gt;\n\n&lt;p&gt;As much as I&amp;#39;d love to see some extinct fauna we should be working harder on preservation. But hey, if desertification ramps up in the future it might be a cool thing to have in our back pocket. Think giant sloth caravans in the distant post apocalypse. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg01gb8","created":1394594155000,"author_flair_text":null,"created_utc":1394565355000,"distinguished":null,"num_reports":null,"ups":45,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg02aqx","gilded":0,"author":"Unidan","parent_id":"t1_cg01gb8","approved_by":null,"body":"I'm all for it, people forget deserts are an ecosystem, too! :)\n\nUnfortunately, humans really like ecosystems that support humans.","edited":false,"author_flair_css_class":null,"downs":12,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I&amp;#39;m all for it, people forget deserts are an ecosystem, too! :)&lt;/p&gt;\n\n&lt;p&gt;Unfortunately, humans really like ecosystems that support humans.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg02aqx","created":1394595924000,"author_flair_text":null,"created_utc":1394567124000,"distinguished":null,"num_reports":null,"ups":78,"children":[],"score":66}],"score":43}],"score":82}],"score":37},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzyjwr","gilded":0,"author":"Sneakerheadkcks","parent_id":"t1_cfzwzwg","approved_by":null,"body":"Would you lean the other way on animals we, almost single handedly, caused their extinction? (I.e. The Passenger Pigeon) I like you point about a changed world from when many extinct animals existed, and I would like to think the world has even changed since we played our role (hunting for sport decrease for example) in the Pigeons demise over the last 200 years. In these cases I think we may even have an opportunity to right a wrong. I am curious  about your thoughts on injecting ourselves into the process here. Great AMA btw and I am a backer of the Kickstarter campaign!","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Would you lean the other way on animals we, almost single handedly, caused their extinction? (I.e. The Passenger Pigeon) I like you point about a changed world from when many extinct animals existed, and I would like to think the world has even changed since we played our role (hunting for sport decrease for example) in the Pigeons demise over the last 200 years. In these cases I think we may even have an opportunity to right a wrong. I am curious  about your thoughts on injecting ourselves into the process here. Great AMA btw and I am a backer of the Kickstarter campaign!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzyjwr","created":1394588037000,"author_flair_text":null,"created_utc":1394559237000,"distinguished":null,"num_reports":null,"ups":13,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cfzyn61","gilded":0,"author":"Unidan","parent_id":"t1_cfzyjwr","approved_by":null,"body":"It would just be an incredibly difficult task to undertake.  We'd have to restore *huge* amounts of habitat, displace humans and do all kinds of things that would be political suicide for many people.  \n\n[Here's a video I made that includes passenger pigeons, though, if you're interested!](http://www.youtube.com/watch?v=k6orG6Xj3m0)","edited":false,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;It would just be an incredibly difficult task to undertake.  We&amp;#39;d have to restore &lt;em&gt;huge&lt;/em&gt; amounts of habitat, displace humans and do all kinds of things that would be political suicide for many people.  &lt;/p&gt;\n\n&lt;p&gt;&lt;a href=\"http://www.youtube.com/watch?v=k6orG6Xj3m0\"&gt;Here&amp;#39;s a video I made that includes passenger pigeons, though, if you&amp;#39;re interested!&lt;/a&gt;&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzyn61","created":1394588228000,"author_flair_text":null,"created_utc":1394559428000,"distinguished":null,"num_reports":null,"ups":33,"children":[],"score":30}],"score":12}],"score":172}],"score":89},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwh6a","gilded":0,"author":"pnewell","parent_id":"t3_2058f5","approved_by":null,"body":"Did you guys have any thoughts on how creationists may view \"Great Adaptations\"? \n\nI ask because my sister's a grade school teacher in the very Christian south, and when she first taught evolution, she got a lot of grief from parents. From then on, she's taught \"adaptation over time\" and gotten zero complaints. So is the 'adaptations' approach a deliberate one to appeal to potentially hostile audiences, or is it mainly just a really clever title? ","edited":false,"author_flair_css_class":"env","downs":28,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Did you guys have any thoughts on how creationists may view &amp;quot;Great Adaptations&amp;quot;? &lt;/p&gt;\n\n&lt;p&gt;I ask because my sister&amp;#39;s a grade school teacher in the very Christian south, and when she first taught evolution, she got a lot of grief from parents. From then on, she&amp;#39;s taught &amp;quot;adaptation over time&amp;quot; and gotten zero complaints. So is the &amp;#39;adaptations&amp;#39; approach a deliberate one to appeal to potentially hostile audiences, or is it mainly just a really clever title? &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwh6a","created":1394583519000,"author_flair_text":"NGO|Climate Science","created_utc":1394554719000,"distinguished":null,"num_reports":null,"ups":143,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzxdvt","gilded":0,"author":"Unidan","parent_id":"t1_cfzwh6a","approved_by":null,"body":"Mainly just a clever title! :D\n\nWe haven't had much backlash, and we're not addressing issues of creation in the book, as this is outside of the view of evolution.  Dr. Wilson works closely with churches and many religious groups and doesn't receive much ire in that region either, but I'll let him answer that himself. ","edited":false,"author_flair_css_class":null,"downs":18,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Mainly just a clever title! :D&lt;/p&gt;\n\n&lt;p&gt;We haven&amp;#39;t had much backlash, and we&amp;#39;re not addressing issues of creation in the book, as this is outside of the view of evolution.  Dr. Wilson works closely with churches and many religious groups and doesn&amp;#39;t receive much ire in that region either, but I&amp;#39;ll let him answer that himself. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzxdvt","created":1394585532000,"author_flair_text":null,"created_utc":1394556732000,"distinguished":null,"num_reports":null,"ups":137,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg03l2f","gilded":0,"author":"RokBo67","parent_id":"t1_cfzxdvt","approved_by":null,"body":"Well Dr. Wilson? Let's hear it please. It was a good question. ","edited":false,"author_flair_css_class":null,"downs":7,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Well Dr. Wilson? Let&amp;#39;s hear it please. It was a good question. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg03l2f","created":1394598482000,"author_flair_text":null,"created_utc":1394569682000,"distinguished":null,"num_reports":null,"ups":34,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg08yk1","gilded":0,"author":"Badwolf2013","parent_id":"t1_cg03l2f","approved_by":null,"body":"Paging Dr. Wilson!","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Paging Dr. Wilson!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08yk1","created":1394609478000,"author_flair_text":null,"created_utc":1394580678000,"distinguished":null,"num_reports":null,"ups":10,"children":[],"score":10}],"score":27}],"score":119}],"score":115},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzxckx","gilded":0,"author":"scriptingsoul","parent_id":"t3_2058f5","approved_by":null,"body":"Unidan, how do you have so much time to go on Reddit if you are bombarded with work all of the time?\n\nAlso, this is for you:\n\n+/u/dogetipbot 1000 doge verify","edited":1394575601,"author_flair_css_class":null,"downs":17,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Unidan, how do you have so much time to go on Reddit if you are bombarded with work all of the time?&lt;/p&gt;\n\n&lt;p&gt;Also, this is for you:&lt;/p&gt;\n\n&lt;p&gt;+&lt;a href=\"/u/dogetipbot\"&gt;/u/dogetipbot&lt;/a&gt; 1000 doge verify&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzxckx","created":1394585452000,"author_flair_text":null,"created_utc":1394556652000,"distinguished":null,"num_reports":null,"ups":106,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzxoog","gilded":0,"author":"Unidan","parent_id":"t1_cfzxckx","approved_by":null,"body":"This is a strange combination of my work *and* Reddit.  Today's work day actually penciled this in!","edited":false,"author_flair_css_class":null,"downs":18,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;This is a strange combination of my work &lt;em&gt;and&lt;/em&gt; Reddit.  Today&amp;#39;s work day actually penciled this in!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzxoog","created":1394586171000,"author_flair_text":null,"created_utc":1394557371000,"distinguished":null,"num_reports":null,"ups":115,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg030sx","gilded":0,"author":"Dobiedobes","parent_id":"t1_cfzxoog","approved_by":null,"body":"1.  *pencil Reddit in schedule*\n2. ????\n3. PROFIT","edited":false,"author_flair_css_class":null,"downs":17,"body_html":"&lt;div class=\"md\"&gt;&lt;ol&gt;\n&lt;li&gt; &lt;em&gt;pencil Reddit in schedule&lt;/em&gt;&lt;/li&gt;\n&lt;li&gt;????&lt;/li&gt;\n&lt;li&gt;PROFIT&lt;/li&gt;\n&lt;/ol&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg030sx","created":1394597390000,"author_flair_text":null,"created_utc":1394568590000,"distinguished":null,"num_reports":null,"ups":88,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg05zir","gilded":0,"author":"killdevil","parent_id":"t1_cg030sx","approved_by":null,"body":"2.  Teach monkeys to joust","edited":1394597341,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;ol&gt;\n&lt;li&gt; Teach monkeys to joust&lt;/li&gt;\n&lt;/ol&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg05zir","created":1394603128000,"author_flair_text":null,"created_utc":1394574328000,"distinguished":null,"num_reports":null,"ups":26,"children":[],"score":25}],"score":71}],"score":97},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg05e8y","gilded":0,"author":"ZeroPride","parent_id":"t1_cfzxckx","approved_by":null,"body":"I think you have to include the guy's name or reply to his comment","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I think you have to include the guy&amp;#39;s name or reply to his comment&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg05e8y","created":1394601980000,"author_flair_text":null,"created_utc":1394573180000,"distinguished":null,"num_reports":null,"ups":4,"children":[],"score":4}],"score":89},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzw56t","gilded":0,"author":"I_are_facepalm","parent_id":"t3_2058f5","approved_by":null,"body":"I have a two year old. Would this book be an appropriate \"circle time\" book, or is it designed for a certain grade/age level?","edited":false,"author_flair_css_class":null,"downs":6,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I have a two year old. Would this book be an appropriate &amp;quot;circle time&amp;quot; book, or is it designed for a certain grade/age level?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzw56t","created":1394582757000,"author_flair_text":null,"created_utc":1394553957000,"distinguished":null,"num_reports":null,"ups":58,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwaxs","gilded":0,"author":"Unidan","parent_id":"t1_cfzw56t","approved_by":null,"body":"This book is appropriate for anyone who is able to read and process books like Dr. Seuss, for example.  It's definitely something that can be read aloud to a group of those too young to read themselves, and also is a good book for those just learning *to* read.  \n\n","edited":false,"author_flair_css_class":null,"downs":18,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;This book is appropriate for anyone who is able to read and process books like Dr. Seuss, for example.  It&amp;#39;s definitely something that can be read aloud to a group of those too young to read themselves, and also is a good book for those just learning &lt;em&gt;to&lt;/em&gt; read.  &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwaxs","created":1394583126000,"author_flair_text":null,"created_utc":1394554326000,"distinguished":null,"num_reports":null,"ups":112,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cfzwier","gilded":0,"author":"I_are_facepalm","parent_id":"t1_cfzwaxs","approved_by":null,"body":"Excellent!","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Excellent!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwier","created":1394583597000,"author_flair_text":null,"created_utc":1394554797000,"distinguished":null,"num_reports":null,"ups":21,"children":[],"score":19}],"score":94}],"score":52},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg0371g","gilded":0,"author":"BeachBum2012","parent_id":"t3_2058f5","approved_by":null,"body":"I'm curious as to what your thoughts are on the new version of Cosmos that started over the weekend.  Did you watch?  Do you think FOX is heading in the right direction?  Think it will last?","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I&amp;#39;m curious as to what your thoughts are on the new version of Cosmos that started over the weekend.  Did you watch?  Do you think FOX is heading in the right direction?  Think it will last?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg0371g","created":1394597723000,"author_flair_text":null,"created_utc":1394568923000,"distinguished":null,"num_reports":null,"ups":12,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg03ku4","gilded":0,"author":"Unidan","parent_id":"t1_cg0371g","approved_by":null,"body":"I didn't see the newest one, though I'm hoping to watch it soon!  I loved the original series and think it's a wonderful idea and I'm really hoping that it does catch on.","edited":false,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I didn&amp;#39;t see the newest one, though I&amp;#39;m hoping to watch it soon!  I loved the original series and think it&amp;#39;s a wonderful idea and I&amp;#39;m really hoping that it does catch on.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg03ku4","created":1394598470000,"author_flair_text":null,"created_utc":1394569670000,"distinguished":null,"num_reports":null,"ups":17,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg03o9v","gilded":0,"author":"BeachBum2012","parent_id":"t1_cg03ku4","approved_by":null,"body":"Thanks for the response.  \n\nI found it interesting to watch for sure.  I'm just a little worried that the seemingly strong anti-religious sentiment will turn off a lot of would be viewers.  While I do agree with it, there are many who won't and as a result will turn away from the show.  I wish they would just stick to science and reach a broader audience.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Thanks for the response.  &lt;/p&gt;\n\n&lt;p&gt;I found it interesting to watch for sure.  I&amp;#39;m just a little worried that the seemingly strong anti-religious sentiment will turn off a lot of would be viewers.  While I do agree with it, there are many who won&amp;#39;t and as a result will turn away from the show.  I wish they would just stick to science and reach a broader audience.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg03o9v","created":1394598654000,"author_flair_text":null,"created_utc":1394569854000,"distinguished":null,"num_reports":null,"ups":7,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08qhu","gilded":0,"author":"turkeypants","parent_id":"t1_cg03o9v","approved_by":null,"body":"I've been wanting to talk to others about this. I'm a non-religious liberal who is wearied and annoyed by the conservative church crowd and specifically by creationists, and who loves history, and I still thought the dramatized Bruno/Church history stuff in the first episode of Cosmos was so unnecessarily harped upon. The conservatives predictably freaked out, but I wonder if they didn't actually have a bit of cause given what appeared to be a targeted shot. Poor scared Bruno; the mustache-twirling, literally black-eyed church officials/jailers; the murder of our outcast, misunderstood, wronged protagonist. While true, how relevant is a lengthy treatment of this to getting people excited about science? \n\nUnless you have a specific agenda of demonstrating how the church has persecuted people who offered theories on the universe and existence contrary to scripture, why include that and focus on it so much? That was an awful long time spent on a cartoon about a guy who dreamed new ideas about the universe and tried to get people to think about them, and his years of struggle and imprisonment by the church. It just kept going and going. What if instead they touched on a bit of Ptolemy, Lucretius, Copernicus, Bruno, Galileo, Kepler, Newton, etc. and showed how the ideas we now hold evolved, and then moved on to talking about the ideas? Lucretius, Copernicus, and Galileo got a few seconds each, while a quarter of the show's running time was spent on the Bruno cartoon drama - 11 minutes out of 44. It may not sound like a lot until you sit through it. (you can watch it on Fox's site for the next couple of months if you sign in with your participating cable provider's account credentials)\n\nWhy is it necessary to tell the life story of Bruno, show him getting seized in the dark by a malevolent cardinal's giant thugs, show him lying trembling in a jail cell, sleeping rough in the woods, getting laughed at for being short, getting laughed out of Cambridge, pleading his case before the ominous bad guy boss cardinal, and getting sentenced to death? Why spend so much time talking about how there was no separation of church and state, how there was no freedom of speech, and how saying the wrong thing would get you killed by by \"the most vicious form of cruel and unusual punishment\"? Why focus on the Inquisition and its purpose and methods? Is this kind of phrasing really necessary in a science show: \"It wasn't long before Bruno fell into the clutches of the thought police.\"? Why detail his time in the Inquistion's prison? Why ask, \"Why would the church go to such lengths to torment Bruno? What were they afraid of?\" Did the sentencing cardinal *really* need to have black rings around his eyes and a sinister voice? Did all the attending priests need to have black eye rings and wicked, merciless looks on their faces? Did the burning-at-the-stake scene really have to drag out like the dramatic/scary crescendo of a movie, with him disgustedly turning his face away from a proffered crucifix, with church guys piling up the fuel around his feet, with a crowd cheering as the flames rose to his Roman nose?\n\nIt was all so egregious and off track and unnecessary in a show to get people excited about science. It was super weird how long they focused on Bruno, like he was the only guy who had any of these ideas or the only guy persecuted by the church for them. (Hello? Galileo?). And it was really weird to spend so long in cartoon land. If the goal was to show that science visionaries often must defy and struggle against contemporary beliefs and societal norms, OK, but this just seemed unreasonably long and church-focused as I was watching it. It reminded me of that [creepy Mormon cartoon](https://www.youtube.com/watch?v=BU6Uv3FptPU) that went around back during the last presidential election. Who is this stuff for?!\n\nI've read a couple of analyses of the Bruno segment, like it was an attempt to tie science to faith. But assuming that's not just a smokescreen for a deliberate swipe, I think it failed terribly. That looked like nothing so much as a direct slap in the face of the Catholic church by the champions of modern science. I really don't see how you can say that wasn't the intent, and that the show doesn't have a pretty overt anti-Church agenda, or at least this episode, even if one feels they deserve it, especially if one feels they deserve it.\n\nIn general, I'm happy to serve up crow to religious zealots. I'm happy to have science championed over superstition. I'm fine with an anti-church agenda to the degree necessary to get people to snap out of primitive baloney thought that retards science and progress. I'm even happy to watch lengthy cartoons about history. But why put those things in Cosmos so prominently? Why court such backlash when they could catch so many more flies with honey? Why not try instead to focus on the wonders of the universe for a wider audience of people of all stripes who want to listen? Why instantly alienate a segment of people who could benefit from it even more than most? Or if you're going to do that, if you decide you want to use Cosmos as a bludgeon to beat the stupid out of people and make them feel ashamed of their ideological and cultural allegiances in hopes that they will relent, repent, and get on board, why try to deny it or play it off? Just hang it out there and say, \"Yeah that's right, we said it.\" I think it was handled really poorly.","edited":false,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I&amp;#39;ve been wanting to talk to others about this. I&amp;#39;m a non-religious liberal who is wearied and annoyed by the conservative church crowd and specifically by creationists, and who loves history, and I still thought the dramatized Bruno/Church history stuff in the first episode of Cosmos was so unnecessarily harped upon. The conservatives predictably freaked out, but I wonder if they didn&amp;#39;t actually have a bit of cause given what appeared to be a targeted shot. Poor scared Bruno; the mustache-twirling, literally black-eyed church officials/jailers; the murder of our outcast, misunderstood, wronged protagonist. While true, how relevant is a lengthy treatment of this to getting people excited about science? &lt;/p&gt;\n\n&lt;p&gt;Unless you have a specific agenda of demonstrating how the church has persecuted people who offered theories on the universe and existence contrary to scripture, why include that and focus on it so much? That was an awful long time spent on a cartoon about a guy who dreamed new ideas about the universe and tried to get people to think about them, and his years of struggle and imprisonment by the church. It just kept going and going. What if instead they touched on a bit of Ptolemy, Lucretius, Copernicus, Bruno, Galileo, Kepler, Newton, etc. and showed how the ideas we now hold evolved, and then moved on to talking about the ideas? Lucretius, Copernicus, and Galileo got a few seconds each, while a quarter of the show&amp;#39;s running time was spent on the Bruno cartoon drama - 11 minutes out of 44. It may not sound like a lot until you sit through it. (you can watch it on Fox&amp;#39;s site for the next couple of months if you sign in with your participating cable provider&amp;#39;s account credentials)&lt;/p&gt;\n\n&lt;p&gt;Why is it necessary to tell the life story of Bruno, show him getting seized in the dark by a malevolent cardinal&amp;#39;s giant thugs, show him lying trembling in a jail cell, sleeping rough in the woods, getting laughed at for being short, getting laughed out of Cambridge, pleading his case before the ominous bad guy boss cardinal, and getting sentenced to death? Why spend so much time talking about how there was no separation of church and state, how there was no freedom of speech, and how saying the wrong thing would get you killed by by &amp;quot;the most vicious form of cruel and unusual punishment&amp;quot;? Why focus on the Inquisition and its purpose and methods? Is this kind of phrasing really necessary in a science show: &amp;quot;It wasn&amp;#39;t long before Bruno fell into the clutches of the thought police.&amp;quot;? Why detail his time in the Inquistion&amp;#39;s prison? Why ask, &amp;quot;Why would the church go to such lengths to torment Bruno? What were they afraid of?&amp;quot; Did the sentencing cardinal &lt;em&gt;really&lt;/em&gt; need to have black rings around his eyes and a sinister voice? Did all the attending priests need to have black eye rings and wicked, merciless looks on their faces? Did the burning-at-the-stake scene really have to drag out like the dramatic/scary crescendo of a movie, with him disgustedly turning his face away from a proffered crucifix, with church guys piling up the fuel around his feet, with a crowd cheering as the flames rose to his Roman nose?&lt;/p&gt;\n\n&lt;p&gt;It was all so egregious and off track and unnecessary in a show to get people excited about science. It was super weird how long they focused on Bruno, like he was the only guy who had any of these ideas or the only guy persecuted by the church for them. (Hello? Galileo?). And it was really weird to spend so long in cartoon land. If the goal was to show that science visionaries often must defy and struggle against contemporary beliefs and societal norms, OK, but this just seemed unreasonably long and church-focused as I was watching it. It reminded me of that &lt;a href=\"https://www.youtube.com/watch?v=BU6Uv3FptPU\"&gt;creepy Mormon cartoon&lt;/a&gt; that went around back during the last presidential election. Who is this stuff for?!&lt;/p&gt;\n\n&lt;p&gt;I&amp;#39;ve read a couple of analyses of the Bruno segment, like it was an attempt to tie science to faith. But assuming that&amp;#39;s not just a smokescreen for a deliberate swipe, I think it failed terribly. That looked like nothing so much as a direct slap in the face of the Catholic church by the champions of modern science. I really don&amp;#39;t see how you can say that wasn&amp;#39;t the intent, and that the show doesn&amp;#39;t have a pretty overt anti-Church agenda, or at least this episode, even if one feels they deserve it, especially if one feels they deserve it.&lt;/p&gt;\n\n&lt;p&gt;In general, I&amp;#39;m happy to serve up crow to religious zealots. I&amp;#39;m happy to have science championed over superstition. I&amp;#39;m fine with an anti-church agenda to the degree necessary to get people to snap out of primitive baloney thought that retards science and progress. I&amp;#39;m even happy to watch lengthy cartoons about history. But why put those things in Cosmos so prominently? Why court such backlash when they could catch so many more flies with honey? Why not try instead to focus on the wonders of the universe for a wider audience of people of all stripes who want to listen? Why instantly alienate a segment of people who could benefit from it even more than most? Or if you&amp;#39;re going to do that, if you decide you want to use Cosmos as a bludgeon to beat the stupid out of people and make them feel ashamed of their ideological and cultural allegiances in hopes that they will relent, repent, and get on board, why try to deny it or play it off? Just hang it out there and say, &amp;quot;Yeah that&amp;#39;s right, we said it.&amp;quot; I think it was handled really poorly.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08qhu","created":1394608992000,"author_flair_text":null,"created_utc":1394580192000,"distinguished":null,"num_reports":null,"ups":13,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08x78","gilded":0,"author":"BeachBum2012","parent_id":"t1_cg08qhu","approved_by":null,"body":"You managed to say exactly what I was thinking in a much more thought out manner.  Thank you.  I'm happy to see that I'm not the only one with these opinions.\n\nI see this show as a vehicle to bring science to the masses in prime time once again.  I'd hate to see it derailed by something as petty as bashing religion.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;You managed to say exactly what I was thinking in a much more thought out manner.  Thank you.  I&amp;#39;m happy to see that I&amp;#39;m not the only one with these opinions.&lt;/p&gt;\n\n&lt;p&gt;I see this show as a vehicle to bring science to the masses in prime time once again.  I&amp;#39;d hate to see it derailed by something as petty as bashing religion.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08x78","created":1394609394000,"author_flair_text":null,"created_utc":1394580594000,"distinguished":null,"num_reports":null,"ups":7,"children":[],"score":7}],"score":10}],"score":7}],"score":14}],"score":12},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg00res","gilded":0,"author":"cory-and-trevor","parent_id":"t3_2058f5","approved_by":null,"body":"Will you explain that evolution doesn't occur *to* give a creature an advantage, rather if a creatures mutation does give it an advantage it will survive and multiply thus passing the gene on?\n\nToo many people think \"oh that bug turned red because it lives in red trees\" but what actually happened is the bug randomly turned red and because of that mutation was able to survive and make more of itself.  Other bugs may have turned blue and died and are thus not around today.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Will you explain that evolution doesn&amp;#39;t occur &lt;em&gt;to&lt;/em&gt; give a creature an advantage, rather if a creatures mutation does give it an advantage it will survive and multiply thus passing the gene on?&lt;/p&gt;\n\n&lt;p&gt;Too many people think &amp;quot;oh that bug turned red because it lives in red trees&amp;quot; but what actually happened is the bug randomly turned red and because of that mutation was able to survive and make more of itself.  Other bugs may have turned blue and died and are thus not around today.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg00res","created":1394592688000,"author_flair_text":null,"created_utc":1394563888000,"distinguished":null,"num_reports":null,"ups":10,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg00xwx","gilded":0,"author":"tiffanyevolves","parent_id":"t1_cg00res","approved_by":null,"body":"Hello! This book will look at adaptations that are already present and explore what advantages they give to their beholder. But you're right, evolution is a process change in allele frequencies with POPULATIONS not in individuals, and its a common misconception. There was a good analogy about it in an nor blog post yesterday, http://www.npr.org/blogs/13.7/2014/03/10/288656421/evolution-is-coming-to-a-storybook-near-you, it also might mention our book ;)","edited":false,"author_flair_css_class":"journ","downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Hello! This book will look at adaptations that are already present and explore what advantages they give to their beholder. But you&amp;#39;re right, evolution is a process change in allele frequencies with POPULATIONS not in individuals, and its a common misconception. There was a good analogy about it in an nor blog post yesterday, &lt;a href=\"http://www.npr.org/blogs/13.7/2014/03/10/288656421/evolution-is-coming-to-a-storybook-near-you\"&gt;http://www.npr.org/blogs/13.7/2014/03/10/288656421/evolution-is-coming-to-a-storybook-near-you&lt;/a&gt;, it also might mention our book ;)&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg00xwx","created":1394593062000,"author_flair_text":"Great Adaptations","created_utc":1394564262000,"distinguished":null,"num_reports":null,"ups":15,"children":[],"score":14}],"score":10},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg06nd6","gilded":0,"author":"Greater_Omentum","parent_id":"t3_2058f5","approved_by":null,"body":"Hi, /u/Unidan and company.\n\nI was wondering if y'all could comment on the evolution of cute organisms.\n\nIn the wild / in the absence of human influence, is there such thing as selective pressure for animals to be adorable, or is it just a happy accident that there are animals out there that evolved to look like [this?](http://i.imgur.com/jl4aVIO.jpg)\n\nOr [this?](http://i.imgur.com/wO7jsWw.jpg)\n\nOr [THIS?!](http://i.imgur.com/U5H7Zui.gif)","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Hi, &lt;a href=\"/u/Unidan\"&gt;/u/Unidan&lt;/a&gt; and company.&lt;/p&gt;\n\n&lt;p&gt;I was wondering if y&amp;#39;all could comment on the evolution of cute organisms.&lt;/p&gt;\n\n&lt;p&gt;In the wild / in the absence of human influence, is there such thing as selective pressure for animals to be adorable, or is it just a happy accident that there are animals out there that evolved to look like &lt;a href=\"http://i.imgur.com/jl4aVIO.jpg\"&gt;this?&lt;/a&gt;&lt;/p&gt;\n\n&lt;p&gt;Or &lt;a href=\"http://i.imgur.com/wO7jsWw.jpg\"&gt;this?&lt;/a&gt;&lt;/p&gt;\n\n&lt;p&gt;Or &lt;a href=\"http://i.imgur.com/U5H7Zui.gif\"&gt;THIS?!&lt;/a&gt;&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg06nd6","created":1394604478000,"author_flair_text":null,"created_utc":1394575678000,"distinguished":null,"num_reports":null,"ups":10,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg06qvf","gilded":0,"author":"Unidan","parent_id":"t1_cg06nd6","approved_by":null,"body":"Yes, actually!  \n\nSome have theorized that pets like puppies and kittens resonate with us so well because they mimic the same evolutionary concept that makes us love our babies so much (i.e. neotenous features) such as big eyes, big heads, disproportionate bodies, etc.  \n\nCertain baby animals that *don't* fit that bill are often not as loveable.  There isn't much love for baby spiders or baby snakes, as they don't share that same evolutionary heritage of \"loveability,\" some say.  ","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Yes, actually!  &lt;/p&gt;\n\n&lt;p&gt;Some have theorized that pets like puppies and kittens resonate with us so well because they mimic the same evolutionary concept that makes us love our babies so much (i.e. neotenous features) such as big eyes, big heads, disproportionate bodies, etc.  &lt;/p&gt;\n\n&lt;p&gt;Certain baby animals that &lt;em&gt;don&amp;#39;t&lt;/em&gt; fit that bill are often not as loveable.  There isn&amp;#39;t much love for baby spiders or baby snakes, as they don&amp;#39;t share that same evolutionary heritage of &amp;quot;loveability,&amp;quot; some say.  &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg06qvf","created":1394604685000,"author_flair_text":null,"created_utc":1394575885000,"distinguished":null,"num_reports":null,"ups":10,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg06uhd","gilded":0,"author":"Greater_Omentum","parent_id":"t1_cg06qvf","approved_by":null,"body":"So, it's humans who evolved to want to cuddle Asian small-clawed otters, and not Asian small-clawed otters who evolved [to be cuddly for humans?](http://youtu.be/GUJjFss-148?t=53s)","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;So, it&amp;#39;s humans who evolved to want to cuddle Asian small-clawed otters, and not Asian small-clawed otters who evolved &lt;a href=\"http://youtu.be/GUJjFss-148?t=53s\"&gt;to be cuddly for humans?&lt;/a&gt;&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg06uhd","created":1394604901000,"author_flair_text":null,"created_utc":1394576101000,"distinguished":null,"num_reports":null,"ups":6,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg099il","gilded":0,"author":"Unidan","parent_id":"t1_cg06uhd","approved_by":null,"body":"Right, it's basically other animals happening to fit the bill for what we like in ourselves.  \n\n[Here's a photo I took of two Asian small-clawed otters making sweet, sweet adorable love.](http://i.imgur.com/wTrEnAk.jpg)","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Right, it&amp;#39;s basically other animals happening to fit the bill for what we like in ourselves.  &lt;/p&gt;\n\n&lt;p&gt;&lt;a href=\"http://i.imgur.com/wTrEnAk.jpg\"&gt;Here&amp;#39;s a photo I took of two Asian small-clawed otters making sweet, sweet adorable love.&lt;/a&gt;&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg099il","created":1394610158000,"author_flair_text":null,"created_utc":1394581358000,"distinguished":null,"num_reports":null,"ups":9,"children":[],"score":8}],"score":6}],"score":10}],"score":10},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg03735","gilded":1,"author":"MCstudHAMMER","parent_id":"t3_2058f5","approved_by":null,"body":"hey /u/unidan you jackass why do u keep milking these AMAs.\n\nThanks for the gold btw\n\nEdit: wow thanks for the gold!","edited":1394570234,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;hey &lt;a href=\"/u/unidan\"&gt;/u/unidan&lt;/a&gt; you jackass why do u keep milking these AMAs.&lt;/p&gt;\n\n&lt;p&gt;Thanks for the gold btw&lt;/p&gt;\n\n&lt;p&gt;Edit: wow thanks for the gold!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg03735","created":1394597726000,"author_flair_text":null,"created_utc":1394568926000,"distinguished":null,"num_reports":null,"ups":19,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg03jmh","gilded":0,"author":"Unidan","parent_id":"t1_cg03735","approved_by":null,"body":"Because it's fun, and you're welcome!","edited":false,"author_flair_css_class":null,"downs":4,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Because it&amp;#39;s fun, and you&amp;#39;re welcome!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg03jmh","created":1394598404000,"author_flair_text":null,"created_utc":1394569604000,"distinguished":null,"num_reports":null,"ups":15,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg04001","gilded":0,"author":"ThisIsMyLulzyAccount","parent_id":"t1_cg03jmh","approved_by":null,"body":"Did... Did you just give him hush-gold?","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Did... Did you just give him hush-gold?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg04001","created":1394599291000,"author_flair_text":null,"created_utc":1394570491000,"distinguished":null,"num_reports":null,"ups":7,"children":[],"score":6}],"score":11}],"score":16},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg06ow6","gilded":0,"author":"nullsignature","parent_id":"t3_2058f5","approved_by":null,"body":"You should collaborate with /u/shitty_watercolour!\n\nedited for spelling","edited":1394581275,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;You should collaborate with &lt;a href=\"/u/shitty_watercolour\"&gt;/u/shitty_watercolour&lt;/a&gt;!&lt;/p&gt;\n\n&lt;p&gt;edited for spelling&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg06ow6","created":1394604569000,"author_flair_text":null,"created_utc":1394575769000,"distinguished":null,"num_reports":null,"ups":18,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg0783i","gilded":0,"author":"Unidan","parent_id":"t1_cg06ow6","approved_by":null,"body":"Agreed!  We'd love to have him as an illustrator in the future!","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Agreed!  We&amp;#39;d love to have him as an illustrator in the future!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg0783i","created":1394605712000,"author_flair_text":null,"created_utc":1394576912000,"distinguished":null,"num_reports":null,"ups":20,"children":[],"score":19}],"score":16},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzxuad","gilded":0,"author":"keyserdoge","parent_id":"t3_2058f5","approved_by":null,"body":"Hi,\n\nSince you have been spotted checking out cryptocurrencies - do you think they have a longterm benefit for science fundraising or a fad that will die out? If yes, why different from just using paypal etc? Tip sent from other sub. Cheers!\n","edited":false,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Hi,&lt;/p&gt;\n\n&lt;p&gt;Since you have been spotted checking out cryptocurrencies - do you think they have a longterm benefit for science fundraising or a fad that will die out? If yes, why different from just using paypal etc? Tip sent from other sub. Cheers!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzxuad","created":1394586510000,"author_flair_text":null,"created_utc":1394557710000,"distinguished":null,"num_reports":null,"ups":21,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzy878","gilded":0,"author":"Unidan","parent_id":"t1_cfzxuad","approved_by":null,"body":"I think they're a really interesting thing right now, and I actually just got asked to do a TEDx talk on the subject, which I'll be putting together at the end of the month.\n\nI think the lack of fees and being able to donate incredibly *small* amounts of money instantly makes it different from PayPal or normal banking.  \n\nFor me, I think the future isn't decided by large, sweeping ideas anymore, it's dominated by taking small advantages in data and taking small opportunities and applying them at a large scale, something that cryptocurrencies certainly embody.  I'm not sure which cryptocurrency will be here forever, and I'm not sure if it'll be any of the ones we have now (though doge is my personal humorous hero at the moment), but I would be truly surprised if they disappeared from the internet entirely.","edited":false,"author_flair_css_class":null,"downs":5,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I think they&amp;#39;re a really interesting thing right now, and I actually just got asked to do a TEDx talk on the subject, which I&amp;#39;ll be putting together at the end of the month.&lt;/p&gt;\n\n&lt;p&gt;I think the lack of fees and being able to donate incredibly &lt;em&gt;small&lt;/em&gt; amounts of money instantly makes it different from PayPal or normal banking.  &lt;/p&gt;\n\n&lt;p&gt;For me, I think the future isn&amp;#39;t decided by large, sweeping ideas anymore, it&amp;#39;s dominated by taking small advantages in data and taking small opportunities and applying them at a large scale, something that cryptocurrencies certainly embody.  I&amp;#39;m not sure which cryptocurrency will be here forever, and I&amp;#39;m not sure if it&amp;#39;ll be any of the ones we have now (though doge is my personal humorous hero at the moment), but I would be truly surprised if they disappeared from the internet entirely.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzy878","created":1394587339000,"author_flair_text":null,"created_utc":1394558539000,"distinguished":null,"num_reports":null,"ups":44,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg01ez0","gilded":0,"author":"OPINION_IS_UNPOPULAR","parent_id":"t1_cfzy878","approved_by":null,"body":"There are transaction fees on certain transactions to prevent dust DDoS on the network. See: https://en.bitcoin.it/wiki/Transaction_fees ","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;There are transaction fees on certain transactions to prevent dust DDoS on the network. See: &lt;a href=\"https://en.bitcoin.it/wiki/Transaction_fees\"&gt;https://en.bitcoin.it/wiki/Transaction_fees&lt;/a&gt; &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg01ez0","created":1394594078000,"author_flair_text":null,"created_utc":1394565278000,"distinguished":null,"num_reports":null,"ups":8,"children":[],"score":8}],"score":39}],"score":18},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwfq3","gilded":0,"author":"mumzie","parent_id":"t3_2058f5","approved_by":null,"body":"Hi Unidan:)  \nWanted to let you know that this AMA is cross posted on /r/dogecoin and I have asked that the users tip in that post in order to respect /r/science wishes that tipping not occur here.  \nGreat idea on the book. I am all about some education:)","edited":false,"author_flair_css_class":null,"downs":12,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Hi Unidan:)&lt;br/&gt;\nWanted to let you know that this AMA is cross posted on &lt;a href=\"/r/dogecoin\"&gt;/r/dogecoin&lt;/a&gt; and I have asked that the users tip in that post in order to respect &lt;a href=\"/r/science\"&gt;/r/science&lt;/a&gt; wishes that tipping not occur here.&lt;br/&gt;\nGreat idea on the book. I am all about some education:)&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwfq3","created":1394583428000,"author_flair_text":null,"created_utc":1394554628000,"distinguished":null,"num_reports":null,"ups":48,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cfzwryh","gilded":0,"author":"Unidan","parent_id":"t1_cfzwfq3","approved_by":null,"body":"Wonderful, thank you so much!  ","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Wonderful, thank you so much!  &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwryh","created":1394584184000,"author_flair_text":null,"created_utc":1394555384000,"distinguished":null,"num_reports":null,"ups":26,"children":[],"score":24}],"score":36},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08u7r","gilded":0,"author":"for4saken","parent_id":"t3_2058f5","approved_by":null,"body":"Great timing! We saw a strange formation on some leaves this weekend and I've told my girlfriend that 'we should ask /u/Unidan about it'. So, could you help us? Thank you.\n\nGallery: [Odd protrusions](http://imgur.com/a/uwza8)\nSingles: [1](http://i.imgur.com/KZz7G7y.jpg) [2](http://i.imgur.com/pthL7jT.jpg) [3](http://i.imgur.com/6PThX6N.jpg)","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Great timing! We saw a strange formation on some leaves this weekend and I&amp;#39;ve told my girlfriend that &amp;#39;we should ask &lt;a href=\"/u/Unidan\"&gt;/u/Unidan&lt;/a&gt; about it&amp;#39;. So, could you help us? Thank you.&lt;/p&gt;\n\n&lt;p&gt;Gallery: &lt;a href=\"http://imgur.com/a/uwza8\"&gt;Odd protrusions&lt;/a&gt;\nSingles: &lt;a href=\"http://i.imgur.com/KZz7G7y.jpg\"&gt;1&lt;/a&gt; &lt;a href=\"http://i.imgur.com/pthL7jT.jpg\"&gt;2&lt;/a&gt; &lt;a href=\"http://i.imgur.com/6PThX6N.jpg\"&gt;3&lt;/a&gt;&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08u7r","created":1394609215000,"author_flair_text":null,"created_utc":1394580415000,"distinguished":null,"num_reports":null,"ups":6,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08wh4","gilded":0,"author":"Unidan","parent_id":"t1_cg08u7r","approved_by":null,"body":"These are likely galls caused by some sort of infestation, it can be due to mites, aphids, fungus, all sorts of possibilities!  I'm not sure of the actual plant, unfortunately.","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;These are likely galls caused by some sort of infestation, it can be due to mites, aphids, fungus, all sorts of possibilities!  I&amp;#39;m not sure of the actual plant, unfortunately.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08wh4","created":1394609350000,"author_flair_text":null,"created_utc":1394580550000,"distinguished":null,"num_reports":null,"ups":8,"children":[],"score":7}],"score":6},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwyik","gilded":0,"author":"MCMXChris","parent_id":"t3_2058f5","approved_by":null,"body":"Will there be popups in the book? ","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Will there be popups in the book? &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwyik","created":1394584596000,"author_flair_text":null,"created_utc":1394555796000,"distinguished":null,"num_reports":null,"ups":12,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzxe93","gilded":0,"author":"Unidan","parent_id":"t1_cfzwyik","approved_by":null,"body":"No, unfortunately this isn't a pop-up book, but that is a great idea for the future!","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;No, unfortunately this isn&amp;#39;t a pop-up book, but that is a great idea for the future!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzxe93","created":1394585553000,"author_flair_text":null,"created_utc":1394556753000,"distinguished":null,"num_reports":null,"ups":17,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzz0gr","gilded":0,"author":"evolutionbob","parent_id":"t1_cfzxe93","approved_by":null,"body":"Very cool! I'm a popup fan.","edited":false,"author_flair_css_class":"journ","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Very cool! I&amp;#39;m a popup fan.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzz0gr","created":1394589007000,"author_flair_text":"Great Adaptations: Robert Kadar","created_utc":1394560207000,"distinguished":null,"num_reports":null,"ups":11,"children":[],"score":11}],"score":17}],"score":10},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg025zv","gilded":0,"author":"Mirrorflute88","parent_id":"t3_2058f5","approved_by":null,"body":"What age range is it recommended for?","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;What age range is it recommended for?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg025zv","created":1394595656000,"author_flair_text":null,"created_utc":1394566856000,"distinguished":null,"num_reports":null,"ups":5,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg028r8","gilded":0,"author":"Unidan","parent_id":"t1_cg025zv","approved_by":null,"body":"The range that Dr. Seuss is for, in our estimation.","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;The range that Dr. Seuss is for, in our estimation.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg028r8","created":1394595813000,"author_flair_text":null,"created_utc":1394567013000,"distinguished":null,"num_reports":null,"ups":13,"children":[],"score":11}],"score":5},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg07j7m","gilded":0,"author":"AlexReynard","parent_id":"t3_2058f5","approved_by":null,"body":"Will convergent evolution be covered? That was one of my favorite aspects of evolution in school because of what a neat idea it was, and from seeing comparisons of marsupials to mammals.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Will convergent evolution be covered? That was one of my favorite aspects of evolution in school because of what a neat idea it was, and from seeing comparisons of marsupials to mammals.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg07j7m","created":1394606361000,"author_flair_text":null,"created_utc":1394577561000,"distinguished":null,"num_reports":null,"ups":5,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg07l6s","gilded":0,"author":"evolutionbob","parent_id":"t1_cg07j7m","approved_by":null,"body":"Very good concept to teach. We didn't cover it in this book. However, if this book is successful, we'd like to produce a series. Convergent evolution is a great topic for another book. ","edited":false,"author_flair_css_class":"journ","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Very good concept to teach. We didn&amp;#39;t cover it in this book. However, if this book is successful, we&amp;#39;d like to produce a series. Convergent evolution is a great topic for another book. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg07l6s","created":1394606482000,"author_flair_text":"Great Adaptations: Robert Kadar","created_utc":1394577682000,"distinguished":null,"num_reports":null,"ups":8,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg07w26","gilded":0,"author":"AlexReynard","parent_id":"t1_cg07l6s","approved_by":null,"body":"Good to hear! And thanks for replying so quick. I figured I was late to the party and my comment'd get buried.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Good to hear! And thanks for replying so quick. I figured I was late to the party and my comment&amp;#39;d get buried.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg07w26","created":1394607137000,"author_flair_text":null,"created_utc":1394578337000,"distinguished":null,"num_reports":null,"ups":4,"children":[],"score":4}],"score":8}],"score":5},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08qq1","gilded":0,"author":"dremic","parent_id":"t3_2058f5","approved_by":null,"body":"UNIDAN, thanks for diagnosing my strange colored urine. I owe you one pal.\n\n","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;UNIDAN, thanks for diagnosing my strange colored urine. I owe you one pal.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08qq1","created":1394609006000,"author_flair_text":null,"created_utc":1394580206000,"distinguished":null,"num_reports":null,"ups":6,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08r9w","gilded":0,"author":"Unidan","parent_id":"t1_cg08qq1","approved_by":null,"body":"You're welcome!  For more pee coloration, watch what happens when you take multivitamin supplements!","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;You&amp;#39;re welcome!  For more pee coloration, watch what happens when you take multivitamin supplements!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08r9w","created":1394609038000,"author_flair_text":null,"created_utc":1394580238000,"distinguished":null,"num_reports":null,"ups":9,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg092wy","gilded":0,"author":"dremic","parent_id":"t1_cg08r9w","approved_by":null,"body":"Yes! there should be a PSA on the multi-vitamin bottle if you ask me.\n\n\"Caution : Urine will be orange, if you are colorblind a neon green is also possible\"","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Yes! there should be a PSA on the multi-vitamin bottle if you ask me.&lt;/p&gt;\n\n&lt;p&gt;&amp;quot;Caution : Urine will be orange, if you are colorblind a neon green is also possible&amp;quot;&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg092wy","created":1394609756000,"author_flair_text":null,"created_utc":1394580956000,"distinguished":null,"num_reports":null,"ups":7,"children":[],"score":5}],"score":7},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg08rhi","gilded":0,"author":"evolutionbob","parent_id":"t1_cg08qq1","approved_by":null,"body":"He's the best.","edited":false,"author_flair_css_class":"journ","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;He&amp;#39;s the best.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08rhi","created":1394609050000,"author_flair_text":"Great Adaptations: Robert Kadar","created_utc":1394580250000,"distinguished":null,"num_reports":null,"ups":7,"children":[],"score":7}],"score":6},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg09c3u","gilded":0,"author":"Heartless_level","parent_id":"t3_2058f5","approved_by":null,"body":"Do you like green eggs and ham? I do not like them Unidan!\nI'll show myself out. ","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Do you like green eggs and ham? I do not like them Unidan!\nI&amp;#39;ll show myself out. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg09c3u","created":1394610317000,"author_flair_text":null,"created_utc":1394581517000,"distinguished":null,"num_reports":null,"ups":6,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg09it6","gilded":0,"author":"Unidan","parent_id":"t1_cg09c3u","approved_by":null,"body":"4/10 for assonance, but I appreciate the sentiment! :D","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;4/10 for assonance, but I appreciate the sentiment! :D&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg09it6","created":1394610738000,"author_flair_text":null,"created_utc":1394581938000,"distinguished":null,"num_reports":null,"ups":9,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg09nqp","gilded":0,"author":"Merari01","parent_id":"t1_cg09it6","approved_by":null,"body":"&gt; assonance\n\nToday I learned there is an opposite for dissonance. Logical, really.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;blockquote&gt;\n&lt;p&gt;assonance&lt;/p&gt;\n&lt;/blockquote&gt;\n\n&lt;p&gt;Today I learned there is an opposite for dissonance. Logical, really.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg09nqp","created":1394611056000,"author_flair_text":null,"created_utc":1394582256000,"distinguished":null,"num_reports":null,"ups":5,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg09ssb","gilded":0,"author":"Unidan","parent_id":"t1_cg09nqp","approved_by":null,"body":"Well, actually, the opposite of dissonance is consonance ;)  \n\nAssonance refers to the internal vowel rhyming of words.","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Well, actually, the opposite of dissonance is consonance ;)  &lt;/p&gt;\n\n&lt;p&gt;Assonance refers to the internal vowel rhyming of words.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg09ssb","created":1394611366000,"author_flair_text":null,"created_utc":1394582566000,"distinguished":null,"num_reports":null,"ups":18,"children":[],"score":16}],"score":5}],"score":9}],"score":6},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzvq07","gilded":0,"author":"molrobocop","parent_id":"t3_2058f5","approved_by":null,"body":"If you could genetically engineer a creature for the purpose of fulfilling a desire of your life, what would you make, and what animal ingredients would you throw in the mix?","edited":false,"author_flair_css_class":null,"downs":8,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;If you could genetically engineer a creature for the purpose of fulfilling a desire of your life, what would you make, and what animal ingredients would you throw in the mix?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzvq07","created":1394581789000,"author_flair_text":null,"created_utc":1394552989000,"distinguished":null,"num_reports":null,"ups":28,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzw1mx","gilded":0,"author":"MrWeiner","parent_id":"t1_cfzvq07","approved_by":null,"body":"Can we have a tree whose sap is sweet light crude oil?","edited":false,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Can we have a tree whose sap is sweet light crude oil?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzw1mx","created":1394582530000,"author_flair_text":null,"created_utc":1394553730000,"distinguished":null,"num_reports":null,"ups":24,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzw6xn","gilded":0,"author":"Unidan","parent_id":"t1_cfzw1mx","approved_by":null,"body":"I really like the idea of a tree that exudes decaying tree fossil fuels.","edited":false,"author_flair_css_class":null,"downs":6,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I really like the idea of a tree that exudes decaying tree fossil fuels.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzw6xn","created":1394582868000,"author_flair_text":null,"created_utc":1394554068000,"distinguished":null,"num_reports":null,"ups":53,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwrag","gilded":0,"author":"munchauzen","parent_id":"t1_cfzw6xn","approved_by":null,"body":"time to get working on a maple syrup powered combustion engine","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;time to get working on a maple syrup powered combustion engine&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwrag","created":1394584144000,"author_flair_text":null,"created_utc":1394555344000,"distinguished":null,"num_reports":null,"ups":21,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg00ahm","gilded":0,"author":"reddit_user13","parent_id":"t1_cfzwrag","approved_by":null,"body":"Diesel engines will run on anything.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Diesel engines will run on anything.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg00ahm","created":1394591705000,"author_flair_text":null,"created_utc":1394562905000,"distinguished":null,"num_reports":null,"ups":11,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg03mix","gilded":0,"author":"Komm","parent_id":"t1_cg00ahm","approved_by":null,"body":"Turbine would work better I imagine... Just need to get it hot enough.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Turbine would work better I imagine... Just need to get it hot enough.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg03mix","created":1394598560000,"author_flair_text":null,"created_utc":1394569760000,"distinguished":null,"num_reports":null,"ups":4,"children":[],"score":4}],"score":11},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg03vbx","gilded":0,"author":"H_is_for_Human","parent_id":"t1_cfzwrag","approved_by":null,"body":"Just dilute the maple syrup and give it to some yeast. You'll get burnable ethanol, or some kind of maple rum.","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Just dilute the maple syrup and give it to some yeast. You&amp;#39;ll get burnable ethanol, or some kind of maple rum.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg03vbx","created":1394599043000,"author_flair_text":null,"created_utc":1394570243000,"distinguished":null,"num_reports":null,"ups":10,"children":[],"score":9},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg0469l","gilded":0,"author":"DukeBerith","parent_id":"t1_cfzwrag","approved_by":null,"body":"The world will smell beautiful ","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;The world will smell beautiful &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg0469l","created":1394599627000,"author_flair_text":null,"created_utc":1394570827000,"distinguished":null,"num_reports":null,"ups":5,"children":[],"score":5}],"score":19}],"score":47}],"score":21},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzvtsz","gilded":0,"author":"Unidan","parent_id":"t1_cfzvq07","approved_by":null,"body":"In some ways, scientists have sort of already begun to do that!  \n\nI think the search for lightweight yet strong materials is something that is very desired, so perhaps you've heard of the goat-spider crossover?  Essentially, they've genetically engineered a goat to produce spider silk proteins which can be harvested from the milk!\n\nThis solves the problem of scale with trying to harvest the protein directly from spider production and presumably the goats a little more fun to work with than the spiders anyway.  ","edited":false,"author_flair_css_class":null,"downs":8,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;In some ways, scientists have sort of already begun to do that!  &lt;/p&gt;\n\n&lt;p&gt;I think the search for lightweight yet strong materials is something that is very desired, so perhaps you&amp;#39;ve heard of the goat-spider crossover?  Essentially, they&amp;#39;ve genetically engineered a goat to produce spider silk proteins which can be harvested from the milk!&lt;/p&gt;\n\n&lt;p&gt;This solves the problem of scale with trying to harvest the protein directly from spider production and presumably the goats a little more fun to work with than the spiders anyway.  &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzvtsz","created":1394582036000,"author_flair_text":null,"created_utc":1394553236000,"distinguished":null,"num_reports":null,"ups":42,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzx4t0","gilded":0,"author":"gh5046","parent_id":"t1_cfzvtsz","approved_by":null,"body":"&gt; *presumably the goats [are] a little more fun to work with than the spiders anyway.*\n\nI'm sure frequent visitors of /r/spiders would disagree with this.","edited":1394561778,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;blockquote&gt;\n&lt;p&gt;&lt;em&gt;presumably the goats [are] a little more fun to work with than the spiders anyway.&lt;/em&gt;&lt;/p&gt;\n&lt;/blockquote&gt;\n\n&lt;p&gt;I&amp;#39;m sure frequent visitors of &lt;a href=\"/r/spiders\"&gt;/r/spiders&lt;/a&gt; would disagree with this.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzx4t0","created":1394584984000,"author_flair_text":null,"created_utc":1394556184000,"distinguished":null,"num_reports":null,"ups":22,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cfzzvqs","gilded":0,"author":"2Punx2Furious","parent_id":"t1_cfzx4t0","approved_by":null,"body":"I'm sure frequent visitors of /r/goats  would disagree with this.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I&amp;#39;m sure frequent visitors of &lt;a href=\"/r/goats\"&gt;/r/goats&lt;/a&gt;  would disagree with this.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzzvqs","created":1394590846000,"author_flair_text":null,"created_utc":1394562046000,"distinguished":null,"num_reports":null,"ups":14,"children":[],"score":14},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cfzyfy5","gilded":0,"author":"Unidan","parent_id":"t1_cfzx4t0","approved_by":null,"body":"Key word: \"presumably\" :)\n\n","edited":false,"author_flair_css_class":null,"downs":5,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Key word: &amp;quot;presumably&amp;quot; :)&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzyfy5","created":1394587797000,"author_flair_text":null,"created_utc":1394558997000,"distinguished":null,"num_reports":null,"ups":27,"children":[],"score":22},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzz706","gilded":0,"author":"TheForceiswithus","parent_id":"t1_cfzx4t0","approved_by":null,"body":"Yup, that link is definitely staying blue.","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Yup, that link is definitely staying blue.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzz706","created":1394589387000,"author_flair_text":null,"created_utc":1394560587000,"distinguished":null,"num_reports":null,"ups":16,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg04u02","gilded":0,"author":"pyx","parent_id":"t1_cfzz706","approved_by":null,"body":"Is it possible to set fire to a subreddit?","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Is it possible to set fire to a subreddit?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg04u02","created":1394600897000,"author_flair_text":null,"created_utc":1394572097000,"distinguished":null,"num_reports":null,"ups":12,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg06q5z","gilded":0,"author":"TheForceiswithus","parent_id":"t1_cg04u02","approved_by":null,"body":"I don't think so, otherwise /r/theredpill would have burnt down a long time ago.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I don&amp;#39;t think so, otherwise &lt;a href=\"/r/theredpill\"&gt;/r/theredpill&lt;/a&gt; would have burnt down a long time ago.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg06q5z","created":1394604643000,"author_flair_text":null,"created_utc":1394575843000,"distinguished":null,"num_reports":null,"ups":4,"children":[],"score":4}],"score":11}],"score":14},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg00ib1","gilded":0,"author":"kangareagle","parent_id":"t1_cfzx4t0","approved_by":null,"body":"I'm a frequent visitor to /r/spiders, but there's no denying the cuteness and personality of goats!","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I&amp;#39;m a frequent visitor to &lt;a href=\"/r/spiders\"&gt;/r/spiders&lt;/a&gt;, but there&amp;#39;s no denying the cuteness and personality of goats!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg00ib1","created":1394592156000,"author_flair_text":null,"created_utc":1394563356000,"distinguished":null,"num_reports":null,"ups":5,"children":[],"score":5}],"score":19}],"score":34}],"score":20},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwohr","gilded":0,"author":"wsgy111","parent_id":"t3_2058f5","approved_by":null,"body":"What is your target audience, age-wise? \n\nAlso do you think you will receive a lot of backlash from religious communities for attempting to \"brainwash\" their children?","edited":false,"author_flair_css_class":null,"downs":7,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;What is your target audience, age-wise? &lt;/p&gt;\n\n&lt;p&gt;Also do you think you will receive a lot of backlash from religious communities for attempting to &amp;quot;brainwash&amp;quot; their children?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwohr","created":1394583974000,"author_flair_text":null,"created_utc":1394555174000,"distinguished":null,"num_reports":null,"ups":23,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwvvj","gilded":0,"author":"Unidan","parent_id":"t1_cfzwohr","approved_by":null,"body":"We're aiming for the same group of children that would be reading things like Dr. Seuss.  As for backlash, we've yet to receive anything to my knowledge!\n\n","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;We&amp;#39;re aiming for the same group of children that would be reading things like Dr. Seuss.  As for backlash, we&amp;#39;ve yet to receive anything to my knowledge!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwvvj","created":1394584428000,"author_flair_text":null,"created_utc":1394555628000,"distinguished":null,"num_reports":null,"ups":36,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwx5x","gilded":0,"author":"wsgy111","parent_id":"t1_cfzwvvj","approved_by":null,"body":"Cool.\n\nFollow up question, did you like that erotica I wrote about you?","edited":false,"author_flair_css_class":null,"downs":8,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Cool.&lt;/p&gt;\n\n&lt;p&gt;Follow up question, did you like that erotica I wrote about you?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwx5x","created":1394584508000,"author_flair_text":null,"created_utc":1394555708000,"distinguished":null,"num_reports":null,"ups":43,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzxerd","gilded":0,"author":"Unidan","parent_id":"t1_cfzwx5x","approved_by":null,"body":"Easily in the top 10 erotica pieces about myself that I've read.","edited":false,"author_flair_css_class":null,"downs":9,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Easily in the top 10 erotica pieces about myself that I&amp;#39;ve read.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzxerd","created":1394585584000,"author_flair_text":null,"created_utc":1394556784000,"distinguished":null,"num_reports":null,"ups":89,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg05f3e","gilded":0,"author":"AlucardD80","parent_id":"t1_cfzxerd","approved_by":null,"body":"There's more than one?","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;There&amp;#39;s more than one?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg05f3e","created":1394602025000,"author_flair_text":null,"created_utc":1394573225000,"distinguished":null,"num_reports":null,"ups":6,"children":[],"score":6}],"score":80},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg02hnr","gilded":0,"author":"Perchick","parent_id":"t1_cfzwx5x","approved_by":null,"body":"link?","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;link?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg02hnr","created":1394596320000,"author_flair_text":null,"created_utc":1394567520000,"distinguished":null,"num_reports":null,"ups":5,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg02osj","gilded":0,"author":"wsgy111","parent_id":"t1_cg02hnr","approved_by":null,"body":"[here](http://www.reddit.com/r/50ShadesOfCray/comments/1xgjrx/unidan_visits_reddit_hq/)","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;&lt;a href=\"http://www.reddit.com/r/50ShadesOfCray/comments/1xgjrx/unidan_visits_reddit_hq/\"&gt;here&lt;/a&gt;&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg02osj","created":1394596719000,"author_flair_text":null,"created_utc":1394567919000,"distinguished":null,"num_reports":null,"ups":16,"children":[],"score":15}],"score":4}],"score":35}],"score":34}],"score":16},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwnvj","gilded":0,"author":"Archchancellor","parent_id":"t3_2058f5","approved_by":null,"body":"Good morning/afternoon/evening!!\n\nMy question is directed at Dr. Wilson:  Is there such a thing as hard vs. soft altruism in the animal kingdom?  Also, do you believe that there is a demarcation between homo sapiens and the rest of Animalia such that ethical/moral privilege should be granted?\n\nThis is purely out of curiosity, I'm not looking to start a fight.  Cheers!","edited":false,"author_flair_css_class":null,"downs":5,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Good morning/afternoon/evening!!&lt;/p&gt;\n\n&lt;p&gt;My question is directed at Dr. Wilson:  Is there such a thing as hard vs. soft altruism in the animal kingdom?  Also, do you believe that there is a demarcation between homo sapiens and the rest of Animalia such that ethical/moral privilege should be granted?&lt;/p&gt;\n\n&lt;p&gt;This is purely out of curiosity, I&amp;#39;m not looking to start a fight.  Cheers!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwnvj","created":1394583937000,"author_flair_text":null,"created_utc":1394555137000,"distinguished":null,"num_reports":null,"ups":17,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzynki","gilded":0,"author":"davidswilson","parent_id":"t1_cfzwnvj","approved_by":null,"body":"Hard altruism usually refers to increasing the welfare of others while decreasing your absolute fitness. Soft altruism refers to increasing the welfare of others while decreasing your relative fitness. As an example, suppose that I do something that gives 10 units to everyone in my group but costs me 2 units to provide.I have increased by absolute welfare by eight units, but I have decreased my fitness relative to the others. I never liked this distinction very much because natural selection is based on relative fitness. Why should we even be making comparisons based on absolute fitness? But in answer to your question, there plenty of examples of both. ","edited":false,"author_flair_css_class":"journ","downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Hard altruism usually refers to increasing the welfare of others while decreasing your absolute fitness. Soft altruism refers to increasing the welfare of others while decreasing your relative fitness. As an example, suppose that I do something that gives 10 units to everyone in my group but costs me 2 units to provide.I have increased by absolute welfare by eight units, but I have decreased my fitness relative to the others. I never liked this distinction very much because natural selection is based on relative fitness. Why should we even be making comparisons based on absolute fitness? But in answer to your question, there plenty of examples of both. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzynki","created":1394588250000,"author_flair_text":"Great Adaptations","created_utc":1394559450000,"distinguished":null,"num_reports":null,"ups":23,"children":[],"score":22}],"score":12},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzzwlm","gilded":0,"author":"aabbccatx","parent_id":"t3_2058f5","approved_by":null,"body":"How many total man hours went into the writing and research so far?","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;How many total man hours went into the writing and research so far?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzzwlm","created":1394590896000,"author_flair_text":null,"created_utc":1394562096000,"distinguished":null,"num_reports":null,"ups":4,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg00vle","gilded":0,"author":"dingemanse","parent_id":"t1_cfzzwlm","approved_by":null,"body":"Quite a few hours! To give you a personal example: Each poem made by Tiffany Brooke Taylor started with quite a bit of research and interacting with a scientist who worked on the topic. I was one of these scientist involved in a poem on why garden birds have personalities and how this mattered in their life. These interactions resulted in a neat text that very closely matches what we know about this topic based on our own research at the Max Planck Institute for Ornithology, but was simultaneously fun and easy to read. We then had various Skype meetings with the illustrator to make sure that again the sketches and drawing captured the biology of the illustrated species ('the great tit' in the personality poem; a European sister species of the black-capped chickadee), and each scientist also wrote a little background paper. Quite a bit of work but a lot of fun!\n","edited":false,"author_flair_css_class":"journ","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Quite a few hours! To give you a personal example: Each poem made by Tiffany Brooke Taylor started with quite a bit of research and interacting with a scientist who worked on the topic. I was one of these scientist involved in a poem on why garden birds have personalities and how this mattered in their life. These interactions resulted in a neat text that very closely matches what we know about this topic based on our own research at the Max Planck Institute for Ornithology, but was simultaneously fun and easy to read. We then had various Skype meetings with the illustrator to make sure that again the sketches and drawing captured the biology of the illustrated species (&amp;#39;the great tit&amp;#39; in the personality poem; a European sister species of the black-capped chickadee), and each scientist also wrote a little background paper. Quite a bit of work but a lot of fun!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg00vle","created":1394592928000,"author_flair_text":"Great Adaptations","created_utc":1394564128000,"distinguished":null,"num_reports":null,"ups":11,"children":[],"score":11},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg00mbp","gilded":0,"author":"davidswilson","parent_id":"t1_cfzzwlm","approved_by":null,"body":"This is hard to say because it is a labor of love that we work on amidst other projects and so many people are involved (e.g., 10 scientists, 10 illustrators). But the number of hours would easily be in the hundreds. ","edited":false,"author_flair_css_class":"journ","downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;This is hard to say because it is a labor of love that we work on amidst other projects and so many people are involved (e.g., 10 scientists, 10 illustrators). But the number of hours would easily be in the hundreds. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg00mbp","created":1394592386000,"author_flair_text":"Great Adaptations","created_utc":1394563586000,"distinguished":null,"num_reports":null,"ups":9,"children":[],"score":8}],"score":4},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg02yla","gilded":0,"author":"dingemanse_primus","parent_id":"t3_2058f5","approved_by":null,"body":"Herr Professor Doktor Dingemanse,\n1: who is your favourite cat, and would you agree that cats have very distinct personalities? \n2: Will our cats affect the personality structure of the great tit population in our garden?\n3: would you agree that, if 2 is the case, this is natural selection at work?\n4: do you think that bird populations are *less* affected by retarded cats, or just *differently*?\n","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Herr Professor Doktor Dingemanse,\n1: who is your favourite cat, and would you agree that cats have very distinct personalities? \n2: Will our cats affect the personality structure of the great tit population in our garden?\n3: would you agree that, if 2 is the case, this is natural selection at work?\n4: do you think that bird populations are &lt;em&gt;less&lt;/em&gt; affected by retarded cats, or just &lt;em&gt;differently&lt;/em&gt;?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg02yla","created":1394597268000,"author_flair_text":null,"created_utc":1394568468000,"distinguished":null,"num_reports":null,"ups":6,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg037wp","gilded":0,"author":"dingemanse","parent_id":"t1_cg02yla","approved_by":null,"body":"1. Our cat \"Mo\"; yes as we detail in the book (!) cats have very different personalities. Dog do too (and are better in expressing them in my opinion)\n2. Possibly, yes. Certain personality types suffer increased predation risk (bold types live shorter in fish, crickets and many other species), and since cats take out any bird that is easy to catch...\n3. Sure.\n4. Both could be true. Is less not different?","edited":false,"author_flair_css_class":"journ","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;ol&gt;\n&lt;li&gt;Our cat &amp;quot;Mo&amp;quot;; yes as we detail in the book (!) cats have very different personalities. Dog do too (and are better in expressing them in my opinion)&lt;/li&gt;\n&lt;li&gt;Possibly, yes. Certain personality types suffer increased predation risk (bold types live shorter in fish, crickets and many other species), and since cats take out any bird that is easy to catch...&lt;/li&gt;\n&lt;li&gt;Sure.&lt;/li&gt;\n&lt;li&gt;Both could be true. Is less not different?&lt;/li&gt;\n&lt;/ol&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg037wp","created":1394597770000,"author_flair_text":"Great Adaptations","created_utc":1394568970000,"distinguished":null,"num_reports":null,"ups":8,"children":[],"score":8}],"score":6},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg0382d","gilded":0,"author":"aluminumpark","parent_id":"t3_2058f5","approved_by":null,"body":"Do you think children having an instinct to pick their nose and then eat their boogers, is an adaptation that allows the body to ingest weakened pathogens and develop immunities to them?","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Do you think children having an instinct to pick their nose and then eat their boogers, is an adaptation that allows the body to ingest weakened pathogens and develop immunities to them?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg0382d","created":1394597779000,"author_flair_text":null,"created_utc":1394568979000,"distinguished":null,"num_reports":null,"ups":6,"children":[],"score":5},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08j53","gilded":0,"author":"briannac25","parent_id":"t3_2058f5","approved_by":null,"body":"Please oh please see this. \n\nI am currently a junior in high school and fascinated by evolution. I want to become an evolutionary biologist and/or paleontologist in the future. I have so many questions to ask, but I have to go to color guard practice right now. Could I contact you guys tomorrow to ask questions?\n\nAnd I think this book is awesome! What a cool way to present evolution to kids.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Please oh please see this. &lt;/p&gt;\n\n&lt;p&gt;I am currently a junior in high school and fascinated by evolution. I want to become an evolutionary biologist and/or paleontologist in the future. I have so many questions to ask, but I have to go to color guard practice right now. Could I contact you guys tomorrow to ask questions?&lt;/p&gt;\n\n&lt;p&gt;And I think this book is awesome! What a cool way to present evolution to kids.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08j53","created":1394608540000,"author_flair_text":null,"created_utc":1394579740000,"distinguished":null,"num_reports":null,"ups":6,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg08k6a","gilded":0,"author":"evolutionbob","parent_id":"t1_cg08j53","approved_by":null,"body":"Send me a PM.","edited":false,"author_flair_css_class":"journ","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Send me a PM.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08k6a","created":1394608603000,"author_flair_text":"Great Adaptations: Robert Kadar","created_utc":1394579803000,"distinguished":null,"num_reports":null,"ups":6,"children":[],"score":6},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg08ki0","gilded":0,"author":"Unidan","parent_id":"t1_cg08j53","approved_by":null,"body":"Sure, write in tomorrow and we'll try to get to it if we can!","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Sure, write in tomorrow and we&amp;#39;ll try to get to it if we can!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08ki0","created":1394608623000,"author_flair_text":null,"created_utc":1394579823000,"distinguished":null,"num_reports":null,"ups":7,"children":[],"score":6}],"score":6},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08n6m","gilded":0,"author":"cheekwind","parent_id":"t3_2058f5","approved_by":null,"body":"Do you have an illustrator yet? Im a graphic designer/illustrator and I would be happy to help. I'm very fond of biology. My father was a bio teacher and I spent most of my childhood out in the woods of northern Michigan exploring.\nEdit: I see you already have some artists in the team, either way good luck, cant wait to see the final product :)","edited":1394580285,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Do you have an illustrator yet? Im a graphic designer/illustrator and I would be happy to help. I&amp;#39;m very fond of biology. My father was a bio teacher and I spent most of my childhood out in the woods of northern Michigan exploring.\nEdit: I see you already have some artists in the team, either way good luck, cant wait to see the final product :)&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08n6m","created":1394608789000,"author_flair_text":null,"created_utc":1394579989000,"distinguished":null,"num_reports":null,"ups":5,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg08ppo","gilded":0,"author":"evolutionbob","parent_id":"t1_cg08n6m","approved_by":null,"body":"We do have illustrators. There may be an opportunity to work on a later book. PM me.","edited":false,"author_flair_css_class":"journ","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;We do have illustrators. There may be an opportunity to work on a later book. PM me.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08ppo","created":1394608945000,"author_flair_text":"Great Adaptations: Robert Kadar","created_utc":1394580145000,"distinguished":null,"num_reports":null,"ups":4,"children":[],"score":4}],"score":4},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08p9d","gilded":0,"author":"sune-ku","parent_id":"t3_2058f5","approved_by":null,"body":"This looks great! I've backed to get a copy for my dad, who struggles to comprehend evolution (although accepts it must be true) so this might be something more on his level. I'm hoping he'll find it amusing as well as elucidating and he also went to Reading Uni like /u/tiffanyevolves so I'm sure he'll appreciate the connection.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;This looks great! I&amp;#39;ve backed to get a copy for my dad, who struggles to comprehend evolution (although accepts it must be true) so this might be something more on his level. I&amp;#39;m hoping he&amp;#39;ll find it amusing as well as elucidating and he also went to Reading Uni like &lt;a href=\"/u/tiffanyevolves\"&gt;/u/tiffanyevolves&lt;/a&gt; so I&amp;#39;m sure he&amp;#39;ll appreciate the connection.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08p9d","created":1394608916000,"author_flair_text":null,"created_utc":1394580116000,"distinguished":null,"num_reports":null,"ups":4,"children":[],"score":4},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg0cc52","gilded":0,"author":"topcat512","parent_id":"t3_2058f5","approved_by":null,"body":"Hi Dr. Wilson. As the only anthropologist on the team, how will you be approaching human evolution in this book? ","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Hi Dr. Wilson. As the only anthropologist on the team, how will you be approaching human evolution in this book? &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg0cc52","created":1394617233000,"author_flair_text":null,"created_utc":1394588433000,"distinguished":null,"num_reports":null,"ups":4,"children":[],"score":4},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzxvl9","gilded":0,"author":"Next_in_line_please","parent_id":"t3_2058f5","approved_by":null,"body":"Hey! Thanks for the AMA and awesome work you are doing! Cannot wait to check out your book! My child (3) loves reading!  I read everything from Dr Seuss to science based books about animals, volcanoes,  and weather to him. My question is what were your favorite books as a child? ","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Hey! Thanks for the AMA and awesome work you are doing! Cannot wait to check out your book! My child (3) loves reading!  I read everything from Dr Seuss to science based books about animals, volcanoes,  and weather to him. My question is what were your favorite books as a child? &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzxvl9","created":1394586586000,"author_flair_text":null,"created_utc":1394557786000,"distinguished":null,"num_reports":null,"ups":12,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzy4py","gilded":0,"author":"davidswilson","parent_id":"t1_cfzxvl9","approved_by":null,"body":"People laugh at me when I mention the Freddy the Pig series as among my favorite books, but I loved them all! I didn't read the Little House on the Prairie series when I was a kid, but I was amazed when I read them to my own kids--great literature and ethnography of American frontier life for people of all ages.","edited":false,"author_flair_css_class":"journ","downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;People laugh at me when I mention the Freddy the Pig series as among my favorite books, but I loved them all! I didn&amp;#39;t read the Little House on the Prairie series when I was a kid, but I was amazed when I read them to my own kids--great literature and ethnography of American frontier life for people of all ages.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzy4py","created":1394587129000,"author_flair_text":"Great Adaptations","created_utc":1394558329000,"distinguished":null,"num_reports":null,"ups":21,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cfzymmv","gilded":0,"author":"Next_in_line_please","parent_id":"t1_cfzy4py","approved_by":null,"body":"Thanks! ","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Thanks! &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzymmv","created":1394588197000,"author_flair_text":null,"created_utc":1394559397000,"distinguished":null,"num_reports":null,"ups":5,"children":[],"score":5}],"score":20},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzydpk","gilded":0,"author":"Unidan","parent_id":"t1_cfzxvl9","approved_by":null,"body":"I had tons of ZooBooks, unsurprisingly, but also read things like The Giver.  I also read a *ton* of Goosebumps books!\n\nI still enjoy things with dark humor, for sure :)","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I had tons of ZooBooks, unsurprisingly, but also read things like The Giver.  I also read a &lt;em&gt;ton&lt;/em&gt; of Goosebumps books!&lt;/p&gt;\n\n&lt;p&gt;I still enjoy things with dark humor, for sure :)&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzydpk","created":1394587667000,"author_flair_text":null,"created_utc":1394558867000,"distinguished":null,"num_reports":null,"ups":23,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzynla","gilded":0,"author":"Next_in_line_please","parent_id":"t1_cfzydpk","approved_by":null,"body":"Thanks! Never would have pegged you as a dark humor kind of person! :)","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Thanks! Never would have pegged you as a dark humor kind of person! :)&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzynla","created":1394588252000,"author_flair_text":null,"created_utc":1394559452000,"distinguished":null,"num_reports":null,"ups":10,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cfzyxjl","gilded":0,"author":"Unidan","parent_id":"t1_cfzynla","approved_by":null,"body":"It's always the ones you least suspect.","edited":false,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;It&amp;#39;s always the ones you least suspect.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzyxjl","created":1394588834000,"author_flair_text":null,"created_utc":1394560034000,"distinguished":null,"num_reports":null,"ups":26,"children":[],"score":23}],"score":10}],"score":21}],"score":10},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg014vw","gilded":0,"author":"FiachB7","parent_id":"t3_2058f5","approved_by":null,"body":"Could you ELI5 evolution. After all it's for a childrens book","edited":false,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Could you ELI5 evolution. After all it&amp;#39;s for a childrens book&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg014vw","created":1394593481000,"author_flair_text":null,"created_utc":1394564681000,"distinguished":null,"num_reports":null,"ups":13,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg02fs2","gilded":0,"author":"tiffanyevolves","parent_id":"t1_cg014vw","approved_by":null,"body":"Well my first book \"little changes\", aims at explaining the concepts of evolution to a young audience, so here's a snippet from it:\n\nUntil one day whilst wandering, two strangers they caught sight,\nOne was short and tubby; the other tall and slight.\nSo different in so many ways: their tail, their shape, their skin;\nThat how could they imagine, that their ancestors were kin?\n\nBut trace the families far enough, and travel back in time,\nFollowing their history in a long unbroken line.\nFocus on their differences and you never would have guessed\n\nThat their great great great great great\ngreat great great great great\ngreat great great great\ngreat great great\ngreat great\ngreat\ngreat\ngreat\ngreat…\ngrandparents shared a family nest.\n\nIf you want to read the rest you can do so (for free) at www.rinkidinks.co.uk","edited":false,"author_flair_css_class":"journ","downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Well my first book &amp;quot;little changes&amp;quot;, aims at explaining the concepts of evolution to a young audience, so here&amp;#39;s a snippet from it:&lt;/p&gt;\n\n&lt;p&gt;Until one day whilst wandering, two strangers they caught sight,\nOne was short and tubby; the other tall and slight.\nSo different in so many ways: their tail, their shape, their skin;\nThat how could they imagine, that their ancestors were kin?&lt;/p&gt;\n\n&lt;p&gt;But trace the families far enough, and travel back in time,\nFollowing their history in a long unbroken line.\nFocus on their differences and you never would have guessed&lt;/p&gt;\n\n&lt;p&gt;That their great great great great great\ngreat great great great great\ngreat great great great\ngreat great great\ngreat great\ngreat\ngreat\ngreat\ngreat…\ngrandparents shared a family nest.&lt;/p&gt;\n\n&lt;p&gt;If you want to read the rest you can do so (for free) at &lt;a href=\"http://www.rinkidinks.co.uk\"&gt;www.rinkidinks.co.uk&lt;/a&gt;&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg02fs2","created":1394596213000,"author_flair_text":"Great Adaptations","created_utc":1394567413000,"distinguished":null,"num_reports":null,"ups":36,"children":[],"score":35},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg02gp2","gilded":0,"author":"Unidan","parent_id":"t1_cg014vw","approved_by":null,"body":"Change in a group of organisms over time.","edited":false,"author_flair_css_class":null,"downs":5,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Change in a group of organisms over time.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg02gp2","created":1394596266000,"author_flair_text":null,"created_utc":1394567466000,"distinguished":null,"num_reports":null,"ups":19,"children":[],"score":14}],"score":10},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwfcf","gilded":0,"author":"AdamSC1","parent_id":"t3_2058f5","approved_by":null,"body":"As dogecoin mod and science lover let me first and foremost say thanks for this awesome AMA!\n\nMy question (which is open to any of you) is:\n\nHow do you feel that modern medicine and luxuries (such as houses) effect evolution? Are we filtering out less biological issues now that we can artificially sustain ourselves? Is this related to the rise in various conditions that range from gluten allergies to asthma? Or is there a reason that this is a non-issue?","edited":false,"author_flair_css_class":null,"downs":11,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;As dogecoin mod and science lover let me first and foremost say thanks for this awesome AMA!&lt;/p&gt;\n\n&lt;p&gt;My question (which is open to any of you) is:&lt;/p&gt;\n\n&lt;p&gt;How do you feel that modern medicine and luxuries (such as houses) effect evolution? Are we filtering out less biological issues now that we can artificially sustain ourselves? Is this related to the rise in various conditions that range from gluten allergies to asthma? Or is there a reason that this is a non-issue?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwfcf","created":1394583404000,"author_flair_text":null,"created_utc":1394554604000,"distinguished":null,"num_reports":null,"ups":29,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwr7v","gilded":0,"author":"Unidan","parent_id":"t1_cfzwfcf","approved_by":null,"body":"Yes, for sure, we are allowing many conditions to persist and thrive in greater frequency than what we would expect otherwise without modern medicine.  Many people suggest this is a bad thing, but it likely has both negative *and* positive repercussions.\n\nSickle-cell anemia, for example, in heterozygous condition, provides resistance to malaria.  It's possible, then, that some of these diseases and conditions may provide unforeseen benefits or resistance in the future.  We're maintaining the existing variation in humans more than before, which is an interesting concept!","edited":false,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Yes, for sure, we are allowing many conditions to persist and thrive in greater frequency than what we would expect otherwise without modern medicine.  Many people suggest this is a bad thing, but it likely has both negative &lt;em&gt;and&lt;/em&gt; positive repercussions.&lt;/p&gt;\n\n&lt;p&gt;Sickle-cell anemia, for example, in heterozygous condition, provides resistance to malaria.  It&amp;#39;s possible, then, that some of these diseases and conditions may provide unforeseen benefits or resistance in the future.  We&amp;#39;re maintaining the existing variation in humans more than before, which is an interesting concept!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwr7v","created":1394584139000,"author_flair_text":null,"created_utc":1394555339000,"distinguished":null,"num_reports":null,"ups":25,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg0457l","gilded":0,"author":"KeScoBo","parent_id":"t1_cfzwr7v","approved_by":null,"body":"I prefer to think about the fact that we're evolving cognitively, rather than genetically. Removing or reducing selective pressure on things like eyesight (with corrective lenses) or innate disease resistance means that more energy can be exerted on developing our ideas. ","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I prefer to think about the fact that we&amp;#39;re evolving cognitively, rather than genetically. Removing or reducing selective pressure on things like eyesight (with corrective lenses) or innate disease resistance means that more energy can be exerted on developing our ideas. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg0457l","created":1394599570000,"author_flair_text":null,"created_utc":1394570770000,"distinguished":null,"num_reports":null,"ups":5,"children":[],"score":5},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzx4sx","gilded":0,"author":"AdamSC1","parent_id":"t1_cfzwr7v","approved_by":null,"body":"Amazing stuff! I have to wonder if the science community in general sees it as something that is neutral or plays out either positive or negative for people.\n\nThen again I guess it's to early in our evolutionary story to tell. Modern times are really so far a foot note!\n\nGreat AMA!\n\n+/u/dogetipbot 1000 doge","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Amazing stuff! I have to wonder if the science community in general sees it as something that is neutral or plays out either positive or negative for people.&lt;/p&gt;\n\n&lt;p&gt;Then again I guess it&amp;#39;s to early in our evolutionary story to tell. Modern times are really so far a foot note!&lt;/p&gt;\n\n&lt;p&gt;Great AMA!&lt;/p&gt;\n\n&lt;p&gt;+&lt;a href=\"/u/dogetipbot\"&gt;/u/dogetipbot&lt;/a&gt; 1000 doge&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzx4sx","created":1394584984000,"author_flair_text":null,"created_utc":1394556184000,"distinguished":null,"num_reports":null,"ups":9,"children":[],"score":8}],"score":22}],"score":18},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg010jy","gilded":0,"author":"ViciousCycle","parent_id":"t3_2058f5","approved_by":null,"body":"Will the book attempt to explain the emergence of novel anatomical features seemingly out of nowhere?  For example, the corpus callosum in placentals.  This has been one of the hardest things about evolution for me (and, I'm guessing, the general public) to wrap my head around, whereas slower modification over time is rather easy to understand.  I suppose an explanation would require delving into developmental issues, which might be beyond the scope of this book.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Will the book attempt to explain the emergence of novel anatomical features seemingly out of nowhere?  For example, the corpus callosum in placentals.  This has been one of the hardest things about evolution for me (and, I&amp;#39;m guessing, the general public) to wrap my head around, whereas slower modification over time is rather easy to understand.  I suppose an explanation would require delving into developmental issues, which might be beyond the scope of this book.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg010jy","created":1394593220000,"author_flair_text":null,"created_utc":1394564420000,"distinguished":null,"num_reports":null,"ups":3,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg01r5y","gilded":0,"author":"dingemanse","parent_id":"t1_cg010jy","approved_by":null,"body":"We are keeping things very simple, focusing on scientific discoveries and topics that are very appealing to a large audience, including children! If you are interested in complex adaptations and how they might evolve, consider reading  \"Climbing mount inprobable\" by Richard Dawkins, which provides an appealing simple explanation for the complex adaptation such as the human eye...","edited":false,"author_flair_css_class":"journ","downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;We are keeping things very simple, focusing on scientific discoveries and topics that are very appealing to a large audience, including children! If you are interested in complex adaptations and how they might evolve, consider reading  &amp;quot;Climbing mount inprobable&amp;quot; by Richard Dawkins, which provides an appealing simple explanation for the complex adaptation such as the human eye...&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg01r5y","created":1394594796000,"author_flair_text":"Great Adaptations","created_utc":1394565996000,"distinguished":null,"num_reports":null,"ups":10,"children":[],"score":9},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg0206d","gilded":0,"author":"tiffanyevolves","parent_id":"t1_cg010jy","approved_by":null,"body":"Well I wasn't aware of the corpus callosum example, but I found a paper that might interest you regarding it called \"The corpus callosum as an evolutionary innovation\"\nby Robin Mihrshahi. There are many examples of truly remarkable innovations in evolution, but there has been some equally remarkable research shedding light on the origins of such innovations. I work simple bacteria, and I'm constantly amazed at how they overcome problems in order to survive, and to understand that takes a lot of work and man-power. But for this book, we are trying to convey the overall concepts and big picture as an introduction to the topic.","edited":false,"author_flair_css_class":"journ","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Well I wasn&amp;#39;t aware of the corpus callosum example, but I found a paper that might interest you regarding it called &amp;quot;The corpus callosum as an evolutionary innovation&amp;quot;\nby Robin Mihrshahi. There are many examples of truly remarkable innovations in evolution, but there has been some equally remarkable research shedding light on the origins of such innovations. I work simple bacteria, and I&amp;#39;m constantly amazed at how they overcome problems in order to survive, and to understand that takes a lot of work and man-power. But for this book, we are trying to convey the overall concepts and big picture as an introduction to the topic.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg0206d","created":1394595320000,"author_flair_text":"Great Adaptations","created_utc":1394566520000,"distinguished":null,"num_reports":null,"ups":9,"children":[],"score":9}],"score":3},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg01cu2","gilded":0,"author":"iamsolunar","parent_id":"t3_2058f5","approved_by":null,"body":"Has the unhealthy food we consume affected our evolutionary path?","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Has the unhealthy food we consume affected our evolutionary path?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg01cu2","created":1394593954000,"author_flair_text":null,"created_utc":1394565154000,"distinguished":null,"num_reports":null,"ups":3,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg02nlr","gilded":0,"author":"Baba_Brinkman","parent_id":"t1_cg01cu2","approved_by":null,"body":"The use of fire to cook food and weaken the chemical bonds (a form of predigestion) definitely affected our evolutionary path, so it's likely our current dietary practices are having an effect as well. See: http://en.wikipedia.org/wiki/Catching_Fire:_How_Cooking_Made_Us_Human","edited":false,"author_flair_css_class":"journ","downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;The use of fire to cook food and weaken the chemical bonds (a form of predigestion) definitely affected our evolutionary path, so it&amp;#39;s likely our current dietary practices are having an effect as well. See: &lt;a href=\"http://en.wikipedia.org/wiki/Catching_Fire:_How_Cooking_Made_Us_Human\"&gt;http://en.wikipedia.org/wiki/Catching_Fire:_How_Cooking_Made_Us_Human&lt;/a&gt;&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg02nlr","created":1394596653000,"author_flair_text":"Great Adaptations","created_utc":1394567853000,"distinguished":null,"num_reports":null,"ups":8,"children":[],"score":7},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg020s3","gilded":0,"author":"dingemanse","parent_id":"t1_cg01cu2","approved_by":null,"body":"That is a very difficult question to answer at the current time. The reason is that evolutionary change occurs when there is selection (such as differential survival or reproduction between individuals) acting on traits (eg. body height), but evolution only occurs when these traits are themselves in part genetically inherited. Most evolutionary changes are very slow and therefore hard to detect, but in any case changes in the genetic make-up of a species in response to selection (food availability, diet) requires, in reality, a number of generations to be detected. In short, time will tell. ","edited":false,"author_flair_css_class":"journ","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;That is a very difficult question to answer at the current time. The reason is that evolutionary change occurs when there is selection (such as differential survival or reproduction between individuals) acting on traits (eg. body height), but evolution only occurs when these traits are themselves in part genetically inherited. Most evolutionary changes are very slow and therefore hard to detect, but in any case changes in the genetic make-up of a species in response to selection (food availability, diet) requires, in reality, a number of generations to be detected. In short, time will tell. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg020s3","created":1394595354000,"author_flair_text":"Great Adaptations","created_utc":1394566554000,"distinguished":null,"num_reports":null,"ups":7,"children":[],"score":7}],"score":3},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg02tr4","gilded":0,"author":"Histidine","parent_id":"t3_2058f5","approved_by":null,"body":"As a very general evolutionary question, is there any evidence that genomic location or context can change how genes evolve?  We think about mutations as being important events necessary to derive new function, but there are also those highly conserved genes which appear to evolve very slowly.  It would seem beneficial if the cell had \"evolutionary hot &amp; coldspots\" within the genome for the various genes, but I don't know if such a mechanism actually exists.","edited":false,"author_flair_css_class":"bio","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;As a very general evolutionary question, is there any evidence that genomic location or context can change how genes evolve?  We think about mutations as being important events necessary to derive new function, but there are also those highly conserved genes which appear to evolve very slowly.  It would seem beneficial if the cell had &amp;quot;evolutionary hot &amp;amp; coldspots&amp;quot; within the genome for the various genes, but I don&amp;#39;t know if such a mechanism actually exists.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg02tr4","created":1394597002000,"author_flair_text":"Grad Student|Biochemistry|Protein Engineering","created_utc":1394568202000,"distinguished":null,"num_reports":null,"ups":4,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg034tm","gilded":0,"author":"tiffanyevolves","parent_id":"t1_cg02tr4","approved_by":null,"body":"Different genes do evolve at different rates. The more important a gene is for survival, the fewer mutations accumulate overtime, and the sequence will be conserved, because there will strong selection to maintain function. Genes that have lost function will accumulate mutations more quickly, because there will be no selection to against mutation accumulation as it does not change function. Very astute observation!","edited":false,"author_flair_css_class":"journ","downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Different genes do evolve at different rates. The more important a gene is for survival, the fewer mutations accumulate overtime, and the sequence will be conserved, because there will strong selection to maintain function. Genes that have lost function will accumulate mutations more quickly, because there will be no selection to against mutation accumulation as it does not change function. Very astute observation!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg034tm","created":1394597606000,"author_flair_text":"Great Adaptations","created_utc":1394568806000,"distinguished":null,"num_reports":null,"ups":8,"children":[],"score":6}],"score":4},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg04eho","gilded":0,"author":"[deleted]","parent_id":"t3_2058f5","approved_by":null,"body":"[deleted]","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;[deleted]&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg04eho","created":1394600078000,"author_flair_text":null,"created_utc":1394571278000,"distinguished":null,"num_reports":null,"ups":3,"children":[],"score":3},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg06v9p","gilded":0,"author":"Dingleberrry","parent_id":"t3_2058f5","approved_by":null,"body":"Why is my asshole so hairy?","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Why is my asshole so hairy?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg06v9p","created":1394604949000,"author_flair_text":null,"created_utc":1394576149000,"distinguished":null,"num_reports":null,"ups":4,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg077p9","gilded":0,"author":"Unidan","parent_id":"t1_cg06v9p","approved_by":null,"body":"It's possible, Dingeberrry, that the trait that promotes butt hair is there because of antagonistic pleiotropy.  \n\nThe genes that promote butt hair may be inexorably linked to other *beneficial* genes that are conserved, so as those genes are passed along, so is the butt-hair gene.","edited":false,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;It&amp;#39;s possible, Dingeberrry, that the trait that promotes butt hair is there because of antagonistic pleiotropy.  &lt;/p&gt;\n\n&lt;p&gt;The genes that promote butt hair may be inexorably linked to other &lt;em&gt;beneficial&lt;/em&gt; genes that are conserved, so as those genes are passed along, so is the butt-hair gene.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg077p9","created":1394605690000,"author_flair_text":null,"created_utc":1394576890000,"distinguished":null,"num_reports":null,"ups":22,"children":[],"score":19},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg06wjv","gilded":0,"author":"evolutionbob","parent_id":"t1_cg06v9p","approved_by":null,"body":"Happens to the best of us.","edited":false,"author_flair_css_class":"journ","downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Happens to the best of us.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg06wjv","created":1394605025000,"author_flair_text":"Great Adaptations: Robert Kadar","created_utc":1394576225000,"distinguished":null,"num_reports":null,"ups":7,"children":[],"score":6}],"score":4},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg06wth","gilded":0,"author":"I_play_elin","parent_id":"t3_2058f5","approved_by":null,"body":"This week's Unidan AMA is shaping up to be the best yet!..","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;This week&amp;#39;s Unidan AMA is shaping up to be the best yet!..&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg06wth","created":1394605042000,"author_flair_text":null,"created_utc":1394576242000,"distinguished":null,"num_reports":null,"ups":3,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg075ll","gilded":0,"author":"Unidan","parent_id":"t1_cg06wth","approved_by":null,"body":"*Yeeeeeeeeeeehaw!*\n\n(Seriously though, I'm going on an AMA hiatus, even I felt bad about doing one so soon.)","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;&lt;em&gt;Yeeeeeeeeeeehaw!&lt;/em&gt;&lt;/p&gt;\n\n&lt;p&gt;(Seriously though, I&amp;#39;m going on an AMA hiatus, even I felt bad about doing one so soon.)&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg075ll","created":1394605568000,"author_flair_text":null,"created_utc":1394576768000,"distinguished":null,"num_reports":null,"ups":5,"children":[],"score":5}],"score":3},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg07uuk","gilded":0,"author":"secondsight","parent_id":"t3_2058f5","approved_by":null,"body":"Shut up and take my money!","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Shut up and take my money!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg07uuk","created":1394607065000,"author_flair_text":null,"created_utc":1394578265000,"distinguished":null,"num_reports":null,"ups":3,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg07y4o","gilded":0,"author":"evolutionbob","parent_id":"t1_cg07uuk","approved_by":null,"body":"You got it! Thanks!","edited":false,"author_flair_css_class":"journ","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;You got it! Thanks!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg07y4o","created":1394607257000,"author_flair_text":"Great Adaptations: Robert Kadar","created_utc":1394578457000,"distinguished":null,"num_reports":null,"ups":5,"children":[],"score":5}],"score":3},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg080zs","gilded":0,"author":"nbktdis","parent_id":"t3_2058f5","approved_by":null,"body":"What age group of children will you be targeting with your book?","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;What age group of children will you be targeting with your book?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg080zs","created":1394607430000,"author_flair_text":null,"created_utc":1394578630000,"distinguished":null,"num_reports":null,"ups":3,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg08865","gilded":0,"author":"Unidan","parent_id":"t1_cg080zs","approved_by":null,"body":"Likely the same ages that would enjoy Dr. Seuss.","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Likely the same ages that would enjoy Dr. Seuss.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08865","created":1394607870000,"author_flair_text":null,"created_utc":1394579070000,"distinguished":null,"num_reports":null,"ups":5,"children":[],"score":4},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08b3v","gilded":0,"author":"evolutionbob","parent_id":"t1_cg080zs","approved_by":null,"body":"All ages that would read Dr. Seuss! To be technical, \"Middle Readers – Grades 3-5, ages 8-10; Older Readers – Grades 6-8, ages 11-14; All Ages – Has appeal and interest for children in all of the above age ranges\"","edited":false,"author_flair_css_class":"journ","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;All ages that would read Dr. Seuss! To be technical, &amp;quot;Middle Readers – Grades 3-5, ages 8-10; Older Readers – Grades 6-8, ages 11-14; All Ages – Has appeal and interest for children in all of the above age ranges&amp;quot;&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08b3v","created":1394608050000,"author_flair_text":"Great Adaptations: Robert Kadar","created_utc":1394579250000,"distinguished":null,"num_reports":null,"ups":3,"children":[],"score":3}],"score":3},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg085ge","gilded":0,"author":"robotortoise","parent_id":"t3_2058f5","approved_by":null,"body":"Mr. Undian,  I have a challenge for you, not a question.\nThink of one good thing mosquitoes do that isn't already being done by another animal.\n\nFor instance, you can't say pollinating, because bees already fill that role.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Mr. Undian,  I have a challenge for you, not a question.\nThink of one good thing mosquitoes do that isn&amp;#39;t already being done by another animal.&lt;/p&gt;\n\n&lt;p&gt;For instance, you can&amp;#39;t say pollinating, because bees already fill that role.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg085ge","created":1394607704000,"author_flair_text":null,"created_utc":1394578904000,"distinguished":null,"num_reports":null,"ups":4,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08al0","gilded":0,"author":"Unidan","parent_id":"t1_cg085ge","approved_by":null,"body":"Can we ask the same thing of humans?","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Can we ask the same thing of humans?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08al0","created":1394608020000,"author_flair_text":null,"created_utc":1394579220000,"distinguished":null,"num_reports":null,"ups":9,"children":[],"score":7}],"score":4},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08a9p","gilded":0,"author":"schallazar","parent_id":"t3_2058f5","approved_by":null,"body":"Are you preparing at all for the backlash you are going to get when you try to release these books into the American southeast? They might very well try to take legal action to prevent you guys from releasing them.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Are you preparing at all for the backlash you are going to get when you try to release these books into the American southeast? They might very well try to take legal action to prevent you guys from releasing them.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08a9p","created":1394608000000,"author_flair_text":null,"created_utc":1394579200000,"distinguished":null,"num_reports":null,"ups":3,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg08bhm","gilded":0,"author":"Unidan","parent_id":"t1_cg08a9p","approved_by":null,"body":"So far, so good! :)","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;So far, so good! :)&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08bhm","created":1394608074000,"author_flair_text":null,"created_utc":1394579274000,"distinguished":null,"num_reports":null,"ups":3,"children":[],"score":2}],"score":3},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08c69","gilded":0,"author":"Fremen13","parent_id":"t3_2058f5","approved_by":null,"body":"Read that as \"revolutionary\" this AMA was really different than what I expected","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Read that as &amp;quot;revolutionary&amp;quot; this AMA was really different than what I expected&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08c69","created":1394608114000,"author_flair_text":null,"created_utc":1394579314000,"distinguished":null,"num_reports":null,"ups":3,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08e9j","gilded":0,"author":"evolutionbob","parent_id":"t1_cg08c69","approved_by":null,"body":"If you want, you can consider us rEvolutionaries. ","edited":false,"author_flair_css_class":"journ","downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;If you want, you can consider us rEvolutionaries. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08e9j","created":1394608242000,"author_flair_text":"Great Adaptations: Robert Kadar","created_utc":1394579442000,"distinguished":null,"num_reports":null,"ups":10,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08hed","gilded":0,"author":"Unidan","parent_id":"t1_cg08e9j","approved_by":null,"body":"This is the lamest thing I've read today, Robert.  Thank you.","edited":false,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;This is the lamest thing I&amp;#39;ve read today, Robert.  Thank you.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08hed","created":1394608435000,"author_flair_text":null,"created_utc":1394579635000,"distinguished":null,"num_reports":null,"ups":9,"children":[],"score":6}],"score":9}],"score":3},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08sg6","gilded":0,"author":"TinyBoobsFlatAss","parent_id":"t3_2058f5","approved_by":null,"body":"Why must you be so perfect.. Don't you ever get stressed doing so many things?","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Why must you be so perfect.. Don&amp;#39;t you ever get stressed doing so many things?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08sg6","created":1394609109000,"author_flair_text":null,"created_utc":1394580309000,"distinguished":null,"num_reports":null,"ups":3,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg08t2k","gilded":0,"author":"Unidan","parent_id":"t1_cg08sg6","approved_by":null,"body":"All the things I do are fun!","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;All the things I do are fun!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08t2k","created":1394609147000,"author_flair_text":null,"created_utc":1394580347000,"distinguished":null,"num_reports":null,"ups":5,"children":[],"score":4}],"score":3},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08wrb","gilded":0,"author":"krayh","parent_id":"t3_2058f5","approved_by":null,"body":"Were you aware of the fact that Will Wright designed The Sims based on Sewell Wright's theory of adaptive evolutionary landscapes? The life of a Sim is full of local maxima that are meant to be representative of the same types of peaks on a fitness landscape that Sewell Wright imagined animals experience during evolution. ","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Were you aware of the fact that Will Wright designed The Sims based on Sewell Wright&amp;#39;s theory of adaptive evolutionary landscapes? The life of a Sim is full of local maxima that are meant to be representative of the same types of peaks on a fitness landscape that Sewell Wright imagined animals experience during evolution. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08wrb","created":1394609366000,"author_flair_text":null,"created_utc":1394580566000,"distinguished":null,"num_reports":null,"ups":3,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg08yfh","gilded":0,"author":"evolutionbob","parent_id":"t1_cg08wrb","approved_by":null,"body":"reference?\n","edited":false,"author_flair_css_class":"journ","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;reference?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg08yfh","created":1394609470000,"author_flair_text":"Great Adaptations: Robert Kadar","created_utc":1394580670000,"distinguished":null,"num_reports":null,"ups":3,"children":[],"score":3}],"score":3},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg09no1","gilded":0,"author":"somethingoriginal3","parent_id":"t3_2058f5","approved_by":null,"body":"/u/Unidan are you married/taken?","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;&lt;a href=\"/u/Unidan\"&gt;/u/Unidan&lt;/a&gt; are you married/taken?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg09no1","created":1394611052000,"author_flair_text":null,"created_utc":1394582252000,"distinguished":null,"num_reports":null,"ups":3,"children":[],"score":3},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg0csoa","gilded":0,"author":"paradoxer99","parent_id":"t3_2058f5","approved_by":null,"body":"How far away are we from a cure from cancer, and can you do anything about it?","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;How far away are we from a cure from cancer, and can you do anything about it?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg0csoa","created":1394618227000,"author_flair_text":null,"created_utc":1394589427000,"distinguished":null,"num_reports":null,"ups":3,"children":[],"score":3},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg0cv99","gilded":0,"author":"rjpaul","parent_id":"t3_2058f5","approved_by":null,"body":"Where did your name come from. BTW. You ate by far my favorite famous person.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Where did your name come from. BTW. You ate by far my favorite famous person.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg0cv99","created":1394618381000,"author_flair_text":null,"created_utc":1394589581000,"distinguished":null,"num_reports":null,"ups":3,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg0cwjh","gilded":0,"author":"Unidan","parent_id":"t1_cg0cv99","approved_by":null,"body":"* It comes from Uniden brand phones.\n\n* I'm sorry, I didn't mean to eat your favorite person! :(","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;ul&gt;\n&lt;li&gt;&lt;p&gt;It comes from Uniden brand phones.&lt;/p&gt;&lt;/li&gt;\n&lt;li&gt;&lt;p&gt;I&amp;#39;m sorry, I didn&amp;#39;t mean to eat your favorite person! :(&lt;/p&gt;&lt;/li&gt;\n&lt;/ul&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg0cwjh","created":1394618457000,"author_flair_text":null,"created_utc":1394589657000,"distinguished":null,"num_reports":null,"ups":7,"children":[],"score":5}],"score":3},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzw30o","gilded":0,"author":"Santa_on_a_stick","parent_id":"t3_2058f5","approved_by":null,"body":"Do you guys have any plans to get this book into any public or private schools? ","edited":false,"author_flair_css_class":null,"downs":6,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Do you guys have any plans to get this book into any public or private schools? &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzw30o","created":1394582619000,"author_flair_text":null,"created_utc":1394553819000,"distinguished":null,"num_reports":null,"ups":15,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzw9ls","gilded":0,"author":"Unidan","parent_id":"t1_cfzw30o","approved_by":null,"body":"We don't have anything concrete at the moment, as we're still working with Breadpig on publishing this in the first place; however, we've been told that the children's book market is a big one and can be difficult to break into, so a wide distribution into public or private schools may be difficult.  \n\nThat said, we like difficult tasks!  We're open to any type of contact someone might have to help us take us closer to making that a reality.  Breadpig is donating 100 copies of the book to public libraries as it is as a reward for the wonderful response we've had thus far in raising funds for the publication.","edited":false,"author_flair_css_class":null,"downs":5,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;We don&amp;#39;t have anything concrete at the moment, as we&amp;#39;re still working with Breadpig on publishing this in the first place; however, we&amp;#39;ve been told that the children&amp;#39;s book market is a big one and can be difficult to break into, so a wide distribution into public or private schools may be difficult.  &lt;/p&gt;\n\n&lt;p&gt;That said, we like difficult tasks!  We&amp;#39;re open to any type of contact someone might have to help us take us closer to making that a reality.  Breadpig is donating 100 copies of the book to public libraries as it is as a reward for the wonderful response we&amp;#39;ve had thus far in raising funds for the publication.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzw9ls","created":1394583040000,"author_flair_text":null,"created_utc":1394554240000,"distinguished":null,"num_reports":null,"ups":18,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwsk7","gilded":0,"author":"munchauzen","parent_id":"t1_cfzw9ls","approved_by":null,"body":"My mom is a Pre-K teacher. If this gets published, I will most certainly buy a copy for her classroom!","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;My mom is a Pre-K teacher. If this gets published, I will most certainly buy a copy for her classroom!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwsk7","created":1394584220000,"author_flair_text":null,"created_utc":1394555420000,"distinguished":null,"num_reports":null,"ups":10,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cfzyo1v","gilded":0,"author":"Unidan","parent_id":"t1_cfzwsk7","approved_by":null,"body":"Wonderful, thank you!","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Wonderful, thank you!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzyo1v","created":1394588277000,"author_flair_text":null,"created_utc":1394559477000,"distinguished":null,"num_reports":null,"ups":12,"children":[],"score":10}],"score":10},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwh87","gilded":0,"author":"Santa_on_a_stick","parent_id":"t1_cfzw9ls","approved_by":null,"body":"I figured. I unfortunately don't know much about the regulations on getting books into school libraries/etc, but I suspect it's not easy. Though, if Texas can push for creationism in science books...\n\nI ask because I feel the people who would benefit most from these books may not have any other opportunities to be exposed to the book. Dawkins released \"The Magic of Reality\" a few years ago and my hometown freaked out over \"Scientists trying to indoctrinate our kids\", essentially. I'd love for \"Great Adaptations\" to have a different reception, or at least be available for the children of parents who might otherwise ignore the book. \n\nLong story short: I'm extremely excited about this book and for what it can potentially do to encourage scientific thought and learning in young people. ","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I figured. I unfortunately don&amp;#39;t know much about the regulations on getting books into school libraries/etc, but I suspect it&amp;#39;s not easy. Though, if Texas can push for creationism in science books...&lt;/p&gt;\n\n&lt;p&gt;I ask because I feel the people who would benefit most from these books may not have any other opportunities to be exposed to the book. Dawkins released &amp;quot;The Magic of Reality&amp;quot; a few years ago and my hometown freaked out over &amp;quot;Scientists trying to indoctrinate our kids&amp;quot;, essentially. I&amp;#39;d love for &amp;quot;Great Adaptations&amp;quot; to have a different reception, or at least be available for the children of parents who might otherwise ignore the book. &lt;/p&gt;\n\n&lt;p&gt;Long story short: I&amp;#39;m extremely excited about this book and for what it can potentially do to encourage scientific thought and learning in young people. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwh87","created":1394583522000,"author_flair_text":null,"created_utc":1394554722000,"distinguished":null,"num_reports":null,"ups":5,"children":[],"score":4},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cg00g9g","gilded":0,"author":"Marimba_Ani","parent_id":"t1_cfzw9ls","approved_by":null,"body":"Will it be available for purchase anywhere after the Kickstarter ends?\n\nI'd like to be able to buy copies to give to my kids' future schools.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Will it be available for purchase anywhere after the Kickstarter ends?&lt;/p&gt;\n\n&lt;p&gt;I&amp;#39;d like to be able to buy copies to give to my kids&amp;#39; future schools.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg00g9g","created":1394592037000,"author_flair_text":null,"created_utc":1394563237000,"distinguished":null,"num_reports":null,"ups":2,"children":[],"score":2}],"score":13}],"score":9},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzwvog","gilded":0,"author":"GreenStrong","parent_id":"t3_2058f5","approved_by":null,"body":"No questions, just a note of thanks for the work that went into this, I plan to get it and think my kids will enjoy it.\n\nUnidan, you in particular seem to have a knack for popularizing and explaining science, in a way that redditors love, I hope you keep working on projects like this.","edited":false,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;No questions, just a note of thanks for the work that went into this, I plan to get it and think my kids will enjoy it.&lt;/p&gt;\n\n&lt;p&gt;Unidan, you in particular seem to have a knack for popularizing and explaining science, in a way that redditors love, I hope you keep working on projects like this.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzwvog","created":1394584416000,"author_flair_text":null,"created_utc":1394555616000,"distinguished":null,"num_reports":null,"ups":11,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cfzxqac","gilded":0,"author":"Unidan","parent_id":"t1_cfzwvog","approved_by":null,"body":"Thank you, that's extremely kind of you to say, I'm always thrilled to hear that people are engaged with what we're trying to do!","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Thank you, that&amp;#39;s extremely kind of you to say, I&amp;#39;m always thrilled to hear that people are engaged with what we&amp;#39;re trying to do!&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzxqac","created":1394586267000,"author_flair_text":null,"created_utc":1394557467000,"distinguished":null,"num_reports":null,"ups":5,"children":[],"score":5}],"score":8},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzyo26","gilded":0,"author":"arshaqV","parent_id":"t3_2058f5","approved_by":null,"body":"A children's book about evolution has a high chance of not taking off, right?","edited":false,"author_flair_css_class":null,"downs":2,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;A children&amp;#39;s book about evolution has a high chance of not taking off, right?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzyo26","created":1394588277000,"author_flair_text":null,"created_utc":1394559477000,"distinguished":null,"num_reports":null,"ups":6,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzypei","gilded":0,"author":"davidswilson","parent_id":"t1_cfzyo26","approved_by":null,"body":"Wrong! We sense tremendous interest, which is reflected in our successful Kickstarter campaign. ","edited":false,"author_flair_css_class":"journ","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Wrong! We sense tremendous interest, which is reflected in our successful Kickstarter campaign. &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzypei","created":1394588353000,"author_flair_text":"Great Adaptations","created_utc":1394559553000,"distinguished":null,"num_reports":null,"ups":12,"children":[],"score":12},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzyyfr","gilded":0,"author":"Unidan","parent_id":"t1_cfzyo26","approved_by":null,"body":"If \"Everybody Poops\" can be a bestseller, I'm not too worried.","edited":false,"author_flair_css_class":null,"downs":4,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;If &amp;quot;Everybody Poops&amp;quot; can be a bestseller, I&amp;#39;m not too worried.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzyyfr","created":1394588885000,"author_flair_text":null,"created_utc":1394560085000,"distinguished":null,"num_reports":null,"ups":30,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg006xq","gilded":0,"author":"sugarclit","parent_id":"t1_cfzyyfr","approved_by":null,"body":"I love Everybody Poops. It's so relatable.  ","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I love Everybody Poops. It&amp;#39;s so relatable.  &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg006xq","created":1394591500000,"author_flair_text":null,"created_utc":1394562700000,"distinguished":null,"num_reports":null,"ups":9,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg013ps","gilded":0,"author":"Unidan","parent_id":"t1_cg006xq","approved_by":null,"body":"And we're all products of evolution, so, see?  Totally the same.","edited":false,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;And we&amp;#39;re all products of evolution, so, see?  Totally the same.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg013ps","created":1394593411000,"author_flair_text":null,"created_utc":1394564611000,"distinguished":null,"num_reports":null,"ups":17,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg01vu6","gilded":0,"author":"420patience","parent_id":"t1_cg013ps","approved_by":null,"body":"How many Poop-deniers do you see these days?","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;How many Poop-deniers do you see these days?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg01vu6","created":1394595065000,"author_flair_text":null,"created_utc":1394566265000,"distinguished":null,"num_reports":null,"ups":11,"children":[],"score":11}],"score":14}],"score":8}],"score":26},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"replies":"","saved":false,"id":"cfzyzp0","gilded":0,"author":"evolutionbob","parent_id":"t1_cfzyo26","approved_by":null,"body":"Taking off toward the stars, I hope! With your help it can be a success.","edited":false,"author_flair_css_class":"journ","downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Taking off toward the stars, I hope! With your help it can be a success.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzyzp0","created":1394588961000,"author_flair_text":"Great Adaptations: Robert Kadar","created_utc":1394560161000,"distinguished":null,"num_reports":null,"ups":6,"children":[],"score":6}],"score":4},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzysr8","gilded":0,"author":"[deleted]","parent_id":"t3_2058f5","approved_by":null,"body":"[deleted]","edited":false,"author_flair_css_class":null,"downs":1,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;[deleted]&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzysr8","created":1394588557000,"author_flair_text":null,"created_utc":1394559757000,"distinguished":null,"num_reports":null,"ups":6,"children":[{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzyzqt","gilded":0,"author":"Unidan","parent_id":"t1_cfzysr8","approved_by":null,"body":"I think the idea that there is a \"progression\" for evolution, in that intelligence is the ideal that all organisms are eventually evolving towards.  People put humanity on a pedestal because, well, they're humans!\n\nAlso, sure, why not?","edited":false,"author_flair_css_class":null,"downs":3,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;I think the idea that there is a &amp;quot;progression&amp;quot; for evolution, in that intelligence is the ideal that all organisms are eventually evolving towards.  People put humanity on a pedestal because, well, they&amp;#39;re humans!&lt;/p&gt;\n\n&lt;p&gt;Also, sure, why not?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzyzqt","created":1394588965000,"author_flair_text":null,"created_utc":1394560165000,"distinguished":null,"num_reports":null,"ups":11,"children":[],"score":8}],"score":5},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzzi1t","gilded":0,"author":"Shark_Bytes","parent_id":"t3_2058f5","approved_by":null,"body":"Hi Unidan and friends!\n\n1. Unidan, you might remember me from the sea star thread a while back where someone found a sea star with a double arm. Have any of you heard about the disease affecting sea stars where they lose their arms? Could this be a genetic mutation or is it more likely a virus or pathogen? Any opinions on it?\n\n2. Scientifically, what are your opinions on Bigfoot, the Loch Ness Monster, and other famous \"cryptids\"? Do you think that some of these ecosystems could support a population of these organisms? Personally, I don't think that Loch Ness could support an animal said to be as large as the Loch Ness Monster for an extended period of time because of a confined area and finite food sources as opposed to a larger body of water like an ocean. Also, how do you guys think it may have survived so long if it does exist? Could there be a small, breeding population? \nHow do you think these \"cryptids\" have eluded capture or discovery of a body for so long?\n\nThanks for doing this AMA! \n\n\n","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Hi Unidan and friends!&lt;/p&gt;\n\n&lt;ol&gt;\n&lt;li&gt;&lt;p&gt;Unidan, you might remember me from the sea star thread a while back where someone found a sea star with a double arm. Have any of you heard about the disease affecting sea stars where they lose their arms? Could this be a genetic mutation or is it more likely a virus or pathogen? Any opinions on it?&lt;/p&gt;&lt;/li&gt;\n&lt;li&gt;&lt;p&gt;Scientifically, what are your opinions on Bigfoot, the Loch Ness Monster, and other famous &amp;quot;cryptids&amp;quot;? Do you think that some of these ecosystems could support a population of these organisms? Personally, I don&amp;#39;t think that Loch Ness could support an animal said to be as large as the Loch Ness Monster for an extended period of time because of a confined area and finite food sources as opposed to a larger body of water like an ocean. Also, how do you guys think it may have survived so long if it does exist? Could there be a small, breeding population? \nHow do you think these &amp;quot;cryptids&amp;quot; have eluded capture or discovery of a body for so long?&lt;/p&gt;&lt;/li&gt;\n&lt;/ol&gt;\n\n&lt;p&gt;Thanks for doing this AMA! &lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzzi1t","created":1394590040000,"author_flair_text":null,"created_utc":1394561240000,"distinguished":null,"num_reports":null,"ups":2,"children":[],"score":2},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzzjqi","gilded":0,"author":"whiskey4breakfast","parent_id":"t3_2058f5","approved_by":null,"body":"/u/unidan, have you ever considered asking Greg Graffin (Author of  \"Evolution, Monism, Atheism, and the Naturalist World-View: Perspectives from Evolutionary Biology\" and lead singer of Bad Religion) to compose a kick ass theme song for you?","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;&lt;a href=\"/u/unidan\"&gt;/u/unidan&lt;/a&gt;, have you ever considered asking Greg Graffin (Author of  &amp;quot;Evolution, Monism, Atheism, and the Naturalist World-View: Perspectives from Evolutionary Biology&amp;quot; and lead singer of Bad Religion) to compose a kick ass theme song for you?&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzzjqi","created":1394590142000,"author_flair_text":null,"created_utc":1394561342000,"distinguished":null,"num_reports":null,"ups":2,"children":[],"score":2},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cfzzmrx","gilded":0,"author":"JsHallett","parent_id":"t3_2058f5","approved_by":null,"body":"No question, just a BIG thank you.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;No question, just a BIG thank you.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cfzzmrx","created":1394590318000,"author_flair_text":null,"created_utc":1394561518000,"distinguished":null,"num_reports":null,"ups":3,"children":[],"score":3},{"subreddit_id":"t5_mouw","banned_by":null,"subreddit":"science","likes":null,"saved":false,"id":"cg012wz","gilded":0,"author":"GreatEvilBetty","parent_id":"t3_2058f5","approved_by":null,"body":"Have you ever done any work with the Alaskan U.S. Fish and Wildlife Service? I have a relative who is a part of that, and has been for the past 25 years or more, just curious if you may have ever met. He's a scientist as well, studies the various Alaskan ecosystems trying to promote growth and gage how much hunting/fishing should be done during the season.","edited":false,"author_flair_css_class":null,"downs":0,"body_html":"&lt;div class=\"md\"&gt;&lt;p&gt;Have you ever done any work with the Alaskan U.S. Fish and Wildlife Service? I have a relative who is a part of that, and has been for the past 25 years or more, just curious if you may have ever met. He&amp;#39;s a scientist as well, studies the various Alaskan ecosystems trying to promote growth and gage how much hunting/fishing should be done during the season.&lt;/p&gt;\n&lt;/div&gt;","link_id":"t3_2058f5","score_hidden":false,"name":"t1_cg012wz","created":1394593361000,"author_flair_text":null,"created_utc":1394564561000,"distinguished":null,"num_reports":null,"ups":2,"children":[],"score":2}]}
/*! jQuery UI - v1.10.4 - 2014-03-06
* http://jqueryui.com
* Includes: jquery.ui.core.css, jquery.ui.slider.css, jquery.ui.theme.css
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */

.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url(https://raw.githubusercontent.com/dlopuch/sketchbook/master/public/css/jquery-ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url(https://raw.githubusercontent.com/dlopuch/sketchbook/master/public/css/jquery-ui/images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_ffffff_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_228ef1_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_ffd27a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px}
div(style='width: 75%;')
  h2(style='margin-top: 0;') Fireflies - A Dance of Discourse 
  p
    | Visualization worked forked from Dan Lopuch's Fireflies being modeled for application in Spokenvote to show the progression of a consensus decision.
  h3 Angular.js
  | 
  div(style='width: 100%;')
    #timeline-ng(style='width: 75%;')
      force-form
    force-chart( data="data" options='options' hovered="hovered(args)" )

      // p
      //   | Comment threads are often shown as hierarchical nested streams down the page.  Such a format loses out on
      //   | all of the interesting dynamics.  In this visualization, we focus not so much on the content of a discussion,
      //   | but rather the
      //   i shape
      //   | that the interactions make as participants dance and flash at each other:
      //   i
      //     | the shape
      //     | of a conversation.
      // p
      //   | Here we visualize 
      //   a(href='http://www.reddit.com/r/science/comments/2058f5', target='_blank') some conversation thread
      //   | .
      //   | Nodes are authors, and the slider scrubs through time.  An author flashes red when they make a comment, and they
      //   | enter the visualization on their first comment (like a firefly joining in out of the dark).
      // p
      //   | Links between authors show reply chains between participants.  As partipants communicate with each other, a
      //   | network of conversation builds up.  However, conversations are dynamic and ephemeral; networks between authors
      //   | build up then fade away as the authors move on.  In this visualization, links disapear about 5 minutes after
      //   | the last comment in the conversation's branch is made. 
      //   span.ephemeral.start
      //     a See an example
      //   span.ephemeral.drag(style='display: none;')
      //     | Now drag a green node somewhere to start time.  Keep your eye on the green conversation branch.
      //   span.ephemeral.restart(style='display: none;')
      //     | Conversation structure is ephemeral.
      //     a Restart
      //     | , or scrub time yourself.
  h3 Backbone.js
  div(style='width: 100%;')
    #fireflies
      #timeline(style='width: 75%;')
        #timeline_slider
        div
          a.play(href='#') Play
          a.pause(href='#', style='display: none;') Pause
      #force_view
        

FireCtrl = ( $scope, $http, $interval, CommentTreeLoader, CommentTreeParse, TreeToAuthorNodes, AuthorNodeEmitter ) ->

  $scope.options =
    headLabel: 'Play'
    currentTs: undefined 
    sliderReset: true
    radiusMeasure: 7
    force:
      charge: (d) ->
        d.authorForceViewCharge or -200 

  #console.log '$scope.options', $scope.options
  
  $scope.author = "Hover any dot"
  
  $scope.hovered = (d) ->
    $scope.author = 'Author: ' + d
    $scope.$apply()

  timer = undefined
  
  $scope.play = ->
    if angular.isDefined(timer)
        $scope.pauseSlider()
    else    
      $scope.options.headLabel = 'Pause'
      forward = true
      curVal = undefined
      dir = 1
      tick = 120000
      timer = $interval(->
        curVal = Number($scope.options.currentTs) or $scope.options.min
        dir = -6  if curVal + tick > $scope.options.max
        if curVal - tick < $scope.options.min
          dir = 1  
          $scope.options.sliderReset = true
        $scope.options.currentTs = curVal + dir * 120000
        #console.log 'Number(curVal + dir * 60000)', Number(curVal + dir * 60000)
        #console.log 'ng $scope.options.currentTs', ~~($scope.options.currentTs / 60000)-23242540
      , 120) # must be larger than debounce!

  $scope.pauseSlider = ->
    if angular.isDefined(timer)
      $interval.cancel timer
      $scope.options.headLabel = 'Play'
      timer = `undefined`
  
  $scope.$on "$destroy", ->
    # Make sure that the interval is destroyed too
    $scope.pauseSlider()
  
  CommentTreeLoader().then (rootComment) ->
    CommentTreeParse rootComment
    #console.log "ng-service rootComment: ", rootComment
    authorNodesEtc = TreeToAuthorNodes rootComment
    
    # demo cludge: luckysunbunny's comment was created well after all the others.  To avoid unbalanced timeline,
    # lets just filter out that outlier
    authorNodesEtc.allComments = authorNodesEtc.allComments.filter (d) ->
      d.author isnt "luckysunbunny"
    
    delete authorNodesEtc.authorDataByAuthor.luckysunbunny

    authorNodesEtc.authorNodes = authorNodesEtc.authorNodes.filter (d) ->
      d.author isnt "luckysunbunny"
    
    authorNodesEtc.links = authorNodesEtc.links.filter (d) ->
      d.sourceAuthor isnt "luckysunbunny"

    AuthorNodeEmitter.initialize(_.merge(
      linkWindowPercentage: 0.05
    , authorNodesEtc)) 

    #console.log "ng-service authorNodesEtc: ", authorNodesEtc
    #console.log 'ng AuthorNodeEmitter', AuthorNodeEmitter
    
    $scope.options.min = AuthorNodeEmitter.getMinAuthorTs()
    $scope.options.max = AuthorNodeEmitter.getMaxAuthorTs()
    #$scope.options.currentTs = '1394567043475'
    $scope.options.currentTs = AuthorNodeEmitter.getMinAuthorTs()
    $scope.options.currentTime = Date($scope.options.currentTs)
    
    $scope.$watch 'options.currentTs', ->
      $scope.data = AuthorNodeEmitter.emitAuthorsUpToTs($scope.options.currentTs)
      #console.log 'ng $watch emitAuthorsUpToTs', $scope.data

App.controller 'FireCtrl', FireCtrl
  


forceForm = ->
  restrict: "EA"
  replace: true
  template: "<div class=\"form\">" +
    #"<h4>Time: {{ options.currentTs }} </h4>" +
    "<h4 style='text-align:center'>{{ author }} </h4>" +
    "<input type=\"range\" ng-model=\"options.currentTs\" min=\"1394552435000\" max=\"1394589657000\"/>" + 
    "<div><a href=# ng-click=\"play()\" tooltip=\"Click to start the conversation.\">{{ options.headLabel }}</a></div>" + 
    "<br />  </div>"


forceChart = (AuthorNodeEmitter, AnimatingExperiments) ->
  restrict: "EA"
  replace: true
  scope:
    data: "="
    options: '='
    author: "&author"
    hovered: "&hovered"

  link: (scope, element, attrs) ->
    #console.log 'link start data', scope 

    DEFAULT_W = 900
    DEFAULT_H = 600
    FORCE_VIEW_I = 1
    
    ###
    Data join for nodes and links.  Always use the 'id' property.
    ###
    DATA_JOIN_ON_ID = (d) ->
      #console.log 'DATA_JOIN_ON_ID', d.id
      d.id
  
    # Link accessor functions.  Static functions, so we're not redefining them every update.
    LINK_SOURCE_X = (d) ->
      d.source.x
  
    LINK_SOURCE_Y = (d) ->
      d.source.y
  
    LINK_TARGET_X = (d) ->
      d.source.x
  
    LINK_TARGET_Y = (d) ->
      d.source.x
  
    ###
    When nodes animate out of the force view, we animate them to these css params
    ###
    EXIT_ANIMATE_STYLE = opacity: 0
    
    ###
    Opposite state of the EXIT_ANIMATE_STYLE
    ###
    ENTER_ANIMATE_STYLE = opacity: 1

    # Every force view gets its own ID.  This is used to scope ForceView instance-specific state onto the node Objects
    scope.id = "_fv" + FORCE_VIEW_I++
    
    # Set default options
    scope.options.w = element[0].offsetWidth or DEFAULT_W
    scope.options.h = element[0].offsetHeight or DEFAULT_H
    scope.options.enterAtParent = true
    scope.options.enterCenterJitter = 10
    scope.options.animateExit =
      msToFade: 1000
 
    scope._tick = ->
      scope._links
        .attr 
          x1: (d) ->
            d.source.x
          y1: (d) ->
            d.source.y
          x2: (d) ->
            d.target.x
          y2: (d) ->
            d.target.y
    
      scope._nodes
        .attr
          transform: (d) ->
            "translate(" + d.x + "," + d.y + ")"
        
      #scope._nodes
        #.attr 
          #cx: (d) ->
            #d.x
          #cy: (d) ->
            #d.y
      
      #Repeat for any nodes that are exiting -- still update them, even though they're on their way out
      scope._nodes
        .exit()
          .attr
            cx: (d) ->
              d.x
            cy: (d) ->
              d.y  
  
    scope._clickNodeHandler = ->
      console.log "Clicked!", arguments[0].author, arguments

    scope._setSelectionRadius = (selection) ->
      #self = this
      selection.attr "r", (d) ->
        return scope.options.radiusMeasure or 7
        #return 7  unless scope.options.radiusMeasure
        #scope.options.measures[scope.options.radiusMeasure].radiusScale scope.options.measures[scope.options.radiusMeasure].accessor(d)

    scope._colorNode = (d) ->
      if d.isDemo then "#82b446" else "steelblue"
      
    scope.visSvg = d3.select(element[0])
      .append("svg")
      .attr
        width: scope.options.w
        height: scope.options.h
        
    scope.visSvg
      .append("clipPath")
        .attr("id", "clip")
        .append("circle")
          .attr
            cx: 0 
            cy: 0 
            r: 15    
        
    scope.force = d3
      .layout.force()
      .size([ scope.options.w, scope.options.h ])
      .linkDistance(100)
      .on 'tick', scope._tick
 
    scope.force.charge scope.options.force.charge  if scope.options.force and scope.options.force.charge

    window.onresize = ->
      scope.$apply()
    
    scope.$watch (->
      angular.element(window)[0].innerWidth
    ), ->
      scope.render scope.data if scope.data
      
    scope.$watch "data", (newVals, oldVals) ->
      scope.render newVals if scope.data
      #console.log 'Directive $watch data', scope.data 

    scope.render = ( nodesAndLinks ) ->
      
      if scope.options.sliderReset
        scope.visSvg
          .selectAll('*')
          #.remove()
        scope.options.sliderReset = false
      
      if !nodesAndLinks
        console.log "No data present." 
        return
      
      #console.log 'ng nodesAndLinks in render', nodesAndLinks 
      nodes = nodesAndLinks.nodes
      links = nodesAndLinks.links
      #scope = this
      fvID = scope.id

      # -------------------
      # Update the nodes...
      #scope._nodes = scope.visSvg.selectAll("image.node")
      scope._nodes = scope.visSvg
        #.selectAll("circle.node")
        .selectAll("image.node")
        .data( nodes, DATA_JOIN_ON_ID )
        .style
          fill: @_colorNode
        .attr "transform", (d) ->
          "translate(" + d.x + "," + d.y + ")"  

      # If we're animating things out, they could be in the middle of their outbound animations.  Animate them back in.
      if scope.options.animateExit
        scope._nodes.each (d) ->
          delete d[fvID].isExitting
        .interrupt()
        .transition()
        .duration( scope.options.animateExit.msToFade / 2 )
        .style ENTER_ANIMATE_STYLE
      
      # Some may have already exitted but now they're back in the game.  Adjust their states.
      enterNodes = scope._nodes
        .enter()
        #.append('g')
        .append('image')
        #.append('circle')
          .each (d) ->
            d[fvID] = {}  unless d[fvID]
            #console.log 'd', d 
            if scope.options.enterAtParent and d.parent
              d.x = d.px = d.parent.x
              d.y = d.py = d.parent.y
            else if scope.options.enterCenterJitter
              d.x = d.px = scope.options.w / 2 + 2 * scope.options.enterCenterJitter * Math.random() - scope.options.enterCenterJitter
              d.y = d.py = scope.options.h / 2 + 2 * scope.options.enterCenterJitter * Math.random() - scope.options.enterCenterJitter
            else
              d.x = d.px = scope.options.w / 2
              d.y = d.py = scope.options.h / 2
            delete d[fvID].isExitting
        .attr
          id: (d) ->
            d.id
          'xlink:href': 'http://graph.facebook.com/hannahymiller/picture?type=small'
          x: -20
          y: -20
          width: 40
          height: 40   
          class: 'node'
          #cx: (d) ->
            #d.x
          #cy: (d) ->
            #d.y
        .call(scope._setSelectionRadius)
        .call(scope.force.drag).filter (d) ->
          not d.isDemo
        .style
          'clip-path': 'url(#clip)' 
          #fill: scope._colorNode
        .on 
          click: (d) -> 
            scope._clickNodeHandler(d)
          mouseover: (d) ->
            scope.hovered args: d.author
      
      # -------------------
      # Update the links...
      scope._links = scope.visSvg
        .selectAll("line.link")
        .data(links, DATA_JOIN_ON_ID)
      
      # Enter any new links.
      enterLinks = scope._links.enter()
        .insert( "svg:line", ".node" )
        .attr
          class: 'link'
          x1: LINK_SOURCE_X
          y1: LINK_SOURCE_Y
          x2: LINK_TARGET_X
          y2: LINK_TARGET_Y
      
      AnimatingExperiments scope, enterNodes, scope._nodes, enterLinks, scope._links

      # ------------------
      # Trigger event with node and links selections (before we exit)
      #@trigger "updateNodesAndLinks", this, enterNodes, @_nodes, enterLinks, @_links, nodesAndLinks
      #@trigger "updateNodesAndLinks", this, enterNodes, @_nodes, enterLinks, @_links, nodesAndLinks
      
      # ------------------
      # Exits
      
      # Exit any old nodes.
      unless scope.options.animateExit
        scope._nodes.exit().remove()
      else
        
        # Some exit nodes may have already started the exit animation.  Let them be, they'll be removed.
        
        # They're in the exit selection because they weren't in the list of nodes.
        # However, we still want them as part of the force view until they leave for sure.
      scope._nodes.exit()
        .filter (d) -> # remove the els when transition is done
          not d[fvID].isExitting
        .each (d) ->
          d[fvID].isExitting = true
          nodes.push d
        .interrupt()
        .transition()
        .duration(scope.options.animateExit.msToFade)
        .style(EXIT_ANIMATE_STYLE)
        .each 'end', (d) ->
          delete d[fvID].isExitting
        .remove()
      
      # Exit any old links.
      scope._links.exit().remove()
      
        
      # Restart the force layout.
      
      # .linkDistance(!this.options.distanceMeasure ?
      # undefined :
      # this.options.measures[this.options.distanceMeasure].distanceScale)
      scope.force.nodes(nodes).links(links).start()
      

App.Directives.directive 'forceForm', forceForm
App.Directives.directive 'forceChart', forceChart
require [ "fireflies/sketchbook_config.js" ], -> # load master configuration
  require [ "jquery", "lodash", "d3", "promiseCommentTree", "preparseTree", "treeToAuthorNodes", "model/AuthorNodeEmitter", "view/ForceView", "view/SliderView" ], ($, _, d3, promiseCommentTree, preparseTree, treeToAuthorNodes, AuthorNodeEmitter, ForceView, SliderView) ->
    
    promiseCommentTree.done((rootComment) ->
      restartDemo = ->
        $("span.ephemeral.restart").hide()
        $("span.ephemeral.start").show()
        d3.select("svg").selectAll("circle.node").data(authors, (d) ->
          d.id
        ).each((d) ->
          delete d.isDemo
        ).style fill: "steelblue"

        sliderView.off "newSliderValue", listenForDemoDone      # detach if not already detached

        window.ga "send", "event", "fireflies", "demo restarted", demoCount  if window.ga

      listenForDemoDone = (newSliderValue) ->
        if not newSliderValue or newSliderValue > 1394577395000
          sliderView.pause null, true
          $("span.ephemeral.restart").show()
          d3.select("svg").selectAll("circle.node").data(authors, (d) ->
            d.id
          ).each((d) ->
            delete d.isDemo
          ).transition().duration(2000).style fill: "steelblue"

          sliderView.off "newSliderValue", listenForDemoDone      # detach myself

      window.rootComment = rootComment
      #console.log "rootComment:", rootComment
      preparseTree rootComment
      #console.log "rootComment after parse:", rootComment
      window.authorNodesEtc = treeToAuthorNodes(rootComment)
      #console.log "authorNodesEtc:", authorNodesEtc
      
      # demo cludge: luckysunbunny's comment was created well after all the others.  To avoid unbalanced timeline,
      # lets just filter out that outlier
      authorNodesEtc.allComments = authorNodesEtc.allComments.filter((d) ->
        d.author isnt "luckysunbunny"
      )
      delete authorNodesEtc.authorDataByAuthor.luckysunbunny

      authorNodesEtc.authorNodes = authorNodesEtc.authorNodes.filter((d) ->
        d.author isnt "luckysunbunny"
      )
      authorNodesEtc.links = authorNodesEtc.links.filter((d) ->
        d.sourceAuthor isnt "luckysunbunny"
      )
      
      window.authorNodeEmitter = new AuthorNodeEmitter(_.merge(
        linkWindowPercentage: 0.05
      , authorNodesEtc))
      
      window.forceView = new ForceView(
        el: "#force_view"
        model: authorNodeEmitter
        force:
          charge: (d) ->
            d.authorForceViewCharge or -200
      )
      
      window.sliderView = new SliderView(
        max: authorNodeEmitter.getMaxAuthorTs()
        min: authorNodeEmitter.getMinAuthorTs()
      )
      currentTs = undefined
      sliderView.on "newSliderValue", (value) ->
        currentTs = value

      # wire up the slider to the emitter
      authorNodeEmitter.listenTo sliderView, "newSliderValue", authorNodeEmitter.emitAuthorsUpToTs
      console.log "Ready to go.  Execute: try{ forceView.update() } catch(e) {console.log(e.stack); }"

      # experiments in animating
      forceView.on "updateNodesAndLinks", (fv, enterNodes, nodes, enterLinks, links) ->
        authorsWhoMadeComments = {}
        authorsInPlay = {}
        enterLinks.each (d) ->
          authorsWhoMadeComments[d.sourceAuthor] = d  if d

        links.each (d) ->
          authorsInPlay[d.sourceAuthor] = d  if d

        nodes.each (d) ->
          if authorsWhoMadeComments[d.author]
            d.authorForceViewCharge = 1      # light attractor -- fly towards its parent!
          # Do nothing... when the link transition below finishes, it will put this guy to -30 / light-repulsor
          else d.authorForceViewCharge = -200  unless authorsInPlay[d.author]      # heavy repulsor
        #console.log 'Dan\'s fv.id', fv.id 
        # ANIMATE NEW LINKS:
        # All new links: three step animation
        # 1) Initialize new links to red/transparent
        # 2) Transition, each with its staggered delay (but 0 transition length... just want the delay)
        # 3) When these end, suddenly make transparent, then create a new transition that fades in
        # (Note that transition.transition() doesn't work when the first transition is delayed... overrides it)
        i = 0
        enterLinks.style(
          stroke: "red"
          opacity: 0
        ).transition().delay((d) ->
          # In the enter selection, some elements are undefined.  Don't want to use argument[1] as i b/c it still
          # counts the undefineds.  Make our own i counter to get accurate "this is the i-th entering item" counts
          (i++) * 50  if d
        ).duration(0).each "end", (d) ->
          d3.select("svg").selectAll("circle.node").data([ d.source ], (d) ->
            d.id
          ).filter((d) ->
            # REALLY SUBTLE BEHAVIOR:
            # This animation is delayed (based on the link's stagger).  If the user makes a lot of nodes enter,
            # they're going to be staggered.  If the user then quickly slides back to make this node exit BEFORE
            # the stagger delay, this transition will cancel the exit animation and the node will remain perpetually
            # on the screen.  To avoid that, we ignore flashing any nodes currently exiting
            not d[fv.id].isExitting and not d.isDemo
          ).style(fill: "red").transition().duration(500).style fill: "steelblue"
          d3.select(this).style(opacity: 1).transition(
          ).style(
            stroke: "#ddd"
            opacity: 1
          ).transition().each (d) ->
            d.source.authorForceViewCharge = -30
            fv.force.start()   # restart force view to make attractor change stick

      # ------------------------------------
      # Script a demo an interesting example
      
      # Select the interesting authors
      authors = [ authorNodesEtc.authorNodesByAuthor.InFearn0, authorNodesEtc.authorNodesByAuthor.Mampfificationful, authorNodesEtc.authorNodesByAuthor.skydog22 ]
      demoCount = 0
      $("span.ephemeral.start").on "click", ->
        $("span.ephemeral.start").hide()
        $("span.ephemeral.drag").show()
        if window.ga
          window.ga "send", "event", "fireflies", "start demo", ++demoCount
          startTs = Date.now()
       
        # Set the timer to a magic time that makes specific interesting nodes appear
        sliderView.pause null, true
        $("#timeline_slider").slider "value", 1394574755000
       
        setTimeout (->
          # Highlight those interesting nodes, and listen for the start condition.
          d3.select("svg").selectAll("circle.node").data(authors, (d) ->
            d.id
          ).style(fill: "#82b446").each((d) ->
            d.isDemo = true       # stops animations
          ).on "mouseup", (e) ->
            window.ga "send", "event", "fireflies", "demo timeline started", Date.now() - startTs  if window.ga
            setTimeout (->
              $("span.ephemeral.drag").hide()
              sliderView.play null, true
            ), 500

        ), 200
        
        # Listen for the next stage of the demo
        sliderView.on "newSliderValue", listenForDemoDone

      $("span.ephemeral.restart a").on "click", restartDemo
    ).fail ->
      console.log "ERROR loading comment trees", arguments
define [ "jquery", "lodash" ], ($, _) ->
  deferred = $.Deferred()
  
  # TODO: Shim to load data from pre-built JSON.  Later use the RedditParser to get dynamic comment trees.
  #       This JSON file is the transformed output from RedditParser, except for the .parent circular reference.
  #$.getJSON('/comment_tree_parsers/example_data/dataisbeautiful_1ty2i3.json')
  
  # Crawl through the tree and set the 'parent' links.  Normally RedditParser does this, but we dumped the data to
  # JSON and JSON can't store circular references
  $.getJSON("fireflies/comment_tree_parsers/example_data/science_2058f5.json").done((rootNode) ->
    rootNode.parent = null
    toVisit = [ rootNode ]
    while toVisit.length
      node = toVisit.pop()
      node.children.forEach (child) ->
        child.parent = node
        toVisit.push child

    deferred.resolve rootNode
  ).fail (err) ->
    deferred.reject err

  deferred.promise()
define [ "lodash", "d3" ], (_, d3) ->
  
  ###
  This logic will apply misc. preparsing measures onto the comment node, useful for the visualizations
  ###
  (rootNode) ->
    toVisit = [ rootNode ]
    leafsLastInStack = [ rootNode ]
    while toVisit.length
      node = toVisit.pop()
      node.children.forEach (child) ->
        toVisit.push child
        leafsLastInStack.push child

    
    # Now pop out each node again (leafs come out first), setting the depth and last timestamp
    while leafsLastInStack.length
      node = leafsLastInStack.pop()
      unless node.children.length
        node.last_branch_ts = node.created_utc
        node.max_distance_from_leaf = 0
      else
        node.last_branch_ts = d3.max(node.children, (d) ->
          d.last_branch_ts
        )
        node.max_distance_from_leaf = d3.max(node.children, (d) ->
          d.max_distance_from_leaf + 1
        )
###
Parses a comment tree to make a list of AuthorNodes
###
define [ "lodash", "model/AuthorNode" ], (_, AuthorNode) ->
  (rootNode) ->
    authorDataByAuthor = {}
    allLinks = []
    toVisit = [ rootNode ]
    allComments = []
    while toVisit.length
      comment = toVisit.pop()
      allComments.push comment
      comment.children.forEach (c) ->
        toVisit.push c

      unless authorDataByAuthor[comment.author]
        authorDataByAuthor[comment.author] =
          author: comment.author
          
          ###
          List of all comment nodes the author has made
          ###
          commentNodes: []
          
          ###
          List of source/target link objects to other AuthorNodes, one linke for every comment made
          ###
          links: []
      authorDataByAuthor[comment.author].commentNodes.push comment
      
      # Create links between authors, where every link is a reply to someone ('target' is parent author)
      if comment.parent
        link =
          id: comment.author + "__" + comment.parent.author + "__" + comment.created_utc
          source: `undefined` # the AuthorNode who made the comment (filled in below, after AuthorNodes are made)
          target: `undefined` # the AuthorNode who this comment was a reply to
          sourceAuthor: comment.author
          targetAuthor: comment.parent.author
          comment: comment
          replyToComment: comment.parent
          timestamp: comment.created_utc

        comment.link = link
        authorDataByAuthor[comment.author].links.push link
        allLinks.push link
    
    # Now create the AuthorNodes
    authorNodes = []
    authorNodesByAuthor = {}
    for a of authorDataByAuthor
      authorNode = new AuthorNode(authorDataByAuthor[a])
      authorNodes.push authorNode
      authorNodesByAuthor[a] = authorNode
    authorNodes = _.sortBy(authorNodes, "firstCommentTs")
    
    # Fill in the links' .source and .target with the appropriate AuthorNodes
    allLinks.forEach (link) ->
      link.source = authorNodesByAuthor[link.sourceAuthor]
      link.target = authorNodesByAuthor[link.targetAuthor]

    allLinks = _.sortBy(allLinks, "timestamp")
    allComments = _.sortBy(allComments, "created_utc")
    authorNodes: authorNodes
    links: allLinks
    authorDataByAuthor: authorDataByAuthor
    authorNodesByAuthor: authorNodesByAuthor
    allComments: allComments
###
@module {fireflies/model/AuthorNodeEmitter}
@author Dan Lopuch <dlopuch@alum.mit.edu>

A {ForceLayoutNodeEmitter} for {AuthorNode}'s

Options passed to constructor:
authorNodes: {Array(AuthorNode)} All author nodes, sorted by firstCommentTs
links: {Array(Object)} List of links (comments) between AuthorNodes (.source and .target), sorted by timestamp
allComments: {Array(Object)} List of comments, sorted by timestamp (creation date)
[linkWindowPercentage]: {number} Value between 0 and 1.  Let t be the time between the first and last comment.
Links will be emitted if the last comment in their branch was created within
t*window ms of the updated time.  Recommend 0.01-0.05 for dense conversations.
[linkWindowValue]: {number} Links will be emitted if the last comment in their branch was created within
linkWindowValue ms of the updated time.


Constructor:
attrs.authorNodes: {Array(AuthorNode)} List of AuthorNodes in the force view
attrs.links: {Array(Object)} list of all the links in the force view, where links are d3-force-view objects
###
define [ "jquery", "d3", "lodash", "./ForceLayoutNodeEmitter" ], ($, d3, _, ForceLayoutNodeEmitter) ->
  filterOutSelfLinks = (link) ->
    link.source isnt link.target
  
  ###
  @class AuthorNodeEmitter
  ###
  ForceLayoutNodeEmitter.extend
    initialize: (attrs) ->
      throw new Error("authorNodes required!")  if not attrs.authorNodes or not Array.isArray(attrs.authorNodes)
      @allAuthorNodes = attrs.authorNodes
      
      # links are comments: a link is made with a comment from source:creating author to target:parent comment's author
      # We assume links is sorted by .timestamp ascending (ie oldest first)
      throw new Error("links required!")  if not attrs.links or not Array.isArray(attrs.links)
      @allLinks = attrs.links
      throw new Error("allComments required!")  if not attrs.allComments or not Array.isArray(attrs.allComments)
      @allComments = attrs.allComments
      if attrs.linkWindowPercentage
        @linkWindow = (attrs.allComments[attrs.allComments.length - 1].created_utc - attrs.allComments[0].created_utc) * attrs.linkWindowPercentage
      else @linkWindow = attrs.linkWindowValue  if attrs.linkWindowValue
      l = 0

      while l < attrs.links.length
        throw new Error("Invalid link!")  if not attrs.links[l].source or not attrs.links[l].target
        unless attrs.links[l].id
          
          # You should make sure your links have unique IDs for the force view's joins.  If you don't have ID's, we're
          # going to try to make some based off of the source and target IDs.
          # Doesn't REALLY guarentee uniqueness, though... you should guarentee uniqueness yourself.
          attrs.links[l].id = attrs.links[l].source.id + "__" + attrs.links[l].target.id + "__" + Math.random()
          console.warn "Link missing id! Making random id: " + attrs.links[l].id
        l++
      @_lastActiveAuthorI = 0

    setLinkWindowPercentage: (linkWindowPercentage) ->
      @linkWindow = null  unless linkWindowPercentage
      @linkWindow = (@allComments[@allComments.length - 1].created_utc - @allComments[0].created_utc) * linkWindowPercentage
      @emitAuthorsUpToTs @_lastUpdatedTs

    setLinkWindowValue: (linkWindowValue) ->
      @linkWindow = linkWindowValue or null
      @emitAuthorsUpToTs @_lastUpdatedTs

    getActiveNodesAndLinks: ->
      nodes: [] #_.clone(this.allAuthorNodes),
      links: []

    emitAuthorsUpToTs: (ts) ->
      ts = 0  unless ts
      authors = {} # emit only the authors who have participated so far
      i = 0

      while i < @allLinks.length
        
        # links will be the slice of links created before the timestamp.  Break once we pass the timestamp
        break  if @allLinks[i].timestamp > ts
        #console.log 'authors', authors  
        # otherwise, index the authors
        authors[@allLinks[i].comment.author] = @attrs.authorNodesByAuthor[@allLinks[i].comment.author]
        i++
      @_lastUpdatedTs = ts
      self = this
      links = @allLinks.slice(0, i).filter(filterOutSelfLinks) # Self links wreak havoc on the force view... get rid of them.
      if @linkWindow
        links = links.filter((link) ->
          
          # Include only links done in the last 5 minutes
          link.comment.last_branch_ts + self.linkWindow > ts
        )
      @trigger "newActiveNodesAndLinks", this,
        
        #nodes: _.clone(this.allAuthorNodes),
        nodes: _.values(authors)
        links: links

      #console.log 'authors', authors 
      #console.log '_.values(authors)', _.values(authors) 
      #console.log 'links', links 
      
      
    
    ###
    Returns the timestamp of the earliest comment made by any author
    ###
    getMinAuthorTs: ->
      @allAuthorNodes[0].firstCommentTs

    
    ###
    Returns the timestamp of the last comment made by any author
    ###
    getMaxAuthorTs: ->
      d3.max @allAuthorNodes, (an) ->
        an.lastCommentTs


###
@module {fireflies/views/ForceView}
@author Dan Lopuch <dlopuch@alum.mit.edu>

Backbone View that draws a froce-based layout of nodes.

Roughly based off of "Collapsable Force Layout" demo: http://bl.ocks.org/mbostock/1062288

Constructor:
el: {string | domEl} Element or element selector to render into
model: {model.ForceLayoutNodeEmitter} A ForceLayoutNodeEmitter model.
[options.w]: {number} Width of SVG that view draws.  Defaults to element width or 600.
[options.h]: {number} Height of SVG that view draws.  Defaults to element width of 500.
[options.enterAtParent]: {boolean=true} If nodes have a .parent, new ones will enter at the parent's x,y.
Otherwise, nodes enter in the center of the forceview.
[options.enterCenterJitter]: {number} If nodes enter in the center of the forceview, their exact enter x,y will
be +/- random number between 0 and enterCenterJitter.  Defaults 10.
[options.animateExit]: {Object} Include to animation exitting nodes (falsey to make exitting nodes just disapear)
[options.animateExit.msToFade]: {number} How many ms to wait before node exits
[options.force.charge]: {number | function} pass-through to D3 force layout .charge()

Attributes:
this.visSvg: {d3.selection} the SVG element drawing the force view
this.force: {d3.layout.force} the d3 Force layout instance driving the svg
###
define [ "jquery", "d3", "lodash", "backbone" ], ($, d3, _, Backbone) ->
  DEFAULT_W = 600
  DEFAULT_H = 350
  FORCE_VIEW_I = 0
  
  ###
  Data join for nodes and links.  Always use the 'id' property.
  ###
  DATA_JOIN_ON_ID = (d) ->
    d.id

  
  # Link accessor functions.  Static functions, so we're not redefining them every update.
  LINK_SOURCE_X = (d) ->
    d.source.x

  LINK_SOURCE_Y = (d) ->
    d.source.y

  LINK_TARGET_X = (d) ->
    d.source.x

  LINK_TARGET_Y = (d) ->
    d.source.x

  
  ###
  When nodes animate out of the force view, we animate them to these css params
  ###
  EXIT_ANIMATE_STYLE = opacity: 0
  
  ###
  Opposite state of the EXIT_ANIMATE_STYLE
  ###
  ENTER_ANIMATE_STYLE = opacity: 1

  Backbone.View.extend
    initialize: (opts) ->
      throw new Error("ForceLayoutNodeEmitter required!")  unless @model
      @listenTo @model, "newActiveNodesAndLinks", @onNewActiveNodesAndLinks
      
      # Every force view gets its own ID.  This is used to scope ForceView instance-specific state onto the node Objects
      @id = "_fv" + FORCE_VIEW_I++
      
      # Set default options
      opts = @options = _.merge(
        w: @$el.width() or DEFAULT_W
        h: @$el.height() or DEFAULT_H
        enterAtParent: true
        enterCenterJitter: 10
        animateExit:
          msToFade: 1000
      , opts)
      @visSvg = d3.select(@el).append("svg:svg").attr("width", opts.w).attr("height", opts.h)
      @force = d3.layout.force().on("tick", @_tick.bind(this)).size([ opts.w, opts.h ]).linkDistance(50)
      @force.charge opts.force.charge  if opts.force and opts.force.charge
      
      # ------ Instance-bound D3 callback functions -----
      # D3 and Backbone don't really get along -- D3 has its own execution scope rules for its callback functions that
      # doesn't mesh well with Backbone's object-based scoping.  We get around this impedance mismatch by assuming
      # "this" on the callbacks will reference this Backbone View (and its relevant state properties), so to force this,
      # we need to bind each callback to the Backbone instance.
      @_tick = @_tick.bind(this)
      @_colorNode = @_colorNode.bind(this)
      @_setSelectionRadius = @_setSelectionRadius.bind(this)
      @_clickNodeHandler = @_clickNodeHandler.bind(this)
      console.log 'Dan\'s ForeceView', @ 
      @render()

    render: ->
      @update()
      this

    onNewActiveNodesAndLinks: (emitter, nodesAndLinks) ->
      @update nodesAndLinks

    
    ###
    Restarts the ForceView with a new set of nodes and links
    @param {Object} [nodesAndLinks] Optional.  New set of nodes and links.  If omitted, will request from the model.
    nodes: {Array(Object)} List of nodes to update with
    links: {Array(Object)} List of links to update with
    ###
    update: (nodesAndLinks) ->
      nodesAndLinks = nodesAndLinks or @model.getActiveNodesAndLinks()
      nodes = nodesAndLinks.nodes
      links = nodesAndLinks.links
      self = this
      fvID = @id
      opts = @options
            
      #console.log "Dan\'s nodesAndLinks", nodesAndLinks
      
      # -------------------
      # Update the nodes...
      @_nodes = @visSvg.selectAll("circle.node").data(nodes, DATA_JOIN_ON_ID).style("fill", @_colorNode)
      
      # If we're animating things out, they could be in the middle of their outbound animations.  Animate them back in.
      if opts.animateExit
        @_nodes.each((d) ->
          delete d[fvID].isExitting
        ).interrupt().transition().duration(opts.animateExit.msToFade / 2).style ENTER_ANIMATE_STYLE
      
      # Enter any new nodes.
      
      # Reserve a namespace on the nodes specific to this forceview
      
      # Init each new node to the location of it's parent so nodes swing out from the parent position
      
      # Some may have already exitted but now they're back in the game.  Adjust their states.
      enterNodes = @_nodes.enter().append("svg:circle").each((d) ->
        d[fvID] = {}  unless d[fvID]
        if opts.enterAtParent and d.parent
          d.x = d.px = d.parent.x
          d.y = d.py = d.parent.y
        else if opts.enterCenterJitter
          d.x = d.px = (self.options.w) / 2 + 2 * opts.enterCenterJitter * Math.random() - opts.enterCenterJitter
          d.y = d.py = (self.options.h) / 2 + 2 * opts.enterCenterJitter * Math.random() - opts.enterCenterJitter
        else
          d.x = d.px = (self.options.w) / 2
          d.y = d.py = (self.options.h) / 2
        delete d[fvID].isExitting
      ).attr("class", "node").attr("cx", (d) ->
        d.x
      ).attr("cy", (d) ->
        d.y
      ).call(@_setSelectionRadius).on("click", @_clickNodeHandler).call(@force.drag).filter((d) ->
        not d.isDemo
      ).style("fill", @_colorNode)
      
      # -------------------
      # Update the links...
      @_links = @visSvg.selectAll("line.link").data(links, DATA_JOIN_ON_ID)
      
      # Enter any new links.
      enterLinks = @_links.enter().insert("svg:line", ".node").attr("class", "link").attr("x1", LINK_SOURCE_X).attr("y1", LINK_SOURCE_Y).attr("x2", LINK_TARGET_X).attr("y2", LINK_TARGET_Y)
      
      # ------------------
      # Trigger event with node and links selections (before we exit)
      @trigger "updateNodesAndLinks", this, enterNodes, @_nodes, enterLinks, @_links, nodesAndLinks
      
      # ------------------
      # Exits
      
      # Exit any old nodes.
      unless opts.animateExit
        @_nodes.exit().remove()
      else
        
        # Some exit nodes may have already started the exit animation.  Let them be, they'll be removed.
        
        # They're in the exit selection because they weren't in the list of nodes.
        # However, we still want them as part of the force view until they leave for sure.
        @_nodes.exit().filter((d) -> # remove the els when transition is done
          not d[fvID].isExitting
        ).each((d) ->
          d[fvID].isExitting = true
          nodes.push d
        ).interrupt().transition().duration(opts.animateExit.msToFade).style(EXIT_ANIMATE_STYLE).each("end", (d) ->
          delete d[fvID].isExitting
        ).remove()
      
      # Exit any old links.
      @_links.exit().remove()
      
      # Restart the force layout.
      
      # .linkDistance(!this.options.distanceMeasure ?
      # undefined :
      # this.options.measures[this.options.distanceMeasure].distanceScale)
      @force.nodes(nodes).links(links).start()

    
    # Force view tick: update positions of all the DOM elements per layout's calculations
    _tick: ->
      @_links.attr("x1", (d) ->
        d.source.x
      ).attr("y1", (d) ->
        d.source.y
      ).attr("x2", (d) ->
        d.target.x
      ).attr "y2", (d) ->
        d.target.y

      @_nodes.attr("cx", (d) ->
        d.x
      ).attr "cy", (d) ->
        d.y

      # Repeat for any nodes that are exiting -- still update them, even though they're on their way out
      @_nodes.exit().attr("cx", (d) ->
        d.x
      ).attr "cy", (d) ->
        d.y


    _clickNodeHandler: ->
      console.log "Clicked!", arguments[0][@id], arguments

    _setSelectionRadius: (selection) ->
      self = this
      selection.attr "r", (d) ->
        return 7  unless self.options.radiusMeasure
        self.options.measures[self.options.radiusMeasure].radiusScale self.options.measures[self.options.radiusMeasure].accessor(d)


    _colorNode: (d) ->
      (if d.isDemo then "#82b446" else "steelblue")

###
@module {fireflies/views/SliderView}
@author Dan Lopuch <dlopuch@alum.mit.edu>

Backbone View to control the timeline slider.  As you move the slider up and down, more or fewer AuthorNodes are
emitted.

Constructor:

Events:
"newSliderValue" ({number} value) Emitted when there's a new value from the slider
###
define [ "jquery", "d3", "lodash", "backbone", "jquery-slider" ], ($, d3, _, Backbone) ->
  DEFAULT_W = 600
  DEFAULT_H = 500
  FORCE_VIEW_I = 0
  playCount = 0
  pauseCount = 0
  scrubCount = 0
  Backbone.View.extend
    el: "#timeline"
    events:
      "click .play": "play"
      "click .pause": "pause"

    initialize: (opts) ->
      @max = opts.max
      @min = opts.min
      @render()
      onNewSliderValue = _.debounce(@onNewSliderValue.bind(this), 100)
      @$("#timeline_slider").on "slide", onNewSliderValue # mouse movements
      @$("#timeline_slider").on "slidechange", onNewSliderValue # mouseup, programatic value (ie play/pause)

    play: (e, forcePlay) ->
      return @pause(e)  if @timer and not forcePlay
      window.ga "send", "event", "fireflies", "play timeline", ++playCount  if window.ga and not forcePlay
      $("a.pause").show()
      $("a.play").hide()
      $sl = $("#timeline_slider")
      self = this
      curVal = undefined
      dir = 1
      @timer = setInterval(->
        curVal = $sl.slider("value")
        dir = -6  if curVal + 60000 > self.max
        dir = 1  if curVal - 60000 < self.min
        $sl.slider "value", curVal + dir * 60000
        #console.log 'Dan\'s currentTs', ~~((curVal + dir * 60000) / 60000)-23242540
      , 120) # must be larger than debounce!
      e and e.preventDefault()

    pause: (e, forcePause) ->
      return @play(e)  if not @timer and not forcePause
      window.ga "send", "event", "fireflies", "pause timeline", ++pauseCount  if window.ga and not forcePause
      $("a.play").show()
      $("a.pause").hide()
      clearInterval @timer
      delete @timer

      e and e.preventDefault()

    onNewSliderValue: (e, ui) ->
      #console.log "Dan\'s New slider value:", ui.value, new Date(ui.value)
      @trigger "newSliderValue", ui.value

    render: ->
      @$("#timeline_slider").slider
        animate: "fast"
        max: @max
        min: @min
        step: 2 * 60 * 1000

      @$("#timeline_slider").on "mousedown", ->
        window.ga "send", "event", "fireflies", "user scrubbed timeline", ++scrubCount  if window.ga

      this

define [ "jquery", "lodash" ], ($, _) ->
  
  ###
  @constructor {AuthorNode}
  
  AuthorNode: an author with all the comment nodes he's made
  
  @param {Object} attrs AuthorNode data.  Includes:
  author: {string} Unique author username
  commentNodes: {Array(CommentNode)} List of comments this author has made
  links: {Array(Object)} List of links this author made.  Each link should have a .source, .target, and .timestamp
  ###
  AuthorNode = (attrs) ->
    throw new Error("username required")  unless attrs.author
    throw new Error("Error creating AuthorNode: invalid comment nodes specified")  if not Array.isArray(attrs.commentNodes) or not attrs.commentNodes.length
    # note links CAN be length 0: author is root author and never replied to anyone
    throw new Error("Error creating AuthorNode: invalid links specified")  unless Array.isArray(attrs.links)
    @id = @author = attrs.author
    @links = attrs.links
    
    # Order all comments by time created
    @commentNodes = _.sortBy(attrs.commentNodes, "created_utc")
    @firstCommentTs = @commentNodes[0].created_utc
    @lastCommentTs = @commentNodes[@commentNodes.length - 1].created_utc
  AuthorNode
###
@module {fireflies/model/ForceLayoutNodeEmitter}
@author Dan Lopuch <dlopuch@alum.mit.edu>

Abstract event emitter class that emits nodes to be fed into the ForceView.

A ForceLayoutNodeEmitter has Backbone.Events functions mixed in -- listenTo, trigger, etc.

Define subclasses with the usual Backbone extend() pattern, ie:
var MyNodeEmitter = ForceLayoutNodeEmitter.extend({
initialize: function(attrs) { ... },
foo: function() {...},
...
})

Events Emitted:
"newActiveNodesAndLinks" (this, nodesAndLinks): Emitted when there is a new set of active nodes to be displayed.
nodesAndLinks is an {Object} with all .nodes and .links attrs, like getActiveNodesAndLinks().
###
define [ "jquery", "d3", "lodash", "backbone" ], ($, d3, _, Backbone) ->
  ForceLayoutNodeEmitter = (attrs) ->
    @attrs = attrs
    @initialize attrs
  ForceLayoutNodeEmitter.extend = Backbone.Model.extend
  _.extend ForceLayoutNodeEmitter::, Backbone.Events,
    initialize: (attrs) ->

    
    # nothing to do in abstract base class.
    
    ###
    @returns {Object} current nodes and links, however 'current' is defined.  Object is:
    nodes: {Array(Object)} List of nodes
    links: {Array(Object)} List of links, that is Objects with a .source and .target pointing to some node
    ###
    getActiveNodesAndLinks: ->
      throw new Error("Abstract ForceLayoutNodeEmitter: getActiveNodesAndLinks not implemented")

  ForceLayoutNodeEmitter
CommentTree = ($resource) ->
  $resource 'fireflies/comment_tree_parsers/example_data/science_2058f5.json'

CommentTreeLoader = (CommentTree, $q) ->
  ->
    delay = $q.defer()
    CommentTree.get {}
    , (rootNode) ->
      rootNode.parent = null
      toVisit = [ rootNode ]
      while toVisit.length
        node = toVisit.pop()
        node.children.forEach (child) ->
          child.parent = node
          toVisit.push child
      delay.resolve rootNode
    , ->
      delay.reject 'Unable to locate CommentTree '
    delay.promise
      
CommentTreeParse = ->
  (rootNode) ->
    toVisit = [ rootNode ]
    leafsLastInStack = [ rootNode ]
    while toVisit.length
      node = toVisit.pop()
      node.children.forEach (child) ->
        toVisit.push child
        leafsLastInStack.push child
  
    # Now pop out each node again (leafs come out first), setting the depth and last timestamp
    while leafsLastInStack.length
      node = leafsLastInStack.pop()
      unless node.children.length
        node.last_branch_ts = node.created_utc
        node.max_distance_from_leaf = 0
      else
        node.last_branch_ts = d3.max(node.children, (d) ->
          d.last_branch_ts
        )
        node.max_distance_from_leaf = d3.max(node.children, (d) ->
          d.max_distance_from_leaf + 1
        )

TreeToAuthorNodes = (AuthorNode) ->
  (rootNode) ->
    authorDataByAuthor = {}
    allLinks = []
    toVisit = [ rootNode ]
    allComments = []
    while toVisit.length
      comment = toVisit.pop()
      allComments.push comment
      comment.children.forEach (c) ->
        toVisit.push c

      unless authorDataByAuthor[comment.author]
        authorDataByAuthor[comment.author] =
          author: comment.author
          
          ###
          List of all comment nodes the author has made
          ###
          commentNodes: []
          
          ###
          List of source/target link objects to other AuthorNodes, one linke for every comment made
          ###
          links: []
      authorDataByAuthor[comment.author].commentNodes.push comment
      
      # Create links between authors, where every link is a reply to someone ('target' is parent author)
      if comment.parent
        link =
          id: comment.author + "__" + comment.parent.author + "__" + comment.created_utc
          source: `undefined` # the AuthorNode who made the comment (filled in below, after AuthorNodes are made)
          target: `undefined` # the AuthorNode who this comment was a reply to
          sourceAuthor: comment.author
          targetAuthor: comment.parent.author
          comment: comment
          replyToComment: comment.parent
          timestamp: comment.created_utc

        comment.link = link
        authorDataByAuthor[comment.author].links.push link
        allLinks.push link
    
    # Now create the AuthorNodes
    authorNodes = []
    authorNodesByAuthor = {}
    for a of authorDataByAuthor
      authorNode = new AuthorNode(authorDataByAuthor[a])
      #console.log 'authorNode', authorNode
      authorNodes.push authorNode
      authorNodesByAuthor[a] = authorNode
    authorNodes = _.sortBy(authorNodes, "firstCommentTs")
    
    # Fill in the links' .source and .target with the appropriate AuthorNodes
    allLinks.forEach (link) ->
      link.source = authorNodesByAuthor[link.sourceAuthor]
      link.target = authorNodesByAuthor[link.targetAuthor]

    allLinks = _.sortBy(allLinks, "timestamp")
    allComments = _.sortBy(allComments, "created_utc")
    authorNodes: authorNodes
    links: allLinks
    authorDataByAuthor: authorDataByAuthor
    authorNodesByAuthor: authorNodesByAuthor
    allComments: allComments

AuthorNode = ->
  AuthorNode = (attrs) ->
    throw new Error("username required")  unless attrs.author
    throw new Error("Error creating AuthorNode: invalid comment nodes specified")  if not Array.isArray(attrs.commentNodes) or not attrs.commentNodes.length
    # note links CAN be length 0: author is root author and never replied to anyone
    throw new Error("Error creating AuthorNode: invalid links specified")  unless Array.isArray(attrs.links)
    @id = @author = attrs.author
    @links = attrs.links
    
    # Order all comments by time created
    @commentNodes = _.sortBy(attrs.commentNodes, "created_utc")
    @firstCommentTs = @commentNodes[0].created_utc
    @lastCommentTs = @commentNodes[@commentNodes.length - 1].created_utc
  AuthorNode 
  
ForceLayoutNodeEmitter = ->
  flna = (attrs) ->
    #angular.extend this, attrs_arg
    @attrs = attrs
    @initialize attrs
  flna

  
AuthorNodeEmitter = () ->
  (attrs) ->
    #console.log "AuthorNodeEmitter attrs", attrs
    #initialize attrs
  
  filterOutSelfLinks = (link) ->
    link.source isnt link.target
  
  ###
  @class AuthorNodeEmitter
  ###
  #ForceLayoutNodeEmitter.extend
  initialize: (attrs) ->
    #console.log "ng AuthorNodeEmitter.initialize attrs", attrs

    throw new Error("authorNodes required!")  if not attrs.authorNodes or not Array.isArray(attrs.authorNodes)
    @allAuthorNodes = attrs.authorNodes
    @attrs = attrs
    
    # links are comments: a link is made with a comment from source:creating author to target:parent comment's author
    # We assume links is sorted by .timestamp ascending (ie oldest first)
    throw new Error("links required!")  if not attrs.links or not Array.isArray(attrs.links)
    @allLinks = attrs.links
    throw new Error("allComments required!")  if not attrs.allComments or not Array.isArray(attrs.allComments)
    @allComments = attrs.allComments
    if attrs.linkWindowPercentage
      @linkWindow = (attrs.allComments[attrs.allComments.length - 1].created_utc - attrs.allComments[0].created_utc) * attrs.linkWindowPercentage
    else @linkWindow = attrs.linkWindowValue  if attrs.linkWindowValue
    l = 0

    while l < attrs.links.length
      throw new Error("Invalid link!")  if not attrs.links[l].source or not attrs.links[l].target
      unless attrs.links[l].id
        
        # You should make sure your links have unique IDs for the force view's joins.  If you don't have ID's, we're
        # going to try to make some based off of the source and target IDs.
        # Doesn't REALLY guarentee uniqueness, though... you should guarentee uniqueness yourself.
        attrs.links[l].id = attrs.links[l].source.id + "__" + attrs.links[l].target.id + "__" + Math.random()
        console.warn "Link missing id! Making random id: " + attrs.links[l].id
      l++
    @_lastActiveAuthorI = 0

  setLinkWindowPercentage: (linkWindowPercentage) ->
    @linkWindow = null  unless linkWindowPercentage
    @linkWindow = (@allComments[@allComments.length - 1]
      .created_utc - @allComments[0]
      .created_utc) * linkWindowPercentage
    @emitAuthorsUpToTs @_lastUpdatedTs

  setLinkWindowValue: (linkWindowValue) ->
    @linkWindow = linkWindowValue or null
    @emitAuthorsUpToTs @_lastUpdatedTs

  getActiveNodesAndLinks: ->
    nodes: [] #_.clone(this.allAuthorNodes),
    links: []

  emitAuthorsUpToTs: (ts) ->
    ts = 0  unless ts
    authors = {} # emit only the authors who have participated so far
    i = 0
    
    while i < @allLinks.length
      
      # links will be the slice of links created before the timestamp.  Break once we pass the timestamp
      break  if @allLinks[i].timestamp > ts
      
      # otherwise, index the authors
      authors[@allLinks[i].comment.author] = @attrs.authorNodesByAuthor[@allLinks[i].comment.author]
      i++
    @_lastUpdatedTs = ts
    self = this
    links = @allLinks.slice(0, i).filter(filterOutSelfLinks) # Self links wreak havoc on the force view... get rid of them.
    if @linkWindow
      links = links.filter((link) ->
        
        # Include only links done in the last 5 minutes
        link.comment.last_branch_ts + self.linkWindow > ts
      )
    #@trigger "newActiveNodesAndLinks", this,
      #nodes: _.clone(this.allAuthorNodes),
      #nodes: _.values(authors)
      #links: links

    nodesAndLinks =
      nodes: _.values(authors)
      links: links      

  ###
  Returns the timestamp of the earliest comment made by any author
  ###
  getMinAuthorTs: ->
    #console.log "@allAuthorNodes[0].firstCommentTs", @allAuthorNodes[0].firstCommentTs
    @allAuthorNodes[0].firstCommentTs
  
  ###
  Returns the timestamp of the last comment made by any author
  ###
  getMaxAuthorTs: ->
    d3.max @allAuthorNodes, (an) ->
      an.lastCommentTs


# experiments in animating
AnimatingExperiments = ->
  (fv, enterNodes, nodes, enterLinks, links) ->
    authorsWhoMadeComments = {}
    authorsInPlay = {}
    enterLinks.each (d) ->
      authorsWhoMadeComments[d.sourceAuthor] = d  if d
  
    links.each (d) ->
      authorsInPlay[d.sourceAuthor] = d  if d
  
    nodes.each (d) ->
      if authorsWhoMadeComments[d.author]
        d.authorForceViewCharge = 1      # light attractor -- fly towards its parent!
      # Do nothing... when the link transition below finishes, it will put this guy to -30 / light-repulsor
      else d.authorForceViewCharge = -200  unless authorsInPlay[d.author]      # heavy repulsor
    #console.log 'My fv.id', fv.id 
    # ANIMATE NEW LINKS:
    # All new links: three step animation
    # 1) Initialize new links to red/transparent
    # 2) Transition, each with its staggered delay (but 0 transition length... just want the delay)
    # 3) When these end, suddenly make transparent, then create a new transition that fades in
    # (Note that transition.transition() doesn't work when the first transition is delayed... overrides it)
    i = 0
    enterLinks.style
      stroke: "red"
      opacity: 0
    .transition().delay (d) ->
      # In the enter selection, some elements are undefined.  Don't want to use argument[1] as i b/c it still
      # counts the undefineds.  Make our own i counter to get accurate "this is the i-th entering item" counts
      (i++) * 50  if d
    .duration( 0 ).each "end", (d) ->
      d3.select( "svg" )
        .selectAll( "circle.node" )
        .data [ d.source ], (d) ->
          d.id
        .filter (d) ->
        # REALLY SUBTLE BEHAVIOR:
        # This animation is delayed (based on the link's stagger).  If the user makes a lot of nodes enter,
        # they're going to be staggered.  If the user then quickly slides back to make this node exit BEFORE
        # the stagger delay, this transition will cancel the exit animation and the node will remain perpetually
        # on the screen.  To avoid that, we ignore flashing any nodes currently exiting
          not d[fv.id].isExitting and not d.isDemo
        .style 
          fill: "grey"
        .transition()
        .duration( 500 )
        .style 
          fill: "steelblue"
      d3.select( this )
        .style
          opacity: 1
        .transition().style
          stroke: "#ddd"
          opacity: 1
        .transition().each (d) ->
          d.source.authorForceViewCharge = -200
          fv.force.start()   # restart force view to make attractor change stick


App.Services.factory 'CommentTree', CommentTree
App.Services.factory 'CommentTreeLoader', CommentTreeLoader
App.Services.factory 'CommentTreeParse', CommentTreeParse
App.Services.factory 'TreeToAuthorNodes', TreeToAuthorNodes
App.Services.factory 'ForceLayoutNodeEmitter', ForceLayoutNodeEmitter
App.Services.factory 'AuthorNode', AuthorNode
App.Services.factory 'AuthorNodeEmitter', AuthorNodeEmitter
App.Services.factory 'AnimatingExperiments', AnimatingExperiments