#!/usr/bin/env ruby

#  ComDev Talks: Parse ComDev listings of Apache-related talks

require 'yaml'
require 'json'

COMDEVTALKS = 'https://svn.apache.org/repos/asf/comdev/site/trunk/content/speakers/talks/' # *.yaml
COMDEVDIR = '/Users/curcuru/src/comdev/site/trunk/content/speakers/talks/' # *.yaml
SKIPFILE = 'README.yaml'

# Parse all talks and submitters
def parse_talks(dir = "#{COMDEVDIR}")
  talks = {}
  submitters = {}
  Dir[File.join("#{dir}", "*.yaml")].each do |fname|
    begin
      if fname =~ /_/
        talks["#{File.basename(fname, ".*")}"] = YAML.load(File.read(fname.untaint))
      elsif fname !~ /SKIPFILE/
        submitters["#{File.basename(fname, ".*")}"] = YAML.load(File.read(fname.untaint))
      end
    rescue Exception => e
      puts "Bogosity! analyzing #{fname} raised #{e.message[0..255]}"
      puts "\t#{e.backtrace.join("\n\t")}"
    end
  end

  return talks, submitters
end

# Abstract how cgi gets data
def get_talks_submitters()
  # return parse_talks
  # HACK static data until we have generated public/ or other format
  talks = {"Apache_Way_2017"=>{"title"=>"Apache Way: Effective Open Source Project Management", "teaser"=>"Learn how to manage long-lived diverse open source project communities by following the behaviors of the Apache Way.", "submitter"=>"curcuru", "speakers"=>["curcuru"], "abstract"=>"The \"Apache Way\" is the process by which Apache Software Foundation projects are managed. It has evolved 18 years and has produced over 170 highly successful open source Apache projects. But what is it and how does it work?\n\nLearn the core behaviors that make up the Apache Way, and how they are used in successful Apache projects from core technologies, to big data, to user facing projects.\n\nThe behaviors in the Apache Way are required for all Apache projects, but can be simply used by any open source projects.  Distributed decision making, open communication, do-ocracy, and diverse communities are the cornerstones.\n\nBenefit from the experience of over 5,000 Apache committers and 170 successful projects by applying these behaviors and techniques in your own projects! \n", "audience"=>"Community managers, developers, project managers involved with FOSS projects.", "slides"=>"http://shaneslides.com/apachecon/TheApacheWay-Intro-ApacheConNA2017.html", "video"=>"https://www.youtube.com/watch?v=hpAv54KIgK8", "topics"=>["apacheway", "community"], "present_at"=>["http://apachecon.com/2017"], "present_date"=>"2017-05-16"}, "Committed_To_The_Apache_Way"=>{"title"=>"Committed To The Apache Way", "teaser"=>"Learn how being involved in an Apache project is not just about code.", "submitter"=>"sharan", "speakers"=>["sharan"], "abstract"=>"'To be committed' is a strange phrase. In the past it was used to describe people who were sent to mental institutions or 'facilities'. Fast forward to today and words like committed and commitment are used throughout the Open Source world. Are we all a little crazy? - Perhaps!\n\nIn this presentation Sharan shares her thoughts and experiences about being a Committer, life at the ASF (facility) and how not being able to code is still OK.\n", "audience"=>"Community managers, developers, project managers involved with FOSS projects.", "slides"=>"http://events.linuxfoundation.org/sites/events/files/slides/Commited%20to%20Apache.pdf", "video"=>"https://www.youtube.com/watch?v=vT-kxmoLs5k&index=25&list=PLbzoR-pLrL6pLDCyPxByWQwYTL-JrF5Rp", "topics"=>["community", "contributors"], "present_at"=>["http://apachecon.com/2017"], "present_date"=>"2017-05-16"}, "From_Dev_To_User"=>{"title"=>"From dev@ to user@ to the Apache Way", "teaser"=>"The story of how an existing project community improved by coming to Apache.", "submitter"=>"sblackmon", "speakers"=>["sblackmon"], "abstract"=>"This talk will cover the journey of Apache Streams (incubating) beyond a solution solely by and for java developers, toward a solution that can provide value for anyone, anywhere along the experience spectrum, regardless of technical preferences.  We'll share feedback that served as concentrate focus on mission and usability. \n\nWe'll walk through some of the improvements made to project code and tooling (maven), documentation (website, examples), and usability (command line interface, maven plugins, zeppelin support, network APIs) to move the project from dev@ to user@, and the opportunities we see to increase usability and relevance still further.\n", "audience"=>"Community managers, developers, project managers involved with FOSS projects.", "slides"=>"http://events.linuxfoundation.org/sites/events/files/slides/ApacheConNA2017-Blackmon.pdf", "video"=>"https://www.youtube.com/watch?v=E9A54x6af8o&index=27&list=PLbzoR-pLrL6pLDCyPxByWQwYTL-JrF5Rp", "topics"=>["incubator", "apacheway"], "present_at"=>["http://apachecon.com/2017"], "present_date"=>"2017-05-16"}, "Tale_Of_Two_Developers"=>{"title"=>"A Tale of Two Developers: Finding Harmony Between Commercial Software Development and the Apache Way", "teaser"=>"Learn from the real-life lunchtime dialog between an experienced Apache committer and a new coder.", "submitter"=>"wang", "speakers"=>["wang", "Alex Leblang"], "abstract"=>"Apache community members can reference tenets from the Apache Way such as \u201Ccommunity over code\u201D and \u201Copenness\u201D as if it were second nature. While they may sound simple, these concepts can be foreign to developers coming to open source for the first time. Success as an Apache contributor stresses skills not emphasized in other types of software development, including reconciling the requirements of the upstream development process with the realities of running a commercial software business.\n\nWith the assistance of choreographed Socratic dialogue, our two protagonists, an experienced Apache committer and an enthusiastic young gun contributor, explore the tensions of working on an Apache project as employees of a for-profit company. The audience will learn practical advice and problem solving techniques for working effectively as part of an Apache community. By the end, our greenhorn comes to understand that the yin and yang of commercial software development and the Apache Way can exist in harmony.\n\nOur talk contextualizes the Apache Way for developers who are paid to work on open-source full-time, drawn from our real-world experience working at Cloudera. This is presented through a series of short vignettes accompanied by intervening discussion and review slides. Tenets of the Apache Way like meritocracy, community, and hats are introduced and referred to throughout as the backbone to building strong open-source communities. We examine the tension between corporate pressures and open-source, emphasizing the underlying value that companies gain from open-source software.\n\nOur two main characters are:\n* Alex, an energetic young developer who is new to open source but not to development. Excited to get stuff done on this new project.\n* Andrew, a long-time Apache committer who takes Alex under his wing and teaches him the importance of open-source.\n\nThe outline for our skits are:\n* Act 1: Introduction to Apache and the Apache Way, FAQs from Alex as someone getting started as a new contributor\n* Act 2: How to build consensus when there's conflict (e.g. someone -1's your patch), public communication, demonstrating merit and the path to committership\n* Act 3: No jerks allowed. Andrew does a heel turn and is ruling the project with an iron fist, Alex intervenes in a come-to-jesus/student-becomes-the-teacher moment. Re-emphasize the importance of community, and how dictators are bad for projects.\n", "audience"=>"Community managers, developers, project managers involved with FOSS projects.", "slides"=>nil, "video"=>"https://www.youtube.com/watch?v=ea_9qkaTeVw&index=26&list=PLbzoR-pLrL6pLDCyPxByWQwYTL-JrF5Rp", "topics"=>["apacheway", "developers"], "present_at"=>["http://apachecon.com/2017"], "present_date"=>"2017-05-16"}}
  
  submitters = {"curcuru"=>{"name"=>"Shane Curcuru", "website"=>"http://communityovercode.com/", "twitter"=>"shanecurcuru", "facebook"=>nil, "bio"=>"Shane has been involved at the Apache Software Foundation (ASF) since 1999, and serves as Director and VP of Brand Management, setting trademark policies and helping all 200+ Apache projects implement and defend their brands.\n\nOtherwise, Shane is: a father and husband, a friend, a geek, a Member of the ASF, a baker, and a punny guy.  Oh, and we have cats.  Shane blogs at http://communityovercode.com/ and regularly speaks on FOSS governance and branding topics.\n"}, "README"=>{"title"=>"Talk Title: Strings with colons must be quoted", "teaser"=>"Teaser is one sentence for use on session grids or tweets or the like (where supported).", "submitter"=>"curcuru", "speakers"=>["curcuru", "Court Jester"], "abstract"=>"Abstracts are the full description of a talk, session, or panel that has already been presented.\n\nAbstracts may have line breaks, and some systems may allow **formatting** or the like.\n\nUsing the YAML pipe \"|\" character for a literal multiline scalar means linebreaks are preserved in the abstract. \n", "audience"=>"Brief description of the expected audience for this talk.", "slides"=>"URL.to/posted-slides", "video"=>"URL.to/posted-video?if-any", "present_at"=>["URL.to/last-conference-presented-at"], "present_date"=>"2017-05-16"}, "sblackmon"=>{"name"=>"Steve Blackmon", "website"=>nil, "twitter"=>"steveblackmon", "facebook"=>nil, "bio"=>"VP Technology at People Pattern, previously Director of Data Science at W2O Group, co-founder of Ravel, stints at Boeing, Lockheed Martin, and Accenture. Committer and PMC for Apache Streams (incubating). Experienced user of Spark, Storm, Hadoop, Pig, Hive, Nutch, Cassandra, Tinkerpop, and more.\n"}, "sharan"=>{"name"=>"Sharan Foga", "website"=>nil, "twitter"=>nil, "facebook"=>nil, "bio"=>"Sharan Foga have been involved with the ASF since 2008 and has presented at previous Apachecons (Vancouver 2016, Budapest 2015 & 2014). She enjoys working on community management and related areas and is a Committer and PMC Member for Apache OFBiz and Community Development.\n"}, "wang"=>{"name"=>"Andrew Wang", "website"=>"http://umbrant.com/", "twitter"=>nil, "facebook"=>nil, "bio"=>"Andrew Wang is a software engineer at Cloudera on the HDFS team, where he has worked on projects including in-memory caching, transparent encryption, and erasure coding. Previously, he was a PhD student in the AMP Lab at UC Berkeley, where he worked on problems related to distributed systems and warehouse-scale computing. He is a committer and PMC member on the Apache Hadoop project, a committer on Apache Kudu (incubating), and holds masters and bachelors degrees in computer science from UC Berkeley and UVa respectively. Andrew has spoken at conferences including Hadoop Summit EU, Strata NYC, Strata London, HBaseCon, ACM SoCC, and USENIX HotCloud.\n"}}
  
  return talks, submitters
end

# ## ### #### ##### ######
# Main method for command line use
if __FILE__ == $PROGRAM_NAME
  dir = COMDEVDIR
  outfile = File.join("#{dir}", "comdevtalks.json")
  puts "BEGIN: Parsing YAMLs in #{dir}"
  talks, submitters = parse_talks dir
  results = {}
  results['talks'] = talks
  results['submitters'] = submitters
  File.open(outfile, "w") do |f|
    f.puts JSON.pretty_generate(results)
  end
  puts talks
  puts "END: Thanks for running, see #{outfile}"
  puts submitters
end
