From 1098667de49b43125b4aff7a403b1a4ca7be983a Mon Sep 17 00:00:00 2001 From: talsraviv Date: Thu, 15 Oct 2015 14:18:13 -0400 Subject: [PATCH 01/20] New re-org overhaul first commit --- duckduckhack/api-answers/forum-lookup.md | 434 +++++++ duckduckhack/api-answers/local-search.md | 3 + duckduckhack/api-answers/transit-schedule.md | 3 + .../api-special-cases.md} | 24 +- duckduckhack/backend-reference/data-files.md | 45 + .../goodie-helpers.md} | 3 +- .../language-location-apis.md} | 0 .../metadata.md | 21 +- .../spice-attributes.md} | 0 .../triggers.md} | 58 +- duckduckhack/cheat-sheets/key-bindings.md | 1 + .../cheat-sheets/language-reference.md | 1 + .../cheat-sheets/programming-syntax.md | 179 +++ duckduckhack/ddh-index.md | 68 -- duckduckhack/ddh-prev-next.json | 223 ---- .../fathead/fathead_basic_tutorial.md | 232 ---- duckduckhack/fathead/fathead_overview.md | 121 -- .../cheat-sheet-reference.md} | 62 +- .../design-styleguide.md} | 0 .../display-reference.md} | 0 .../handlebars-helpers.md} | 0 .../setting-goodie-display.md} | 53 +- .../setting-spice-display.md} | 8 +- .../subtemplates.md | 0 .../template-groups.md} | 0 .../templates-overview.md} | 0 .../templates-reference.md} | 0 duckduckhack/function-hacks/calculation.md | 1 + duckduckhack/function-hacks/tool.md | 3 + duckduckhack/function-hacks/transformation.md | 1 + duckduckhack/getting-started/contributing.md | 83 -- duckduckhack/getting-started/ddh-intro.md | 24 - .../determine_your_instant_answer_type.md | 19 - .../goodie_advanced_handle_functions.md | 65 -- duckduckhack/goodie/goodie_basic_tutorial.md | 176 --- duckduckhack/goodie/goodie_overview.md | 37 - duckduckhack/goodie/goodie_quickstart.md | 366 ------ duckduckhack/goodie/goodie_triggers.md | 92 -- .../longtail/longtail_basic_tutorial.md | 3 - duckduckhack/longtail/longtail_overview.md | 41 - duckduckhack/resources/code_styleguide.md | 272 ----- duckduckhack/resources/common_pitfalls.md | 7 - duckduckhack/resources/faq.md | 170 --- duckduckhack/resources/how_to_qa.md | 130 --- .../other_development_environments.md | 262 ----- duckduckhack/resources/video-tutorials.md | 21 - duckduckhack/spice/spice_advanced_frontend.md | 50 - duckduckhack/spice/spice_basic_tutorial.md | 472 -------- .../spice/spice_frontend_walkthroughs.md | 1010 ----------------- duckduckhack/spice/spice_js_api.md | 388 ------- duckduckhack/spice/spice_overview.md | 64 -- duckduckhack/spice/spice_perl_api.md | 7 - .../checklist.md} | 14 +- duckduckhack/submitting/maintaining.md | 3 + .../pull-request.md} | 51 +- duckduckhack/submitting/quality.md | 7 + .../test-files.md} | 0 .../testing-html.md} | 0 .../testing-location-language-apis.md} | 0 .../testing-triggers.md} | 0 duckduckhack/welcome/intro.md | 69 ++ .../setup-dev-environment.md} | 90 +- 62 files changed, 911 insertions(+), 4626 deletions(-) create mode 100644 duckduckhack/api-answers/forum-lookup.md create mode 100644 duckduckhack/api-answers/local-search.md create mode 100644 duckduckhack/api-answers/transit-schedule.md rename duckduckhack/{spice/spice_advanced_backend.md => backend-reference/api-special-cases.md} (85%) create mode 100644 duckduckhack/backend-reference/data-files.md rename duckduckhack/{goodie/goodie_helpers.md => backend-reference/goodie-helpers.md} (94%) mode change 100755 => 100644 rename duckduckhack/{advanced/language_and_location_apis.md => backend-reference/language-location-apis.md} (100%) rename duckduckhack/{submitting-your-instant-answer => backend-reference}/metadata.md (96%) rename duckduckhack/{spice/spice_attributes.md => backend-reference/spice-attributes.md} (100%) rename duckduckhack/{spice/spice_triggers.md => backend-reference/triggers.md} (52%) create mode 100644 duckduckhack/cheat-sheets/key-bindings.md create mode 100644 duckduckhack/cheat-sheets/language-reference.md create mode 100644 duckduckhack/cheat-sheets/programming-syntax.md delete mode 100644 duckduckhack/fathead/fathead_basic_tutorial.md delete mode 100644 duckduckhack/fathead/fathead_overview.md rename duckduckhack/{goodie/goodie_cheat_sheets.md => frontend-reference/cheat-sheet-reference.md} (66%) rename duckduckhack/{instant-answer-display/design_styleguide.md => frontend-reference/design-styleguide.md} (100%) rename duckduckhack/{instant-answer-display/display_reference.md => frontend-reference/display-reference.md} (100%) rename duckduckhack/{instant-answer-display/handlebars_helpers.md => frontend-reference/handlebars-helpers.md} (100%) rename duckduckhack/{goodie/goodie_displaying.md => frontend-reference/setting-goodie-display.md} (88%) rename duckduckhack/{spice/spice_displaying.md => frontend-reference/setting-spice-display.md} (77%) rename duckduckhack/{instant-answer-display => frontend-reference}/subtemplates.md (100%) rename duckduckhack/{instant-answer-display/template_groups.md => frontend-reference/template-groups.md} (100%) rename duckduckhack/{instant-answer-display/templates_overview.md => frontend-reference/templates-overview.md} (100%) rename duckduckhack/{instant-answer-display/templates_reference.md => frontend-reference/templates-reference.md} (100%) create mode 100644 duckduckhack/function-hacks/calculation.md create mode 100644 duckduckhack/function-hacks/tool.md create mode 100644 duckduckhack/function-hacks/transformation.md delete mode 100644 duckduckhack/getting-started/contributing.md delete mode 100644 duckduckhack/getting-started/ddh-intro.md delete mode 100644 duckduckhack/getting-started/determine_your_instant_answer_type.md delete mode 100644 duckduckhack/goodie/goodie_advanced_handle_functions.md delete mode 100644 duckduckhack/goodie/goodie_basic_tutorial.md delete mode 100644 duckduckhack/goodie/goodie_overview.md delete mode 100644 duckduckhack/goodie/goodie_quickstart.md delete mode 100644 duckduckhack/goodie/goodie_triggers.md delete mode 100644 duckduckhack/longtail/longtail_basic_tutorial.md delete mode 100644 duckduckhack/longtail/longtail_overview.md delete mode 100644 duckduckhack/resources/code_styleguide.md delete mode 100644 duckduckhack/resources/common_pitfalls.md delete mode 100644 duckduckhack/resources/faq.md delete mode 100644 duckduckhack/resources/how_to_qa.md delete mode 100644 duckduckhack/resources/other_development_environments.md delete mode 100644 duckduckhack/resources/video-tutorials.md delete mode 100644 duckduckhack/spice/spice_advanced_frontend.md delete mode 100644 duckduckhack/spice/spice_basic_tutorial.md delete mode 100644 duckduckhack/spice/spice_frontend_walkthroughs.md delete mode 100644 duckduckhack/spice/spice_js_api.md delete mode 100644 duckduckhack/spice/spice_overview.md delete mode 100644 duckduckhack/spice/spice_perl_api.md rename duckduckhack/{submitting-your-instant-answer/preparing_for_a_pull_request.md => submitting/checklist.md} (91%) create mode 100644 duckduckhack/submitting/maintaining.md rename duckduckhack/{submitting-your-instant-answer/submission_and_review.md => submitting/pull-request.md} (60%) create mode 100644 duckduckhack/submitting/quality.md rename duckduckhack/{testing/test_files.md => testing-reference/test-files.md} (100%) rename duckduckhack/{testing/testing_html.md => testing-reference/testing-html.md} (100%) rename duckduckhack/{testing/testing_location_language_apis.md => testing-reference/testing-location-language-apis.md} (100%) rename duckduckhack/{testing/testing_triggers.md => testing-reference/testing-triggers.md} (100%) create mode 100755 duckduckhack/welcome/intro.md rename duckduckhack/{getting-started/setup_dev_environment.md => welcome/setup-dev-environment.md} (51%) diff --git a/duckduckhack/api-answers/forum-lookup.md b/duckduckhack/api-answers/forum-lookup.md new file mode 100644 index 000000000..f0d085f6b --- /dev/null +++ b/duckduckhack/api-answers/forum-lookup.md @@ -0,0 +1,434 @@ +# How to Make a Forum Lookup + +Some of our most popular Instant Answers have been direct access to forums, such as [Stack Overflow](#) or [Reddit](#). We'd love to see more community wisdom made part of search results, and this tutorial is one example of how to do that. + +Together we'll build an Instant Answer that directly displays Hacker News posts alongside DuckDuckGo.com search results: + +![Hacker News Spice](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fia-screenshots.s3.amazonaws.com%2Fhacker_news_index.png%3Fnocache%3D4600&f=1) + +It uses an external API (the Hacker News search API), which makes it a "Spice" type of Instant Answer. You can see it in action by searching for ["hn dropbox"](#) for example. + +## How It Works + +When a user searches anything containing words such as "hn", "hn search", or "hacker news", DuckDuckGo will trigger this Instant Answer. That means its front-end code will run on the search results page. + +When the search results page loads, the Instant Answer will make an AJAX call to the Hacker News API. If any articles come back, the Instant Answer will parse, sort, and display each item to the user. + +Simple enough. So how do we make that work in code? + +## Anatomy of an Instant Answer + +The Hacker News Instant Answer is a combination of several backend and fronted code files, each covering a specific function. Because it calls an external API, it is a "Spice" Instant Answer, and all files will be located in the [Spice repository](#). + +Backend files: + +File | Purpose | Location +-----|---------|--------- +[`HackerNews.pm`](#) | Specifies the query triggers, Hacker News API endpoint, and the metadata (such as attribution, name, and so on). | Perl files are placed in the [`zeroclickinfo-spice/lib/DDG/Spice`](#) directory. +[`HackerNews.t`](#) | A test file; it asserts that specific search queries will trigger (or not trigger) this Instant Answer. | Test files are placed in the [`zeroclickinfo-spice/t`](#) directory. + +Frontend files: + +File | Purpose | Location +-----|---------|--------- +[`hacker_news.js`](#) | When the IA is triggered, this file runs on the search results page. It processes the response from the Hacker News API and specifies how to display it. | Frontend files are placed in the [`zeroclickinfo-spice/share/spice/hacker_news/`](#) directory. +[`hacker_news.css`](#) | A minor, optional, custom css file | [`zeroclickinfo-spice/share/spice/hacker_news/`](#) +[`footer.handlebars`](#) | A minor, optional [sub-template](#), a custom handlebars HTML template used as part of the main template. Its use is specified in `hacker_new.js`. | [`zeroclickinfo-spice/share/spice/hacker_news/`](#) + +That's it - these are all the files and functionality necessary to create this Instant Answer. Next, we'll go line by line and build it together from scratch. + +## Set Up Your Development Environment + +Before we begin coding, we'll need to set up our development environment. There are three main steps: + +1. Fork the [Spice Repository](#) on Github.com. ([Find out how](#)) +2. Fork the [DuckDuckGo environment](#) on Codio.com (our tools). ([Find out how](#)) +3. Clone your Github fork onto the Codio environment. ([Find out how](#)) + +If this is your first time setting up, fear not! Check out our [detailed, step-by-step guide](#) to setting up. + +## Create a New Instant Answer + +In Codio, load the terminal, and change into your repository home directory: + +(Screenshot of clicking terminal) + +``` +[08:17 PM codio@border-carlo workspace ]$ cd zeroclickinfo-spice +``` + +The `duckpan` tool helps make and test Instant Answers. To create a new Instant Answer template, run **`duckpan new`**: + +``` +[08:18 PM codio@border-carlo zeroclickinfo-spice {master}]$ duckpan new +Please enter a name for your Instant Answer : +``` + +Type `Hacker Newz` (since *Hacker News* already exists in the repository, we'll change one letter for this tutorial). The tool will do the rest: + +``` +Created file: lib/DDG/Spice/HackerNewz.pm +Created file: share/spice/hacker_newz/hacker_newz.handlebars +Created file: share/spice/hacker_newz/hacker_newz.js +Created file: t/HackerNewz.t +Successfully created Spice: HackerNewz +``` + +That's convenient: The files have each been named - and located - according to the project's conventions. Internally, each file contains correct boilerplate to save us time. + +## `HackerNewz.pm` + +Let's open up `HackerNewz.pm`. + +Navigate using the Codio file tree on the left, and double click on the file, in the `lib/DDG/Spice/` directory. It'll be full of comments and sample code we can change as we please. + +### Settings and Metadata + +Each Instant Answer is a Perl package, so we start by declaring the package namespace in CamelCase format. This has already been done for us: + +```perl +package DDG::Spice::HackerNewz; +``` + +Next, change the comments to contain a short abstract. Easy enough: + +```perl +# ABSTRACT: Search for Hacker News +``` + +Now we'll import the Spice class (as well as tell the Perl compiler to be strict) - also already done for us: + +```perl +use strict; +use DDG::Spice; +``` + +On the next line, we'll leave caching on. By default, caching saves the results to individual API calls for an hour. Of course, this may not be right for some Instant Answers - so you can just replace `1` with `0`. Caching can get interesting - [learn more here](#). + +```perl +spice is_cached => 1; +``` + +Now for the Metadata. Because there's so many Instant Answers, metadata helps us organize, describe, and attribute your contribution. They are also used to automatically generate Instant Answer Pages - plus give you credit right on DuckDuckGo.com. + +For example, these are the Metadata values used in the live HackerNews answer. You can learn more about each Metadata property [documented here](#). + +```perl +primary_example_queries "hn postgresql"; +description "Search the Hacker News database for related stories/comments"; +name "HackerNews"; +code_url "https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/lib/DDG/Spice/HackerNews.pm"; +icon_url "/i/www.hnsearch.com.ico"; +topics "programming", "social"; +category "forums"; +attribution github => ['https://github.com/adman','Adman'], + twitter => ['http://twitter.com/adman_X','Adman']; +``` + +### API Endpoint + +With the formalities out of the way, let's define the most important element of our Instant Answer - the API call. This is a URL to which we'll make a GET request. + +```perl +spice to => 'https://hn.algolia.com/api/v1/search?query=$1&tags=story'; +``` + +Notice the `$1` - that's a placeholder for a dynamic value our Instant Answer will provide. Many Instant Answers take advantage of this for search endpoints, but others might not need it at all. Feel free to leave it out of your URL. + +What fills the `$1`? Our *handle* function, which we'll talk about in a bit. + +### Indicate our Callback Function + +In most cases, APIs allow for a "callback" parameter, which we'd usually include in the URL like this: + +```perl +http://www.api.awesome.com/?q=&callback= +``` + +This parameter is used to wrap the JSON object being returned in a JavaScript function call. This function is often named in the `callback` parameter - but that depends on the API. + +In this particular case, the API doesn't allow for this parameter to be specified, so we force this manually by using the **spice wrap\_jsonp\_callback** function. Enter this text on the next line to do this: + +```perl +spice wrap_jsonp_callback => 1; +``` + +Now, when the JSON is returned by the API, it will be wrapped in a call to our Spice's JavaScript callback function, which lives in the frontend, and which we'll define in `hacker_newz.js`. + +### Triggers + +How will DuckDuckGo know to trigger our Instant Answer on a user's search? That's what triggers are for: + +```perl +triggers startend => "hn", "hackernews", "hacker news", "news.yc", "news.ycombinator.com", "hn search", "hnsearch", "hacker news search", "hackernews search"; +``` + +This tells DuckDuckGo that if any of these strings occurs at the *start* or *end* of any user's search query, it should activate our Instant Answer and give the API a shot. Of + +Aside from `startend`, there are more types of triggers - and you can even define several together. You can [learn more about triggers here](#). + +### Handle Function + +Remember our `$1` placeholder before? It receives whatever is returned by the `handle` function. + +```perl +handle remainder => sub { + return unless $_; + return; +}; +``` + +This function is a simple case: it returns the *remainder* of the query, unless it's blank. The *remainder* is just the query minus the trigger. If a user searches 'hacker news meteor', the remainder would be 'meteor'. + +There's fancier things that can be done with this function, including regular expressions - you can [read more about handle functions here](#). + +Oh - one more thing. Because this is a Perl package, it must return `1` at the end to indicate successful loading: + +```perl +1; +``` + +Our backend is complete. Now DuckDuckGo knows *when* to call the API, *where* to call the API, and *what* query to send it. Next, we'll tell DuckDuckGo how to display the results. + +## `hacker_newz.js` + +Let's open up `hacker_newz.js`. Navigate using the Codio file tree on the left, and double click on the file, in the `zeroclickinfo-spice/share/spice/hacker_news/` directory. It, too, will be full of comments and sample code we can change as we please. + +### JavaScript Formalities + +Our JavaScript file is wrapped inside the "[module pattern](http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript)" that makes sure we can access the global scope, but that no variables inside this pattern will leak into the global scope. We also take advantage of JavaScript's [strict mode](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FFunctions_and_function_scope%2FStrict_mode). + +```javascript +(function(env) { + "use strict"; + + // Everything else... + +})(this); +``` + +It's not at all critical to understand this - simply that it is required for any Instant Answer frontend. + +### Define the Callback + +Our frontend callback is what handles any data from our API call. When our API call returns, its response is passed to this callback as `api_result`. It should already be included in the file: + +```javascript +env.ddg_spice_hacker_newz = function(api_result) { + // Everything else... +} +``` + +### Call Spice.Failed() If Nothing Returned + +Just because our Instant Answer triggered doesn't mean the API will necessarily return anything. Here, we check for the case of no response, error response, or empty response. + +The default code is a good start. **However, this code should be customized to fit the response of your particular API.** + +```javascript +if (!api_result || api_result.error) { + return Spice.failed('hacker_newz'); +} +``` + +The Hacker News API, in particular, returns its data inside a `hits` property - so we check for its existence. + +Like many APIs, the results come as an *array*. That means we'll also check if `hits` has a `length`. That way, if no results were returned from the API, we can stop that as well. + +```javascript +if(!api_result || !api_result.hits || api_result.hits.length === 0) { + return Spice.failed('hacker_newz'); +} +``` + +It's important to use `Spice.failed()` because this lets the rest of the Spice system know our Spice isn't going to display so that other relevant answers can be given an opportunity to display. + +### Display the Data + +With results in hand, we call `Spice.add()` to display our Spice to the user. + +While our `hacker_newz.js` boilerplate doesn't contain this, you might have noticed that our final [`hacker_news.js`](#) uses `DDG.require()`. This is not necessary for all Instant Answers, but is used to include external libraries, like [MomentJS](http://momentjs.com/) in this case. You can [learn more about `DDG.require()` here](#). + +```javascript +DDG.require('moment.js', function(){ // Not required for most Instant Answers + Spice.add({ + // Display properties go here + }); +}); +``` + +### Set Our Display Properties + +Let's look inside the `Spice.add()` call. It's passed an object with display properties - let's go through each. A full explanation of each display property can be found in the [Display Reference](#). + +The `id` is automatically inserted for us: + +```javascript +id: 'hacker_newz', +``` + +The `name` is the name of the clickable tab in the AnswerBar containing our Instant Answer. + +```javascript +name: 'Social', +``` + +We specify the `data` returned by the API. This is usually `api_result` or the sub-property containing the actual content - in this case, `hits`. + +```javascript +data: api_result.hits, +``` + +The `meta` property defines all the surrounding details of the Instant Answer, such as the phrase "Showing 20 Hacker News Submissions", or the link to the information source. You can learn about each meta property available to you in the [Display Reference](#). + +In this example, `sourceUrl` is calculated at the top of the callback in [`hacker_news.js`](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/share/spice/hacker_news/hacker_news.js#L8) + +```javascript +meta: { + sourceName: 'HN Search', + sourceUrl: sourceUrl, + total: api_result.hits, + itemType: (api_result.hits.length === 1) ? 'Hacker News submission' : 'Hacker News submissions', + searchTerm: decodeURIComponent(query) +}, +``` + +To prepare our data for displaying as HTML, we define a `normalize` function. This optional function takes each raw API item, and returns an item ready for displaying in the HTML template. + +The `normalize` function is run on each item in the API result. For convenience, the original properties of each API result (which are not overwritten) are also included. Learn more about the [`normalize` function here](#). + +```javascript +normalize: function(item) { + return { + title: item.title, + url: (item.url) ? item.url : 'https://news.ycombinator.com/item?id=' + item.objectID, + points: item.points || 0, + num_comments: item.num_comments || 0, + post_domain: extractDomain(item.url), + date_from: moment(item.created_at_i * 1000).fromNow(), + arrowUrl: DDG.get_asset_path('hacker_news','arrow_up.png') + }; +}, +``` + +Let's specify what HTML templates we'll use to display each item. The vast majority of Instant Answers use the DuckDuckHack [built-in templates system](#). There are all sorts of specialized templates, from displaying places on a map, to displaying movie titles, to products, and lookup information. Each of these can be customized using [options and variants](#). + +[Template groups](#) are convenient presets. They're specified in the `group` property. The other properties you see under templates customize the behavior of the group. For example, `detail: false` makes sure items will always be displayed as tiles. Learn more about these options [here](#). + +```javascript +templates: { + group: 'text', + options: { + footer: Spice.hacker_news.footer + }, + detail: false, + item_detail: false, + variants: { + tileTitle: "3line-small", + tileFooter: "3line" + } +}, +``` + +You'll notice the inclusion of the `Spice.hacker_news.footer` sub-template. This refers to the [footer.handlebars](#) file also in the `share/spice/hacker_news/` directory. You can learn more about the [inclusion of sub-templates here](#). + +Finally, we'll give instructions on how to sort our results - by what properties. [Learn more about sorting here](#). + +```javascript +sort_fields: { + score: function(a, b){ + return (a.points > b.points) ? -1 : 1; + }, + date: function(a, b){ + return (a.created_at_i > b.created_at_i) ? -1 : 1; + } +}, +sort_default: 'score' +``` + +That's it! We've told the DuckDuckGo search results page how to display our data. + +## Handlebars Templates + +Many [built-in templates](#) allow for inserting sub-templates to fill out particular features. For example, sub-templates can be used to create custom footers, calls-to-action, or decide how to display lists of values. + +In this case, you'll notice that there is a `footer.handlebars` function found in [`share/spice/hacker_news`](#). You'll also notice that above in the `templates` property, it's specified to be used as the template footer: + +```javascript +templates: { + ... + options: { + footer: Spice.hacker_news.footer + }, + ... +} +``` + +Sub-templates can either be built-in or created custom for your Instant Answer. You can learn more about how they work in the [sub-templates reference](#). + +## CSS Files + +You'll notice there's a [css file](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/share/spice/hacker_news/hacker_news.css) in the `share/spice/hacker_news/` directory. + +While any CSS files in the directory will be included automatically, **this is no longer necessary or encouraged**. Instead, the more stable and maintainable option is to use [variants](#). + +## Test File + +Creating a test file for your Instant Answer is a critical requirement for [submitting](#) your Instant Answer. You can learn more in the [Test File Reference](#). + +In this case, `duckpan new` created a test file for us, under [`t/HackerNews.t`](#). We'll test two queries to make sure they trigger our Instant Answer: + +```perl +#!/usr/bin/env perl + +use strict; +use warnings; +use Test::More; +use DDG::Test::Spice; + +ddg_spice_test( + [qw( DDG::Spice::HackerNews )], + 'hn duckduckgo' => test_spice( + '/js/spice/hacker_news/duckduckgo', + call_type => 'include', + caller => 'DDG::Spice::HackerNews' + ), + 'hn postgresql' => test_spice( + '/js/spice/hacker_news/postgresql', + caller => 'DDG::Spice::HackerNews', + ), +); + +done_testing; +``` + +A test file is required for submitting your Instant Answer. However, we don't need to it proceed with interactively testing our code, which we'll do next. + +### Interactively Test Our Instant Answer + +Inside Codio, we can preview the behavior of all Instant Answers on a local test server. + +In Codio, load the terminal, and make sure you're in your repository's home directory. If not, change into it. + +Enter the **`duckpan server`** command and press Enter. + +``` +[08:18 PM codio@border-carlo zeroclickinfo-spice {master}]$ duckpan server + +``` + +The terminal should print some text and let you know that the server is listening on port 5000. + +``` +Starting up webserver... + +You can stop the webserver with Ctrl-C + +HTTP::Server::PSGI: Accepting connections at http://0:5000/ +``` + +Click the "**DuckPAN Server**" button at the top of the screen. A new browser tab should open and you should see the DuckDuckGo Homepage. Type your query to see the results (actual search results will be placeholders.) + +(Screenshot) + +Need help? [Join us over on Slack!](mailto:QuackSlack@duckduckgo.com?subject=AddMe) \ No newline at end of file diff --git a/duckduckhack/api-answers/local-search.md b/duckduckhack/api-answers/local-search.md new file mode 100644 index 000000000..6f872ac4f --- /dev/null +++ b/duckduckhack/api-answers/local-search.md @@ -0,0 +1,3 @@ +# How to Add a Local Search + +(NY Bike Share) \ No newline at end of file diff --git a/duckduckhack/api-answers/transit-schedule.md b/duckduckhack/api-answers/transit-schedule.md new file mode 100644 index 000000000..fded09c87 --- /dev/null +++ b/duckduckhack/api-answers/transit-schedule.md @@ -0,0 +1,3 @@ +# How to Make a Transit Times Lookup + +(SEPTA Train) \ No newline at end of file diff --git a/duckduckhack/spice/spice_advanced_backend.md b/duckduckhack/backend-reference/api-special-cases.md similarity index 85% rename from duckduckhack/spice/spice_advanced_backend.md rename to duckduckhack/backend-reference/api-special-cases.md index 0fecf22b1..adaeca696 100644 --- a/duckduckhack/spice/spice_advanced_backend.md +++ b/duckduckhack/backend-reference/api-special-cases.md @@ -1,22 +1,16 @@ -##Spice Handlers +# API Special Cases -- [Multiple Placeholders in Spice To URL](http://duck.co/duckduckhack/spice_advanced_backend#Multiple-Placeholders-in-Spice-To-URL) +## Multiple API endpoints -- [Returning Multiple Values (to Spice From)](http://duck.co/duckduckhack/spice_advanced_backend#Returning-Multiple-Values-to-Spice-From) +Learn how to handle multiple API endpoints when developing a DuckDuckGo Instant Answer. -- [API Keys](http://duck.co/duckduckhack/spice_advanced_backend#api-keys) +[Watch video on Vimeo](https://vimeo.com/137152536) -- [JSON -> JSONP](http://duck.co/duckduckhack/spice_advanced_backend#json-gt-jsonp) +![https://vimeo.com/137152536](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fscreencast_multiple-endpoints.jpg&f=1) -- [Pure JS functions](http://duck.co/duckduckhack/spice_advanced_backend#pure-js-functions) +## Multiple Placeholders in API URL -- [Caching API Responses](http://duck.co/duckduckhack/spice_advanced_backend#caching-api-responses) - -- [Caching API Calls](http://duck.co/duckduckhack/spice_advanced_backend#caching-api-calls) - -## Multiple Placeholders in Spice To URL - -If you need to substitute multiple parameters into the API call like how the [RandWord Spice](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/lib/DDG/Spice/RandWord.pm) uses two numbers to specify the min and max length of the random word, you can use the **Spice from** keyword: +If you need to substitute multiple parameters into the API call you can use the **Spice from** keyword. In the following example, the [RandWord Spice](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/lib/DDG/Spice/RandWord.pm) uses two numbers to specify the min and max length of the random word: ```perl spice from => '(?:([0-9]+)\-([0-9]+)|)'; @@ -37,8 +31,6 @@ handle remainder => sub { } ``` - - Then the the string `10-100` would be sent to the `spice from` regexp, which would capture the two numbers into `$1` and `$2`. These two placeholders are then used to replace `$1` and `$2` in the `spice to` URL: ```perl @@ -47,7 +39,7 @@ spice to => 'http://api.wordnik.com/v4/words.json/randomWord?minLength=$1&maxLen **Note:** The reason why you do not need to specify a **from** keyword by default, is that the default value of `spice from` is **(.*)**, which means whatever you return gets gets captured into `$1`. -## Returning Multiple Values (to Spice From) +## Passing Multiple Values to Spice From You can have multiple return values in your handle function like the [AlternativeTo Spice](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/lib/DDG/Spice/AlternativeTo.pm). diff --git a/duckduckhack/backend-reference/data-files.md b/duckduckhack/backend-reference/data-files.md new file mode 100644 index 000000000..2133a6514 --- /dev/null +++ b/duckduckhack/backend-reference/data-files.md @@ -0,0 +1,45 @@ +# Data Files + +Instant Answers - particularly Goodies - can use simple text or html input files for display or processing. These files can be read once and reused to answer many queries without cluttering up your source code. + +The `share` function gives each Instant Answer access to a subdirectory of the repository's [`share`](https://github.com/duckduckgo/zeroclickinfo-goodies/tree/master/share/goodie) directory. The subdirectory for your Instant Answer is based on its Perl package name which is transformed from CamelCase to underscore_separated_words. + + +## Usage + +The [Passphrase Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Passphrase.pm) uses the `share` directory to hold data for processing purposes: + +```perl +my @words = share('words.txt')->slurp; +``` + +Here the `share` function grabs the `words.txt` file, found in `zeroclickinfo-goodies/share/goodie/passphrase/`. The returned object's `slurp` method is called which pushes each line of the file into the `@words` array. + +In another case, the [PrivateNetwork Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/PrivateNetwork.pm) uses its `share` directory to hold files for display purposes: + +```perl +my $text = scalar share('private_network.txt')->slurp, +my $html = scalar share('private_network.html')->slurp; + +handle sub { + $text, html => $html; +}; +``` + +Here each file is grabbed from `share/goodie/private_network/` and `slurp`ed in a `scalar` context. This returns the entire file as a string and assigns it to the appropriate variable. In the `handle` function, `$text` and `$html` are returned to display as plain text or HTML Instant Answer. + +## UTF-8 Encoding + +One further consideration is whether your data file contains non-ASCII characters. If so, you will want to prepare the file with UTF-8 encoding. The [Shortcut Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Shortcut.pm) uses a UTF-8 data file: + +```perl +my @shortcuts = share('shortcuts.csv')->slurp(iomode => '<:encoding(UTF-8)'); +``` + +As with the Passphrase Goodie example above, each line becomes an entry in the resulting array. With this `iomode` set, the UTF-8 characters used to denote system-specific keys will be handled properly throughout the rest of the processing. + +## Generating Data Files + +In some cases, you may need to generate the data files you will `slurp` from the share directory. If so, please put the required generation scripts in the Goodie's `share` directory. While **shell scripts are preferred**, your scripts can be written in the language of your choice. + +As an example, the [CurrencyIn Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/CurrencyIn.pm) uses a [combination of Shell and Python scripts](https://github.com/duckduckgo/zeroclickinfo-goodies/tree/master/share/goodie/currency_in) to generate its input data, `currency.txt`. \ No newline at end of file diff --git a/duckduckhack/goodie/goodie_helpers.md b/duckduckhack/backend-reference/goodie-helpers.md old mode 100755 new mode 100644 similarity index 94% rename from duckduckhack/goodie/goodie_helpers.md rename to duckduckhack/backend-reference/goodie-helpers.md index 4143350ff..ca9dfe2ea --- a/duckduckhack/goodie/goodie_helpers.md +++ b/duckduckhack/backend-reference/goodie-helpers.md @@ -1,12 +1,11 @@ # Goodie Helpers -A few commonly used functions are wrapped up into useful helpers that can be easily used by any goodie. These are implemented as "roles" that can be used adding the following line to your Goodie's Perl module (.pm file): +We've wrapped several commonly used functions into useful helpers that can be used by any Goodie Instant Answer. These are implemented as "roles" that can be used adding the following line to your Goodie's Perl module (.pm file): ```perl with 'DDG::GoodieRole::RoleName'; ``` - ## Numbers Often matching and outputting numbers intelligently is required, for this the NumberStyler role is ideal: diff --git a/duckduckhack/advanced/language_and_location_apis.md b/duckduckhack/backend-reference/language-location-apis.md similarity index 100% rename from duckduckhack/advanced/language_and_location_apis.md rename to duckduckhack/backend-reference/language-location-apis.md diff --git a/duckduckhack/submitting-your-instant-answer/metadata.md b/duckduckhack/backend-reference/metadata.md similarity index 96% rename from duckduckhack/submitting-your-instant-answer/metadata.md rename to duckduckhack/backend-reference/metadata.md index 9ddab1f0b..95a4626d0 100644 --- a/duckduckhack/submitting-your-instant-answer/metadata.md +++ b/duckduckhack/backend-reference/metadata.md @@ -5,7 +5,6 @@ Including metadata helps us to categorize and describe your Instant Answer. This Metadata is added to your Instant Answer Perl file, above the triggers. For example, the ["Alternative To" Spice](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/lib/DDG/Spice/AlternativeTo.pm) has the following metadata: ```perl - name "AlternativeTo"; primary_example_queries "alternative to notepad"; secondary_example_queries "alternative to photoshop for mac", "free alternative to spotify for windows"; @@ -23,7 +22,7 @@ Metadata will be used in several places relating to your Instant Answer, includi ------ -## name +## `name` A unique name for this Instant Answer. @@ -33,7 +32,7 @@ While this can be arbitrary, it is considered good practice to have the chosen n name "Subreddit Search"; ``` -## source +## `source` The name of the data source used for your Instant Answer. @@ -41,7 +40,7 @@ The name of the data source used for your Instant Answer. source "Reddit"; ``` -## icon_url (optional) +## `icon_url` (optional) The favicon URL for the data source used. @@ -59,7 +58,7 @@ or, for DuckDuckGo-sourced favicons, icon_url "/i/reddit.com.ico"; ``` -## description +## `description` A succinct explanation of what the Instant Answer does. For clarity, *exclude* the source name if possible. @@ -67,7 +66,7 @@ A succinct explanation of what the Instant Answer does. For clarity, *exclude* t description "Search for Subreddits"; ``` -## primary_example_queries +## `primary_example_queries` Examples of the most common types of queries which will trigger the Instant Answer. @@ -75,7 +74,7 @@ Examples of the most common types of queries which will trigger the Instant Answ primary_example_queries "/r/pizza", "subreddit nature"; ``` -## secondary_example_queries (optional) +## `secondary_example_queries` (optional) Examples of other, less common, trigger words or phrases for the Instant Answer, if applicable. @@ -83,7 +82,7 @@ Examples of other, less common, trigger words or phrases for the Instant Answer, secondary_example_queries "r/accounting"; ``` -## category +## `category` The category into which your Instant Answer best fits. @@ -124,7 +123,7 @@ Supported categories include: category "forums"; ``` -## topics +## `topics` A list of the topics to which your Instant Answer applies. @@ -159,7 +158,7 @@ Supported topics include: topics "social", "entertainment", "special_interest"; ``` -## code_url +## `code_url` URL for the Instant Answer code on github. @@ -167,7 +166,7 @@ URL for the Instant Answer code on github. code_url "https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/lib/DDG/Spice/RedditSubSearch.pm"; ``` -## attribution +## `attribution` Information about you, the author. diff --git a/duckduckhack/spice/spice_attributes.md b/duckduckhack/backend-reference/spice-attributes.md similarity index 100% rename from duckduckhack/spice/spice_attributes.md rename to duckduckhack/backend-reference/spice-attributes.md diff --git a/duckduckhack/spice/spice_triggers.md b/duckduckhack/backend-reference/triggers.md similarity index 52% rename from duckduckhack/spice/spice_triggers.md rename to duckduckhack/backend-reference/triggers.md index 4cd26b6b0..5938f0353 100644 --- a/duckduckhack/spice/spice_triggers.md +++ b/duckduckhack/backend-reference/triggers.md @@ -1,51 +1,38 @@ -## Triggers +# Triggers -There are two types of triggers, **words** and **regex**. We insist that you use word triggers whenever possible as they are simpler and faster. +Triggers tell DuckDuckGo on which search queries to initiate an Instant Answer. There are two types of triggers, **words** and **regex**. -[Word trigger example](http://duck.co/duckduckhack/spice_triggers#word-triggeres) - -```perl -triggers start => "trigger my instant answer", "trigger myIA", "myIA"; -``` - -[Trigger locations](http://duck.co/duckduckhack/spice_triggers#trigger-locations) - -- `start` — Word exists at the start of the query -- `end` — Word exists at the end of the query -- `startend` — Word is at the beginning or end of the query -- `any` — Word is anywhere in the query +The two types of triggers cannot be combined, but you may consider a third option of [Regex Guards](#regex-guards). We insist that you use word triggers whenever possible as they are simpler and faster. ## Word Triggers -### Usage +Word triggers specify *what* to look for, and *where* to look for it: ```perl triggers => ``` - - -#### Examples +For example: ```perl -triggers start => "trigger my instant answer", "trigger myIA", "myIA"; +triggers start => "stackoverflow", "stack overflow", "SO"; ``` -or +You may find the [qw](http://perlmeme.org/howtos/perlfunc/qw_function.html) function convenient: ```perl -@triggers = qw(these are separate triggers for my instant answer); +@triggers = qw(john jacob jingleheimer schmidt); triggers any => @triggers; ``` -or +You can also use multiple trigger statements together: ```perl -triggers start => "starting phrase of query"; -triggers end => "ending phrase of query"; +triggers start => "tv", "television"; +triggers end => "schedule", "hours"; ``` -## Trigger Locations +### Word Trigger Locations - `start` — Word exists at the start of the query - `end` — Word exists at the end of the query @@ -56,7 +43,11 @@ triggers end => "ending phrase of query"; ## Regex Triggers -### Usage +***We insist that you use word triggers whenever possible as they are simpler and faster.*** + +***Note that you cannot combine the use of Regex Triggers with Word Triggers.*** + +Regex triggers specify *which version of the query*, and a *regular expression* to apply. ```perl triggers => @@ -85,13 +76,11 @@ triggers query_raw => $regex; - `query_nowhitespace` — `query` with all whitespace removed - `query_clean` — `query_lc`, but with whitespace and non-alphanumeric ascii removed -**Note:** You **cannot** combine the use of **Regex Triggers** with **Word Triggers**. - ## Regex Guards -We much prefer you use **trigger words** when possible because they are faster on the backend. In some cases however, **regular expressions** are necessary, e.g. you need to trigger on sub-words. In this case we suggest you consider using a **word trigger** and supplement it with a **regex guard**. A regex guard is a return clause immediately inside the `handle` function. +Trigger words are coarse filters; they may send you queries you cannot handle. Your Instant Answer should return nothing in these cases. As such, you generally need to further qualify the query in your code. - +We much prefer you use Word Triggers when possible because they are faster on the backend. In some cases however, **regular expressions** are necessary, e.g., you need to trigger on sub-words. In this case we suggest you consider using a **word trigger** and supplement it with a **regex guard**. A regex guard is a return clause immediately inside the `handle` function. A good example of this is the Base64 goodie. In this case we want to trigger on queries with the form "base64 encode/decode \". Here's an excerpt from [Base64.pm](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Base64.pm) which shows how this case is handled using a word trigger, with a regex guard: @@ -100,9 +89,18 @@ triggers startend => "base64"; handle remainder => sub { return unless $_ =~ /^(encode|decode|)\s*(.*)$/i; +``` + +Another example, the [Base Goodie's](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Base.pm) has a `return` statement paired with an `unless` right on the first line of its `handle` function: +```perl +handle remainder => sub { + return unless /^([0-9]+)\s*(?:(?:in|as)\s+)?(hex|hexadecimal|octal|oct|binary|base\s*([0-9]+))$/; + ... +} ``` + ## Triggers in Multiple Languages We have plans to make it possible to trigger Instant Answers in many different languages. Until an internationalization mechanism is place, to uphold maintainability and consistency, **we cannot accept pull requests that add languages directly in the code.** \ No newline at end of file diff --git a/duckduckhack/cheat-sheets/key-bindings.md b/duckduckhack/cheat-sheets/key-bindings.md new file mode 100644 index 000000000..31b58399f --- /dev/null +++ b/duckduckhack/cheat-sheets/key-bindings.md @@ -0,0 +1 @@ +# How to Make a Key Bindings Cheat Sheet diff --git a/duckduckhack/cheat-sheets/language-reference.md b/duckduckhack/cheat-sheets/language-reference.md new file mode 100644 index 000000000..578d1818b --- /dev/null +++ b/duckduckhack/cheat-sheets/language-reference.md @@ -0,0 +1 @@ +# How to Make a Language Reference Cheat Sheet \ No newline at end of file diff --git a/duckduckhack/cheat-sheets/programming-syntax.md b/duckduckhack/cheat-sheets/programming-syntax.md new file mode 100644 index 000000000..6ca635030 --- /dev/null +++ b/duckduckhack/cheat-sheets/programming-syntax.md @@ -0,0 +1,179 @@ +# How to Make a Programming Cheat Sheet + +It's always delightful when search results answer our question in fewer steps than we expected. Programming language Cheat Sheets are no exception. Naturally, our community would love to encourage more of them. + +Cheat Sheets are the easiest type of Instant Answer to contribute. There are several kinds you can make: reference cheat sheets, language cheat sheets, key bindings, in addition to programming cheat sheets. In this tutorial, we'll learn how the Regular Expressions Cheat Sheet was made. + +![Regex Cheat Sheet](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fia-screenshots.s3.amazonaws.com%2Fregex_cheat_sheet_index.png%3Fnocache%3D6203&f=1) + +## How Cheat Sheets Work + +Cheat Sheets automatically trigger on when their topic is searched together with words such as "help", "commands", "guide", "reference", and "syntax" (check out the [full list of terms](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/CheatSheets.pm)). For example, searching for "regex help" would trigger the Regex Cheat Sheet Instant Answer. + +For more information on how Cheat Sheets trigger, check out the [detailed documentation on Cheat Sheets](#). + +## Anatomy of a Cheat Sheet + +Cheat sheets only require you to add one file with the information to present. In our case, that would be `regex.json`. + +File | Purpose | Location +-----|---------|--------- +[`regex.json`](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/share/goodie/cheat_sheets/json/regex.json)|Specify cheat sheet info and display settings|Placed inside the Cheat Sheets Goodie directory: `zeroclickinfo-goodies/share/goodie/cheat_sheets/json/` + +## Set Up Your Development Environment + +Before we begin coding, we'll need to set up our development environment. There are three main steps: + +1. Fork the [Spice Repository](#) on Github.com. ([Find out how](#)) +2. Fork the [DuckDuckGo environment](#) on Codio.com (our tools). ([Find out how](#)) +3. Clone your Github fork onto the Codio environment. ([Find out how](#)) + +If this is your first time setting up, fear not! Check out our [detailed, step-by-step guide](#) to setting up. + +## Create a JSON File + +In Codio, use the left-hand panel to navigate to the `/zeroclickinfo-goodies` repository directory. Then use the file tree to click into the `/share/goodie/cheat_sheets` directory. Finally, click the **json** folder. + +Up in the **File menu**, click **"Create New File"**, and enter the name of your cheat sheet as a JSON file (make sure it's saving to the `cheat_sheets/json` directory). In our case, since our topic is 'regex', we'll name our file `regex.json`. + +Erase any pre-filled contents that Codio might have inserted, and replace with the open and close brackets, indicating a JSON object. + +```javascript +{ + +} +``` + +## Add Metadata + +Let's add the metadata for our cheat sheet - the information that helps classify, organize, and display our Instant Answer. Start by entering a unique `id` for your Cheat Sheet: + +```javascript +{ + "id": "regex_cheat_sheet", +} +``` + +Next, add a name and description for your Instant Answer: + +```javascript +{ + "id": "regex_cheat_sheet", + "name": "Regex Cheat Sheet", + "description": "Regular expression syntax", +} +``` + +Let's cite a source and link for our information, whenever possible, under `metadata`: + +```javascript +{ + "id": "regex_cheat_sheet", + "name": "Regex Cheat Sheet", + "description": "Regular expression syntax", + "metadata": { + "sourceName": "Cheatography", + "sourceUrl": "http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/" + }, +} +``` + +## Add Cheat Sheet Settings + +Right now, since we named our file `regex.json`, our Cheat Sheet will trigger on phrases like 'regex guide' or 'regex syntax'. If we want it to trigger on words other than 'regex,' we can specify aliases. Add the following code beneath `metadata`: + +```javascript +"aliases": [ + "regexp", "regular expression", "regular expressions" +], +``` + +Next, we decide the form in which the cheat sheet will be displayed. There are four cheat sheet template types: + +![Cheat sheet template types](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fcheatsheet-template-types.png&f=1) + +We'll choose the 'code' template, because it fits our content the best: + +```javascript +"template_type": "code", +``` + +## Fill Out Content + +Now it's time to fill in our Cheat Sheet's helpful content. This is done as an object, under the `sections` property: + +```javascript +"sections": { + ... +} +``` + +Each section is a key-value pair of the section's name, and an array: + +```javascript +"sections": { + "Assertions": [ + + ], + "POSIX Classes": [ + + ] + ... +} +``` + +Each section's array lists objects, each with `key` and `val` properties. These contain our visible content: + +```javascript +"sections": { + "Assertions": [ + { + "val": "Lookahead assertion", + "key": "?=" + }, { + "val": "Negative lookahead", + "key": "?!" + }, + ... + ], + ... +}, +``` + +You can see (and copy-paste) the full contents of the `sections` property in the [`regex.json` file on Github](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/share/goodie/cheat_sheets/json/regex.json). The full JSON syntax for entering this information is documented in the [Cheat Sheets reference page](#). + +Finally, we can specify precisely in what order to display sections using the `section_order` property. + +```javascript +"section_order": ["Anchors", "Character Classes", "POSIX Classes", "Pattern Modifiers", "Escape Sequences", "Quantifiers", "Groups and Ranges", "Assertions", "Special Characters", "String Replacement"] +``` + +Important note: In order to be displayed, every section in `sections` must appear in `section_order`. + +## Test Your Cheat Sheet + +Let's see our Cheat Sheet in action. To do this, we'll create a test server that will allow you to view your Instant Answer as it would appear above DuckDuckGo search results. + +1. In Codio, open your Terminal by clicking on **Tools > Terminal**. + + (Screenshot) + +2. Change into the `zeroclickinfo-goodies` directory by typing `cd zeroclickinfo-goodies` at the command line. +3. Next, type **`duckpan server`** and press "**Enter**". The Terminal should print some text and let you know that the server is listening on port 5000. + + ``` + Starting up webserver... + You can stop the webserver with Ctrl-C + HTTP::Server::PSGI: Accepting connections at http://0:5000/ + ``` + +4. Click the "**DuckPAN Server**" button at the top of the screen. A new browser tab should open and you should see the DuckDuckGo Homepage. Type **"regex cheat sheet"** and press "**Enter**". + + (Screenshot) + +5. You should see your cheat sheet show up in the search results! **Make sure it displays correctly; check that all escaped characters and code blocks appear as you intended.** +6. When you're done testing, go back to the Terminal, and press "**Ctrl+C**" to shut down the DuckPAN Server. The Terminal should return to a regular command prompt. + +Congrats - you've made a working Instant Answer! If you've made an original cheat sheet, find out how to contribute it live on DuckDuckGo.com in the [Contributing section](#). + +Need help? [Join us over on Slack!](mailto:QuackSlack@duckduckgo.com?subject=AddMe) \ No newline at end of file diff --git a/duckduckhack/ddh-index.md b/duckduckhack/ddh-index.md index 236d82577..c67e5f37c 100755 --- a/duckduckhack/ddh-index.md +++ b/duckduckhack/ddh-index.md @@ -2,71 +2,3 @@ - **Getting Started** - [Welcome!](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/getting-started/ddh-intro.md) - - [How to Contribute](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/getting-started/contributing.md) - - [Determine Your Instant Answer Type](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/getting-started/determine_your_instant_answer_type.md) - - [Setup Your Development Environment](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/getting-started/setup_dev_environment.md) - -- **Goodie** - - [Overview](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/goodie/goodie_overview.md) - - [Quick Start](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/goodie/goodie_quickstart.md) - - [Basic Tutorial](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/goodie/goodie_basic_tutorial.md) - - [Triggers Overview](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/goodie/goodie_triggers.md) - - [Goodie Display](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/goodie/goodie_displaying.md) - - [Advanced Handle Functions](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/goodie/goodie_advanced_handle_functions.md) - - [Helpers](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/goodie/goodie_helpers.md) - - [Creating Cheat Sheets](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/goodie/goodie_cheat_sheets.md) - - [FAQ](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/resources/faq.md#goodie) - -- **Spice** - - [Overview](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/spice/spice_overview.md) - - [Basic Tutorial](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/spice/spice_basic_tutorial.md) - - [Triggers Overview](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/goodie/spice_triggers.md) - - [Spice Display](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/spice/spice_displaying.md) - - [More Spice Tutorials](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/spice/spice_frontend_walkthroughs.md) - - [Advanced Backend](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/spice/spice_advanced_backend.md) - - [Advanced Frontend](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/spice/spice_advanced_frontend.md) - - [JavaScript API Reference](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/spice/spice_js_api.md) - - [Perl API Reference](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/spice/spice_perl_api.md) - - [Spice Attributes](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/spice/spice_attributes.md) - - [FAQ](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/resources/faq.md#spice) - -- **Fathead** - - [Overview](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/fathead/fathead_overview.md) - - [Basic Tutorial](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/fathead/fathead_basic_tutorial.md) - - [FAQ](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/resources/faq.md#fathead) - -- **Longtail** - - [Overview](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/longtail/longtail_overview.md) - - [Basic Tutorial](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/longtail/longtail_basic_tutorial.md) - - [FAQ](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/resources/faq.md#longtail) - -- **Instant Answer Display** - - [Display Reference](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/instant-answer-display/display_reference.md) - - [Templates Overview](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/instant-answer-display/templates_overview.md) - - [Template Groups](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/instant-answer-display/template_groups.md) - - [Templates Reference](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/instant-answer-display/templates_reference.md) - - [Sub-templates](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/instant-answer-display/subtemplates.md) - - [Handlebars Helpers](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/instant-answer-display/handlebars_helpers.md) - - [Design Styleguide](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/instant-answer-display/design_styleguide.md) - -- **Testing** - - [Triggers](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/testing/testing_triggers.md) - - [Display (HTML/testing/.md)](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/testing/testing_html.md) - - [Test Files](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/testing/test_files.md) - - [Testing with the Location & Language APIs](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/testing/testing_location_language_apis.md) - -- **Submitting Your Instant Answer** - - [Preparing for a Pull Request](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/submitting-your-instant-answer/preparing_for_a_pull_request.md) - - [Metadata](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/submitting-your-instant-answer/metadata.md) - - [Submission and Review](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/submitting-your-instant-answer/submission_and_review.md) - -- **Advanced** - - [Language & Location APIs](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/advanced/language_and_location_apis.md) - -- **Resources** - - [Other Development Environments](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/resources/other_development_environments.md) - - [Code Styleguide](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/resources/code_styleguide.md) - - [Common Pitfalls](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/resources/common_pitfalls.md) - - [How to QA an Instant Answer](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/resources/how_to_qa.md) - - [Video Tutorials](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/resources/video-tutorials.md) - - [FAQ](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/resources/faq.md) diff --git a/duckduckhack/ddh-prev-next.json b/duckduckhack/ddh-prev-next.json index 1759f16a2..715c7d4c0 100755 --- a/duckduckhack/ddh-prev-next.json +++ b/duckduckhack/ddh-prev-next.json @@ -9,228 +9,5 @@ "next": ["determine_your_instant_answer_type.md"] }, - "determine_your_instant_answer_type.md": { - "prev": ["contributing.md"], - "next": ["setup_dev_environment.md"] - }, - - "setup_dev_environment.md": { - "prev": ["determine_your_instant_answer_type.md"], - "next": ["goodie_overview.md", "spice_overview.md", "fathead_overview.md", "longtail_overview.md"] - }, - - "goodie_overview.md": { - "prev": ["determine_your_instant_answer_type.md"], - "next": ["goodie_quickstart.md"] - }, - - "goodie_quickstart.md": { - "prev": ["goodie_overview.md"], - "next": ["goodie_basic_tutorial.md"] - }, - - "goodie_basic_tutorial.md": { - "prev": ["goodie_quickstart.md"], - "next": ["goodie_triggers.md"] - }, - - "goodie_triggers.md": { - "prev": ["goodie_basic_tutorial.md"], - "next": ["goodie_advanced_handle_functions.md"] - }, - - "goodie_displaying.md": { - "prev": ["goodie_triggers.md"], - "next": ["goodie_advanced_handle_functions.md"] - }, - - "goodie_advanced_handle_functions.md": { - "prev": ["goodie_triggers.md"], - "next": ["goodie_helpers.md"] - }, - - "goodie_helpers.md": { - "prev": ["goodie_advanced_handle_functions.md"], - "next": ["goodie_cheat_sheets.md"] - }, - - "goodie_cheat_sheets.md": { - "prev": ["goodie_helpers"], - "next": [] - }, - - "spice_overview.md": { - "prev": ["determine_your_instant_answer_type.md"], - "next": ["spice_basic_tutorial.md"] - }, - - "spice_basic_tutorial.md": { - "prev": ["spice_overview.md"], - "next": ["spice_triggers.md"] - }, - - "spice_triggers.md": { - "prev": ["spice_basic_tutorial.md"], - "next": ["spice_displaying.md"] - }, - - "spice_displaying.md": { - "prev": ["spice_triggers.md"], - "next": ["spice_frontend_walkthroughs.md"] - }, - - "spice_frontend_walkthroughs.md": { - "prev": ["spice_displaying.md"], - "next": ["spice_advanced_backend.md"] - }, - - "spice_advanced_backend.md": { - "prev": ["spice_frontend_walkthroughs.md"], - "next": ["spice_advanced_frontend.md"] - }, - - "spice_advanced_frontend.md": { - "prev": ["spice_advanced_backend.md"], - "next": ["spice_js_api.md"] - }, - - "spice_js_api.md": { - "prev": ["spice_advanced_frontend.md"], - "next": ["spice_perl_api.md"] - }, - - "spice_perl_api.md": { - "prev": ["spice_js_api.md"], - "next": ["spice_attributes.md"] - }, - - "spice_attributes.md": { - "prev": ["spice_perl_api.md"], - "next": ["testing_triggers.md"] - }, - - "fathead_overview.md": { - "prev": ["determine_your_instant_answer_type.md"], - "next": ["fathead_basic_tutorial.md"] - }, - - "fathead_basic_tutorial.md": { - "prev": ["fathead_overview.md"], - "next": ["testing_triggers.md"] - }, - - "longtail_overview.md": { - "prev": ["determine_your_instant_answer_type.md"], - "next": ["longtail_basic_tutorial.md"] - }, - - "longtail_basic_tutorial.md": { - "prev": ["longtail_overview.md"], - "next": [] - }, - - "display_reference.md": { - "prev": [], - "next": ["templates_overview.md"] - }, - - "templates_overview.md": { - "prev": ["display_reference.md"], - "next": ["template_groups.md"] - }, - - "template_groups.md": { - "prev": ["templates_overview.md"], - "next": ["templates_reference.md"] - }, - - "templates_reference.md": { - "prev": ["templates_overview.md"], - "next": ["subtemplates.md"] - }, - - "subtemplates.md": { - "prev": ["templates_reference.md"], - "next": ["handlebars_helpers.md"] - }, - - "handlebars_helpers.md": { - "prev": ["subtemplates.md"], - "next": ["design_styleguide.md"] - }, - - "design_styleguide.md": { - "prev": ["handlebars_helpers.md"], - "next": [""] - }, - - "testing_triggers.md": { - "prev": ["determine_your_instant_answer_type.md"], - "next": ["testing_html.md"] - }, - - "testing_html.md": { - "prev": ["testing_triggers.md"], - "next": ["test_files.md"] - }, - - "test_files.md": { - "prev": ["testing_html.md"], - "next": ["testing_location_language_apis.md"] - }, - - "testing_location_language_apis.md": { - "prev": ["test_files.md"], - "next": [] - }, - - "preparing_for_a_pull_request.md" : { - "prev" : ["testing_location_language_apis.md"], - "next" : ["metadata.md"] - }, - - "metadata.md": { - "prev": ["preparing_for_a_pull_request.md"], - "next": ["submission_and_review.md"] - }, - - "submission_and_review.md": { - "prev": ["metadata.md"], - "next": [] - }, - - "language_and_location_apis.md": { - "prev": [], - "next": ["testing_location_language_apis.md"] - }, - - "other_development_environments.md": { - "prev": [], - "next": ["code_styleguide.md"] - }, - - "code_styleguide.md": { - "prev": ["other_development_environments.md"], - "next": ["common_pitfalls.md"] - }, - - "common_pitfalls.md": { - "prev": ["code_styleguide.md"], - "next": ["how_to_qa.md"] - }, - - "how_to_qa.md": { - "prev": ["common_pitfalls.md"], - "next": ["video-tutorials.md"] - }, - - "video-tutorials.md": { - "prev": ["how_to_qa.md"], - "next": ["faq.md"] - }, - "faq.md": { - "prev": ["video-tutorials.md"], - "next": [] - } } diff --git a/duckduckhack/fathead/fathead_basic_tutorial.md b/duckduckhack/fathead/fathead_basic_tutorial.md deleted file mode 100644 index 1f6031d0d..000000000 --- a/duckduckhack/fathead/fathead_basic_tutorial.md +++ /dev/null @@ -1,232 +0,0 @@ -# Basic Fathead Tutorial - -In this tutorial, we'll be making a Fathead Instant Answer that shows example source code for a "Hello World" program in whatever language is specified by the user's query. The live Instant Answer looks like this: https://duckduckgo.com/?q=hello+world+scala. As discussed in [the Fathead overview](/duckduckhack/fathead_overview), our goal is to generate an output.txt, which will look something like this: - -###### output.txt (snippet) - -``` -hello world (python) A Hello World in python (python.py)
#!/usr/bin/env python\nprint "Hello World"\n https://github.com/leachim6/hello-world -hello world (postscript page) A Hello World in postscript_page (postscript_page.ps)
% run> gs -q postscript_page.ps\n/pt {72 div} def\n/y 9 def\n/textdraw {/Courier findfont 12 pt scalefont setfont 8 pt y moveto show} def\n\n72 72 scale\n0 0 0 setrgbcolor\n\n(Hello world!) textdraw\nshowpage\nquit https://github.com/leachim6/hello-world -hello world (perl) A Hello World in perl (perl.pl)
#!/usr/bin/perl\nprint "Hello World\\n";\n https://github.com/leachim6/hello-world -``` - -## Step 1: Write Perl module - -To begin, use your favourite text editor like [gedit](http://projects.gnome.org/gedit/), notepad, or [emacs](http://www.gnu.org/software/emacs/) to open `lib/DDG/Fathead/HelloWorld.pm` and type the following: - -```perl -package DDG::Fathead::HelloWorld; -# ABSTRACT: Provides an example "Hello World" program for a given programming language -``` - -Next, type the following [use statement](https://duckduckgo.com/?q=perl+use) to import [the magic](https://github.com/duckduckgo/duckduckgo/tree/master/lib/DDG) behind our Instant Answer system. - -```perl -use DDG::Fathead; -``` - -Next, we'll add some metadata fields. These should be self-explanatory, but for more information, please refer to [Metadata](/duckduckhack/metadata). - -```perl -primary_example_queries "hello world perl"; - -secondary_example_queries - "javascript hello world", - "hello world in c"; - -description "Hello World programs in many program languages"; - -name "HelloWorld"; - -icon_url "/i/www.github.com.ico"; - -source "GitHub"; - -code_url "https://github.com/duckduckgo/zeroclickinfo-fathead/tree/master/share/fathead/hello_world"; - -topics "geek", "programming"; - -category "programming"; - -attribution - twitter => ['https://twitter.com/jperla', 'jperla'], - web => ['http://www.jperla.com/blog', 'Joseph Perla']; -``` - -Finally, all Perl packages that load correctly should [return a true value](http://stackoverflow.com/questions/5293246/why-the-1-at-the-end-of-each-perl-package) so add a 1 on the very last line, and make sure to also add a newline at the end of the file. - -```perl -1; - -``` - -Our Perl package is now complete. The entire file should look like this: - -```perl -package DDG::Fathead::HelloWorld; -# ABSTRACT: Provides an example "Hello World" program for a given programming language - -use DDG::Fathead; - -primary_example_queries "hello world perl"; - -secondary_example_queries - "javascript hello world", - "hello world in c"; - -description "Hello World programs in many program languages"; - -name "HelloWorld"; - -icon_url "/i/www.github.com.ico"; - -source "GitHub"; - -code_url "https://github.com/duckduckgo/zeroclickinfo-fathead/tree/master/share/fathead/hello_world"; - -topics "geek", "programming"; - -category "programming"; - -attribution - twitter => ['https://twitter.com/jperla', 'jperla'], - web => ['http://www.jperla.com/blog', 'Joseph Perla']; - -1; - -``` - -## Step 2: Create a directory - -Every Fathead has a directory under share/fathead/ that contains all files except the one we just created. The name of the directory must be the name of the Perl module converted to [snake case](https://en.wikipedia.org/wiki/Snake_case). For this tutorial, we'll use `share/fathead/hello_world/`. - -## Step 3: Write the fetch.sh script - -Every Fathead Instant Answer requires a `fetch.sh` file. This shell script is invoked to fetch the remote data that we need in order to generate our output. For example, following script will clone a git repository that contains a collection of hello world source files: - -###### share/fathead/hello_world/fetch.sh - -```shell -#!/bin/sh - -git clone git://github.com/leachim6/hello-world.git download -``` - -In this case, the git repository is just a collection of source files; we'll need to do some parsing in order to get it into the format we need. Note that *git clone* is not the only way to fetch data. Most Fatheads use *curl* or *wget*. - -**Also Note:** All temporary files should be placed in the `download/` subdirectory within your Fathead's directory. For this example, that means `share/fathead/hello_world/download/`. *git* creates this subdirectory for us, but if your plugin uses a different tool, you make have to include `mkdir download` in your fetch script. - -## Step 4: Write the parsing script - -The data we just fetched needs to be parsed before we can use it, so we'll write a script to do that. Parse scripts can be written in any language, but please use a common language like Perl, Python, JavaScript, Go, or similar. The harder your script is to run, the harder it will be for us to integrate your Instant Answer into our environment, and the harder future maintenance will be. **Please keep things as simple and straightforward as possible.** - -**Note:** Our machines are running **Ubuntu 12.04**. These are the machines that will be used to test and run your parser, so **please make sure your language and dependencies are compatible with our environment**. - -Since Fatheads can have vastly different data sources, we can't tell you what is the best approach to parsing. We suggest you look through the [Fathead repository](https://github.com/duckduckgo/zeroclickinfo-fathead/tree/master/share/fathead) to get ideas from other developers. - -For the purposes of this tutorial, we're going to use Python to parse the git repository we just cloned. - -###### share/fathead/hello_world/parse.py - -```python -if __name__ == "__main__": - # setup logger - logging.basicConfig(level=logging.INFO,format="%(message)s") - logger = logging.getLogger() - - # dump config items - count = 0 - with open("output.txt", "wt") as output_file: - for filepath in glob.glob('download/*/*'): - _,filename = os.path.split(filepath) - # ignore some "languages" - if filename not in ['ls.ls', 'readlink.readlink', 'piet.png']: - - language,_ = os.path.splitext(filename) - with open(filepath, 'r') as f: - source = f.read() - source = source.replace('\\n', '~~~n') - source = source.replace('\n', '\\n') - source = source.replace('~~~n', '\\\\n') - source = source.replace('\t', '\\t') - - item = HelloWorldItem(language, filename, source) - if count % 10 == 0: - logger.info("%d languages processed" % count ) - - count += 1 - output_file.write(str(item)) - logger.info("Parsed %d domain rankings successfully" % count) -``` - -This uses a relatively simple loop, `for filepath in glob.glob('download/*/*'):` which iterates over each of the files in the repository our fetch script cloned into the `download/` directory. After doing some checks to make sure the files is a "Hello World" program, it opens the file, reads the file, escapes newline (`\n`) and tab (`\t`) characters and then then "parses" the file to create an `item` using the `HelloWorldItem` class: - -###### parse.py (continued) - -```python -class HelloWorldItem: - def __init__(self, language, filename, source): - self.language = language - self.filename = filename - self.source = source - - def __str__(self): - - fields = [ "hello world (%s)" % self.language, #title - "A", #type - "", - "", - "", #categories - "", - "", #see_also - "", - "", #external_links - "", - "", #images - "Hello World in %s (%s)
%s" % (self.language, self.filename, self.source), - "https://github.com/leachim6/hello-world" - ] - - output = "%s\n" % ("\t".join(fields)) - - return output -``` - -The `HelloWorldItem` class works by defining the string representation of itself, which we later use to print our object into `output.txt`: `output_file.write(str(item))`. - -The most important thing to note about the string representation function, `def __str__(self):`, is that it creates an array containing the relevant information we need to pass along to `output.txt`, which **includes a few blank lines to represent the optional output fields we have not used** and then joins them with tab characters (`\t`). It also appends a newline (`\n`) at the end of our built string. This string now represent a single line in our `output.txt` file and denotes the **title**, **abstract**, **synopsis** and the **source_url**. - -## Step 5: Write a wrapper for the parse script - -Since the parse script can be written in any language, we use a thin wrapper called `parse.sh` so we have a consistent name to execute. This is easy: - -###### parse.sh - -```shell -#!/bin/sh - -python parse.py -``` - -## Step 6 - -The last thing we need to write is a README.txt. This file is used to inform other developers and DuckDuckGo staff of any special considerations. At the very least, it should list dependencies required by your parse script. You may also want to mention known shortcomings, opportunities for future improvement, or anything else you think might be important. - -###### README.txt - -``` -Dependencies: - -Python 3 - -To install in Ubuntu 10.04 (Lucid): - -sudo apt-get install python3-minimal -``` - -## Step 7 - -You're done! The only thing left is to submit your Instant Answer for review. Please see [Preparing for a Pull Request](/duckduckhack/preparing_for_a_pull_request). - -**Note:** The duckpan server cannot (currently) run Fatheads. That means you can't run or test your plugin before submission. - diff --git a/duckduckhack/fathead/fathead_overview.md b/duckduckhack/fathead/fathead_overview.md deleted file mode 100644 index 5a4f71d57..000000000 --- a/duckduckhack/fathead/fathead_overview.md +++ /dev/null @@ -1,121 +0,0 @@ -# Fathead Instant Answers - -**If you have questions, [request an invite to our Slack team](mailto:QuackSlack@duckduckgo.com?subject=AddMe) and we'll be happy to chat!** - -Fatheads are key-value Instant Answers backed by a database. The keys of the database are typically words or phrases, and they are also used as the triggers for the Instant Answer. When a database key is queried, the corresponding row from the database is returned, which is typically a paragraph of text. Developing a Fathead Instant Answer entails writing a program that generates an **output.txt** file. This tab-delimited file indicates the keys and values for the database, as well as some other important information discussed below. The program may be written in Perl, Python, JavaScript, or Ruby, and if necessary, will be run periodically to keep the database current. - -The **output.txt** file that is generated will be consumed by the DuckDuckGo backend, cleaned up (details below) and then finally entered into an SQL database. - -## Structure - -Each Fathead Instant Answer has its own directory, which looks like this: - -- ``lib/DDG/Fathead/FatheadName.pm`` – a Perl file that lists some meta information about the Instant Answer - -- ``share/fathead/fathead_name/fetch.sh`` – a shell script called to fetch the data. - -- ``share/fathead/fathead_name/download/`` – a directory to hold temp files created by fetch.sh - -- ``share/fathead/fathead_name/parse.xx`` – the script used to parse the data once it has been fetched. .xx can be .pl, .py, .rb, .js, etc. depending on what language you use. - -- ``share/fathead/fathead_name/parse.sh`` – a shell script wrapper around parse.xx - -- ``share/fathead/fathead_name/README.txt`` – Please include any dependencies here, or other special instructions for people trying to run it. Currently, Fathead Instant Answers require some hand work by DuckDuckGo staff during integration. - -- ``share/fathead/fathead_name/output.txt`` – the output file. It generally should **not** be committed to github, but may be committed if it is small (<1MB). - -- ``share/fathead/fathead_name/data.url`` – an optional pointer to a URL in the cloud somewhere, which contains the data to process. - - -## Data File Format - -Please name the output file output.txt (tab delimited) but do not store the data file(s) in the repository (as noted above) unless it is under 1MB. - -The output file needs to use UTF-8 encoding so we can process it. Please make sure you write your parse scripts accordingly or we'll probably run into some problems getting it integrated. - -The output format from `parse.xx` depends on the type of content. In any case, it should be a tab delimited file, with one line per entry. Usually there is no need for newline characters, but if there is a need for some reason, escape them with a backslash like `\\\n`. If you want a newline displayed, use `
` - -Every line in the output file must contain thirteen fields, separated by tabs. Some of the fields may be empty. The fields are as follows: - - 1. Full article title. Must be unique across the data set of this Instant Answer. *This field is required.* Examples: `Perl` - - 2. Type of article. `A` for actual articles, `D` for disambiguation pages, or `R` for redirects. *This field is required.* - - 3. *For redirects only.* An alias for a title such as a common misspelling or AKA. The format is the full title of the Redirect, e.g., DuckDuckGo. Examples: `Duck Duck Go -> DuckDuckGo` - - 4. *Ignore.* - - 5. Categories. An article can have multiple categories, and category pages will be created automatically. An example of a category page can be seen at [http://duckduckgo.com/c/Procedural_programming_languages](http://duckduckgo.com/c/Procedural_programming_languages). Multiple categories must be separated by an escaped newline, `\\n`. Categories should generally end with a plural noun. Examples: `Procedural programming languages\\n` - - 6. *Ignore.* - - 7. Related topics. These will be turned into links in the Zero-click Info box. Examples: `[[Perl Data Language]]`. If the link name is different, `[[Perl Data Language|PDL]]`. - - 8. *Ignore.* - - 9. External links. These will be displayed first when an article is shown. The canonical example is an official site, which looks like ``[$url Official site]\\n``. You can have several, separated by an escaped newline, though only a few will be used. You can also have before and after text or put multiple links in one. Examples: ``Before text [$url link text] after text [$url2 second link].\\n`` - - 10. *For disambiguation pages only.* Content of disambiguation page. Should be a list, where each item is a link to a page followed by a one sentence description ending in a period. The items have to be separated by ``\n``. Examples: ``*[[Enum.value]], returns the value part of the Enum.\n*[[Pair.value]], returns the value part of the Pair.`` - - 11. Image. You can reference an external image that we will download and reformat for display. Examples: ``[[Image:$url]]`` - - 12. Abstract. This is the snippet info. It should generally be ONE readable sentence, ending in a period. Examples: ``Perl is a family of high-level, general-purpose, interpreted, dynamic programming languages.`` - - 13. URL. This is the full URL for the source. If all the URLs are relative to the main domain, this can be relative to that domain. Examples: `http://www.perl.org` - - - -An example snippet from parse.xx written in [Perl](https://duckduckgo.com/Perl) may look like this: - -```perl - -my $title = $line[0] || ''; -my $type = $line[1] || ''; -my $redirect = $line[2] || ''; -my $otheruses = $line[3] || ''; -my $categories = $line[4] || ''; -my $references = $line[5] || ''; -my $see_also = $line[6] || ''; -my $further_reading = $line[7] || ''; -my $external_links = $line[8] || ''; -my $disambiguation = $line[9] || ''; -my $images = $line[10] || ''; -my $abstract = $line[11] || ''; -my $source_url = $line[12] || ''; - -print "$title\t$type\t\t\t$categories\t\t$see_also\t\t$external_links\t$disambiguation\t$images\t$abstract\t$source_url\n"; -``` - -There is a pre-process script that is run on this output, which: - -* Drops duplicates (on `$title`). - -* Reduces `$abstract` to one sentence. - -* Drops records that look like spam. - -* Normalizes spacing. - -* Makes sure the `$abstract` ends in a sentence. - - -## Code Blocks - -If you want to include a code snippet or another pre-formatted example in the abstract, like the [perl](https://duckduckgo.com/?q=perl+open) Fathead, wrap the code block like this: - -```html -
code block goes here
-``` - -For multiline code snippets, use only `\n` to separate lines: - -```html -
foo\nbar\nbaz
-``` - -## Notes - -There should be no duplicates in the `$page` (first) variable. If you have multiple things named the same thing you have a number of options: - - make disambiguation pages - - put everything in one snippet - - pick the most general one diff --git a/duckduckhack/goodie/goodie_cheat_sheets.md b/duckduckhack/frontend-reference/cheat-sheet-reference.md similarity index 66% rename from duckduckhack/goodie/goodie_cheat_sheets.md rename to duckduckhack/frontend-reference/cheat-sheet-reference.md index 0c0210731..c385cee72 100644 --- a/duckduckhack/goodie/goodie_cheat_sheets.md +++ b/duckduckhack/frontend-reference/cheat-sheet-reference.md @@ -4,6 +4,8 @@ A popular (and perfect) use of Goodies is to create cheat sheets which are avail ![tmux cheat sheet](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Ftmux_cheat_sheet.png&f=1) +For detailed instructions on how to create a Cheat Sheet, follow any of the [Cheat Sheet Walkthroughs](#). + ## Cheat Sheet Ideas A cheat sheet is not always the best representation for your data. Sometimes, an Instant Answer is better built as a full Goodie or another type of Instant Answer. When thinking about your cheat sheet idea, think about what is useful to a searcher. Keyboard shortcuts, video game cheat codes, and similar data can be wonderfully useful as a cheat sheet. Here are some other cheat sheet Instant Answers we love: @@ -14,53 +16,19 @@ A cheat sheet is not always the best representation for your data. Sometimes, an [Harry Potter spells](https://duckduckgo.com/?q=harry+potter+spells+cheat+sheet&ia=cheatsheet) [Tennis info](https://duckduckgo.com/?q=tennis+cheat+sheet&ia=cheatsheet) -You can also [check out all the Cheat Sheets that others have made](https://duck.co/ia?q=cheat+sheet) to inspire you for another topic! - -## How to Add Your Cheat Sheet - -Once you have an [idea for a cheat sheet](#cheat-sheet-ideas), it's easy to add it to the DuckDuckGo Cheat Sheet Goodie. - -**The first step is to [set up your development environment](https://duck.co/duckduckhack/setup_dev_environment).** During setup [following the steps](https://duck.co/duckduckhack/setup_dev_environment) to set up your environment and choose the option to fork/clone the Goodies repository (where Cheat Sheets live). - -### Create a JSON File - -After cloning the Goodies repository, you simply need to add **one JSON file** to the existing `/json` folder in the [Cheat Sheets share directory](https://github.com/duckduckgo/zeroclickinfo-goodies/tree/master/share/goodie/cheat_sheets/json). - -To do this in Codio, use the left-hand panel to enter the `/zeroclickinfo-goodies` repository directory. Then use the file tree to click into the `/share/goodie/cheat_sheets` directory. Then click the **json** folder. - -Up in the **File menu**, click **"Create New File"**, and enter the name of your cheat sheet as a JSON file (make sure it's saving to the `cheat_sheets` directory). For example, if the trigger for your cheat sheet is "gopro cheat sheet" create a new file called `gopro.json`. - -Erase any pre-filled contents, and enter the values for your cheat sheet using the [cheat sheet JSON syntax](#cheat-sheet-json-syntax). Feel free to copy the code in the following section into your new file as a convenient template. - -Conveniently, with cheat sheets there's no need to create a new Instant Answer. There is also no need to edit the `CheatSheets.pm` file, `cheat_sheets.js`, or `cheat_sheets.css`. Simply save your new file, and proceed to test your work. +You can also [check out all the Cheat Sheets that others have made](https://duck.co/ia?q=cheat+sheet) to inspire you for another topic. -### Test Your Cheat Sheet +## Creating a Cheat Sheet -The next step is to test your code and make sure it works like you intended. To do this, we'll create a test server that will allow you to view your Instant Answer as it would appear above DuckDuckGo search results. +*For detailed instructions on how to create a Cheat Sheet, follow any of the [Cheat Sheet Walkthroughs](#).* -1. In Codio, open your Terminal by clicking on **Tools > Terminal**. -2. Change into the `zeroclickinfo-goodies` directory by typing `cd zeroclickinfo-goodies` at the command line. -3. Next, type **`duckpan server`** and press "**Enter**". The Terminal should print some text and let you know that the server is listening on port 5000. +All DuckDuckGo cheat sheets actually fall under one single Instant Answer - the Cheat Sheet Goodie. Each cheat sheet is defined in its own JSON file, in the [`/json`](https://github.com/duckduckgo/zeroclickinfo-goodies/tree/master/share/goodie/cheat_sheets/json) folder of the Cheat Sheet Goodie directory. - ``` - Starting up webserver... - You can stop the webserver with Ctrl-C - HTTP::Server::PSGI: Accepting connections at http://0:5000/ - ``` - -4. Click the "**DuckPAN Server**" button at the top of the screen. A new browser tab should open and you should see the DuckDuckGo Homepage. Type the name of your cheat sheet, plus **"cheat sheet"** and press "**Enter**". -5. You should see your cheat sheet show up in the search results! **Make sure it displays correctly; check that all escaped characters and code blocks appear as you intended.** -6. When you're done testing, go back to the Terminal, andpress "**Ctrl+C**" to shut down the DuckPAN Server. The Terminal should return to a regular command prompt. - -When your cheat sheet works like you want it to, you're ready to submit your contribution. - -### Submit Your Pull Request - -Submitting your cheat sheet is similar to submitting any Instant Answer contribution. New code is submitted using pull requests on GitHub. To make a pull request, follow the [submission and review instructions](https://duck.co/duckduckhack/submission_and_review). +That means there's no need to create a new Instant Answer. There is also no need to edit the `CheatSheets.pm` file, `cheat_sheets.js`, or `cheat_sheets.css`. Simply save your new JSON file, and proceed to test your work. ## How Are Cheat Sheets Triggered? -Triggering is built in to the main Cheat Sheets Goodie. When the name of your cheat sheet file is searched with any of the [built-in trigger words](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/CheatSheets.pm), your Instant Answer will be shown. +Triggering is already built in to the main Cheat Sheets Goodie. When the name of your cheat sheet file is searched together with any of the [built-in trigger words](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/CheatSheets.pm), your Instant Answer will be shown. For example, for the *vim* text editor, the Instant Answer will be triggered on: @@ -69,19 +37,21 @@ For example, for the *vim* text editor, the Instant Answer will be triggered on: - "vim *commands*" - "vim *guide*" - "vim *shortcuts*" -- ...and so on. View all terms in [CheatSheets.pm](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/CheatSheets.pm). +- ...and so on. + +*If you're curious you can view all terms listed in [CheatSheets.pm](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/CheatSheets.pm).* If you'd like to add more names for the subject of your cheat sheet (in addition to the file name), you can specify them in the `aliases` property of your cheat sheet JSON file. For example, if your cheat sheet file is `lord-of-the-rings.json`, a natural alias is 'LOTR'. For details check out the [Cheat Sheet JSON Reference](#cheat-sheet-json-reference). ## Cheat Sheet JSON Reference -Below is a summary of the [`vim.json`](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/share/goodie/cheat_sheets/vim.json) file, which displays a cheat sheet when searching for ["vim cheat sheet"](https://duckduckgo.com/?q=vim+cheat+sheet&ia=answer). +Below is a summary of the [`vim.json`](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/share/goodie/cheat_sheets/json/vim.json) file, which displays a cheat sheet when searching for ["vim cheat sheet"](https://duckduckgo.com/?q=vim+cheat+sheet&ia=answer). ![vim cheat sheet](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fvim_cheat_sheet.png&f=1) -The above Instant Answer was created by simply adding [`vim.json`](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/share/goodie/cheat_sheets/vim.json), explained below. +The above Instant Answer was created by simply adding [`vim.json`](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/share/goodie/cheat_sheets/json/vim.json), explained below. -**For convenience, we encourage you to copy the [`vim.json`](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/share/goodie/cheat_sheets/vim.json) code into your new file, as a starting point.** Copy the [raw file](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/share/goodie/cheat_sheets/vim.json), as the JSON below won't work due to inline comments. +**For convenience, we encourage you to copy the [`vim.json`](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/share/goodie/cheat_sheets/json/vim.json) code into your new file, as a starting point.** Copy the [raw file](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/share/goodie/cheat_sheets/json/vim.json), as the JSON below won't work due to inline comments. ```javascript { @@ -151,6 +121,8 @@ The above Instant Answer was created by simply adding [`vim.json`](https://githu We've seen a wonderfully wide variety of cheat sheets; we realized that one visual format doesn't fit all ideas. We've created an *optional* `template_type` property so you can pick the best look for your cheat sheet. +![Cheat sheet template types](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fcheatsheet-template-types.png&f=1) + Here are the available `template_type` values: - `keyboard` - the default (see it live at ["vim cheatsheet"](https://duckduckgo.com/?q=vim+cheatsheet&ia=cheatsheet)) @@ -158,8 +130,6 @@ Here are the available `template_type` values: - `code` - (see it live at ["regex cheatsheet"](https://duckduckgo.com/?q=regex+cheat+sheet&ia=cheatsheet)) - `reference` - (see it live at ["wu-tang cheatsheet"](https://duckduckgo.com/?q=wu-tang+cheat+sheet&ia=cheatsheet)) -![Cheat sheet template types](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fcheatsheet-template-types.png&f=1) - ### Syntax for `key` Property Cheat sheet actions often have several key combinations, which you can indicate in the syntax of each `key` property. diff --git a/duckduckhack/instant-answer-display/design_styleguide.md b/duckduckhack/frontend-reference/design-styleguide.md similarity index 100% rename from duckduckhack/instant-answer-display/design_styleguide.md rename to duckduckhack/frontend-reference/design-styleguide.md diff --git a/duckduckhack/instant-answer-display/display_reference.md b/duckduckhack/frontend-reference/display-reference.md similarity index 100% rename from duckduckhack/instant-answer-display/display_reference.md rename to duckduckhack/frontend-reference/display-reference.md diff --git a/duckduckhack/instant-answer-display/handlebars_helpers.md b/duckduckhack/frontend-reference/handlebars-helpers.md similarity index 100% rename from duckduckhack/instant-answer-display/handlebars_helpers.md rename to duckduckhack/frontend-reference/handlebars-helpers.md diff --git a/duckduckhack/goodie/goodie_displaying.md b/duckduckhack/frontend-reference/setting-goodie-display.md similarity index 88% rename from duckduckhack/goodie/goodie_displaying.md rename to duckduckhack/frontend-reference/setting-goodie-display.md index 4503c46e5..4bcc923cc 100644 --- a/duckduckhack/goodie/goodie_displaying.md +++ b/duckduckhack/frontend-reference/setting-goodie-display.md @@ -1,33 +1,18 @@ -# Displaying Your Goodie in the DuckDuckGo AnswerBar +# Displaying Your Goodie Instant Answer -The final step of providing your Goodie results is displaying them in the DuckDuckGo AnswerBar. +*Making a Cheat Sheet? Skip to the [Cheat Sheet Reference](#).* -## Setting Display Properties in a Goodie - -Goodies are displayed according to a set of properties which can (mostly) be defined in each Goodie's Perl file. These options are returned as a hash called `structured_answer` when the Perl file finishes running. This hash is returned alongside the `$plaintext` string version of your Goodie result, used for the API): +The final step in every Instant Answer is displaying it to the user. All Instant Answers display in the "AnswerBar", which is the area above the organic search results. The way each Instant Answer is displayed and behaves is determined by a set of [display options](#) and [events](https://duck.co/duckduckhack/display_reference#events). This document shows you how to set these options for a Goodie. -```perl -return $plaintext, - structured_answer => { - ... - }; -``` +[Screenshot of answerbar just like spice] -For an example of how this works, take a look at the final return statement of the [BPM to ms](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/BPMToMs.pm) Goodie Perl file. - -Specifying options in Perl is the most straightforward method, but there are several optional properties that cannot be specified on the server-side. These must be [specified in the Goodie's frontend](#setting-goodie-display-properties-in-the-frontend), in a JavaScript file. - -## Available Options - -The properties you can return in your `structured_answer` hash are documented in the [Instant Answer Display Reference](https://duck.co/duckduckhack/display_reference). This document provides an in-depth overview of all that the Instant Answer framework allows you to set. - -In some scenarios, you may also want to handle the AnswerBar's events (for example, to stop media playing when the user hides your Instant Answer). These [events](https://duck.co/duckduckhack/display_reference#events) are covered at the end of the reference. +## Setting Display Properties in a Goodie -### Where Display Properties Can Be Set +*If your Goodie is very simple, consider passing a [structured response](#easy-structured-responses) instead.* -Most display properties can be set in either the Goodie's Perl (server code) or JavaScript (frontend). Some Display properties, by their nature, can only [be set in the frontend](#setting-goodie-display-properties-in-the-frontend). +When developing a Goodie, display options can be set either in your backend (Perl) or frontend (JavaScript) code. Most display properties can be set in either. Some Display properties, by their nature, can only [be set in the frontend](#setting-goodie-display-properties-in-the-frontend). -Here is a quick summary: +Here is a quick summary of the break down of [display options](#): @@ -113,9 +98,24 @@ Here is a quick summary: [Events](https://duck.co/duckduckhack/display_reference#events)| |✓ --> -## Setting Display Properties in a Goodie's Perl +## Setting Display Options on the Backend -The following is a code summary of how the options covered in the [Instant Answer Display Reference](https://duck.co/duckduckhack/display_reference) are returned in your Goodie Perl file. +*If your Goodie is very simple, consider passing a [structured response](#easy-structured-responses) instead.* + +Most options can be defined in the Goodie's backend, the Perl file. These options are set by returning as a hash called `structured_answer` when the Perl file finishes running. This hash is returned alongside the `$plaintext` string version of your Goodie result, used for the API): + +```perl +return $plaintext, + structured_answer => { + ... + }; +``` + +For an example of how this works, take a look at the final return statement of the [BPM to ms](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/BPMToMs.pm) Goodie Perl file. + +Specifying options in Perl is the most straightforward method, but there are several optional properties that cannot be specified on the server-side. These must be [specified in the Goodie's frontend](#setting-goodie-display-properties-in-the-frontend), in a JavaScript file. + +The following is a code summary of how the options covered in the [Instant Answer Display Reference](https://duck.co/duckduckhack/display_reference) are returned in your Goodie Perl file: ```perl return $plaintext, @@ -167,7 +167,7 @@ return $plaintext, For more information on each property and its usage, visit the [Instant Answer Display Reference](https://duck.co/duckduckhack/display_reference). -## Setting Goodie Display Properties in the Frontend +## Setting Goodie Display Options on the Frontend While most display properties can be set in a Goodie's Perl file, others by their nature must be specified in the frontend part of the code. These are: @@ -266,7 +266,6 @@ You might use Goodie JavaScript to create an in-browser game related to certain Feel free to reach out and ask us any questions, over at [open@duckduckgo.com](mailto:open@duckduckgo.com) - ## Easy Structured Responses Many Goodies are simple operations that return a string response. For example, the [Flip Text Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/FlipText.pm): diff --git a/duckduckhack/spice/spice_displaying.md b/duckduckhack/frontend-reference/setting-spice-display.md similarity index 77% rename from duckduckhack/spice/spice_displaying.md rename to duckduckhack/frontend-reference/setting-spice-display.md index b4b91a76b..22bc9be6a 100644 --- a/duckduckhack/spice/spice_displaying.md +++ b/duckduckhack/frontend-reference/setting-spice-display.md @@ -1,4 +1,6 @@ -# Adding Your Spice to the DuckDuckGo AnswerBar +# Displaying Your Spice Instant Answer + +The final step in every Instant Answer is displaying it to the user. All Instant Answers display in the "AnswerBar", which is the area above the organic search results. The way each Instant Answer is displayed and behaves is determined by a set of [display options](#) and [events](https://duck.co/duckduckhack/display_reference#events). This document shows you how to set these options for a Spice. Once your Instant Answer has been triggered, and the API request has returned a response to the client, the final step is to display your results onscreen. @@ -6,9 +8,9 @@ Once your Instant Answer has been triggered, and the API request has returned a ## Contents of the Spice Frontend Callback -The Spice frontend callback function, [covered in the Spice Basic Tutorial](https://duck.co/duckduckhack/spice_basic_tutorial#npm-spice-frontend-javascript), contains the code which displays your Spice. +The Spice frontend (Javascript) contains a callback which receives the results of the API call, and then displays your Spice. For an example of how the Spice frontend callback works, check out the [forum lookup](#) walkthrough. -The most important part of this callback, and often the only part, is calling [`Spice.add()`](#codespiceaddcode-overview). This function is powerful and gives you a lot of control over your results' appearance, context, and user interactions. +The most important part of this callback, and often the only part, is calling [`Spice.add()`](#codespiceaddcode-overview). This function gives you a lot of control over your results' appearance, context, and user interactions. ## Available Options diff --git a/duckduckhack/instant-answer-display/subtemplates.md b/duckduckhack/frontend-reference/subtemplates.md similarity index 100% rename from duckduckhack/instant-answer-display/subtemplates.md rename to duckduckhack/frontend-reference/subtemplates.md diff --git a/duckduckhack/instant-answer-display/template_groups.md b/duckduckhack/frontend-reference/template-groups.md similarity index 100% rename from duckduckhack/instant-answer-display/template_groups.md rename to duckduckhack/frontend-reference/template-groups.md diff --git a/duckduckhack/instant-answer-display/templates_overview.md b/duckduckhack/frontend-reference/templates-overview.md similarity index 100% rename from duckduckhack/instant-answer-display/templates_overview.md rename to duckduckhack/frontend-reference/templates-overview.md diff --git a/duckduckhack/instant-answer-display/templates_reference.md b/duckduckhack/frontend-reference/templates-reference.md similarity index 100% rename from duckduckhack/instant-answer-display/templates_reference.md rename to duckduckhack/frontend-reference/templates-reference.md diff --git a/duckduckhack/function-hacks/calculation.md b/duckduckhack/function-hacks/calculation.md new file mode 100644 index 000000000..c85baa413 --- /dev/null +++ b/duckduckhack/function-hacks/calculation.md @@ -0,0 +1 @@ +# How to Make a Calculation Tool \ No newline at end of file diff --git a/duckduckhack/function-hacks/tool.md b/duckduckhack/function-hacks/tool.md new file mode 100644 index 000000000..e528ee1de --- /dev/null +++ b/duckduckhack/function-hacks/tool.md @@ -0,0 +1,3 @@ +# How to Make a Tool Function + +(Timer) \ No newline at end of file diff --git a/duckduckhack/function-hacks/transformation.md b/duckduckhack/function-hacks/transformation.md new file mode 100644 index 000000000..5494b00a8 --- /dev/null +++ b/duckduckhack/function-hacks/transformation.md @@ -0,0 +1 @@ +# How to Make a Transformation Tool \ No newline at end of file diff --git a/duckduckhack/getting-started/contributing.md b/duckduckhack/getting-started/contributing.md deleted file mode 100644 index b55fb517a..000000000 --- a/duckduckhack/getting-started/contributing.md +++ /dev/null @@ -1,83 +0,0 @@ -# How Can I Contribute? - -There are several options for contributing to DuckDuckHack, explained below. If you have any questions at any point, feel free to ask on one of our community channels: - -- [Request invite to our Slack team](mailto:QuackSlack@duckduckgo.com?subject=AddMe) -- [DuckDuckHack mailing list](https://duck.co/redir/?u=https%3A%2F%2Fwww.listbox.com%2Fsubscribe%2F%3Flist_id%3D197814) -- Do not hesitate to email us directly at [open@duckduckgo.com](mailto:open@duckduckgo.com). - -## New? Make Your First Contribution Today - -If this is your first time contributing to [DuckDuckHack](http://www.duckduckhack.com), you have two great ways to quickly make your first commit: - -**1. Make a [Cheat Sheet](https://duck.co/duckduckhack/goodie_cheat_sheets)** - -Cheat sheets are a super-easy way to contribute to the live DuckDuckGo AnswerBar very quickly, by editing a single file. Cheat sheets can be about anything, from Emacs and Vim to Game of Thrones house names or wine pairings. - -**2. Create a simple, complete "Hello World" Goodie with our [Quick Start Tutorial](https://duck.co/duckduckhack/goodie_quickstart)** - -This short tutorial will lead you through all the parts of building a full-loop Goodie. This is a perfect place to start if you have an idea for an original Instant Answer. - -## Create a New Instant Answer - -Once you're comfortable with the workflow and how Goodies work, we're excited to have you create your own original Instant Answer: - -**1. Choose an idea** - -Bring your own idea, or check out the ideas forum - especially [top voted answer ideas](https://duck.co/ideas/status/3?table_lnKRpLENwO2NUmZUyukQpw_sort=votes). - -Think of the searches you do most often: - -- What has always frustrated you about the results? -- What do you wish "just worked?" -- Is there a website or source of data that would help answer most/all of those searches? - -For additional inspiration, we recommend browsing examples of [live Instant Answers](https://duck.co/ia). - -**2. Plan your implementation** - -The first step is to research and plan your Instant Answer. Consider [the best way to implement](https://duck.co/duckduckhack/determine_your_instant_answer_type) your idea, and review the [docs and guidelines](https://duck.co/duckduckhack/ddh-intro) that apply. - -**3. Involve us** - -Before you start coding, [let us know your plans](mailto:open@duckduckgo.com). By involving us early we can provide guidance and potentially save you a lot of time and effort. Email us at [open@duckduckgo.com](mailto:open@duckduckgo.com) with what idea you're working on and how you're thinking of going about it. - -In addition, we'll promptly set up a [central Instant Answer page](http://www.duck.co/ia) on the community platform so others can know you're working on it and how they can help you. - -This sample will help you craft your message: - -```text -To: open@duckduckgo.com -Subject: Awesome Instant Answer Idea - -I'd like to make an Instant Answer to help people searching for ! -When someone searches for , it would be cool if they could see . -I'm going to accomplish this with a type Instant Answer. -This is the data source: . -This is the related Duck.co idea: . -This is my Github username: . - -Thanks! - -PS: DuckDuckGo is awesome! -``` - -## Improve an Existing Instant Answer - -Another great way to contribute is to improve an existing, live Instant Answer. It's a great way to get further acquainted with Instant Answers, as well as get implementation ideas. (Many contributors report completing their first fix within two hours of forking the repository!) - -**1. Choose a "low-hanging fruit"** - -We've made sure to identify these throughout our repositories for new contributors. - -- [Goodie Low Hanging Fruit](https://github.com/duckduckgo/zeroclickinfo-goodies/issues?q=is%3Aopen+is%3Aissue+label%3A%22Low-Hanging+Fruit%22) ([Goodie docs](https://duck.co/duckduckhack/goodie_overview)) -- [Spice Low Hanging Fruit](https://github.com/duckduckgo/zeroclickinfo-spice/issues?q=is%3Aopen+is%3Aissue+label%3A%22Low-Hanging+Fruit%22) ([Spice docs](https://duck.co/duckduckhack/spice_overview)) - -**2. Dive in** - -Go ahead and comment on any issues you're interested in helping with. Let us know what you're thinking and if you'd like any help or guidance. - -As always, feel free to [ask us anything](mailto:open@duckduckgo.com), and don't forget the handy [Instant Answer documentation](https://duck.co/duckduckhack/ddh-intro). - - - diff --git a/duckduckhack/getting-started/ddh-intro.md b/duckduckhack/getting-started/ddh-intro.md deleted file mode 100644 index 09658c7f7..000000000 --- a/duckduckhack/getting-started/ddh-intro.md +++ /dev/null @@ -1,24 +0,0 @@ -# Welcome to DuckDuckHack! - -We are a community of DuckDuckGo users who help improve the search engine with, "Instant Answers". To get started, please [request an invite to our Slack team](mailto:QuackSlack@duckduckgo.com?subject=AddMe). You may join multiple Slack channels to discuss your Instant Answer ideas with others who may have the same interests! - -- [Request Slack invite](mailto:QuackSlack@duckduckgo.com?subject=AddMe) - -You may also wish to join our DuckDuckHack Dev's email list (low traffic): - -- [DuckDuckHack developer mailing list](https://www.listbox.com/subscribe/?list_id=197814) - - -## What are Instant Answers? - -Instant Answers help you find what you're looking for in few or zero clicks. They're placed above ads and regular search results, and they're created/maintained by you (the community). Some Instant Answers are built from pure code and others require external sources (API requests), databases, or key-value stores. The possibilities are endless but the point is to provide a perfect result for every search. - -![App search Instant Answer example](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fapp_search_example.png&f=1) - -In the above example, [Quixey](http://quixey.com/) was a source that our own DuckDuckHack Community suggested for mobile app search. Now, any time someone searches for apps on DuckDuckGo, we request information directly from Quixey to help answer the search. - -To see just how simple it is to contribute an Instant Answer, check out David Farrell's PerlTricks post: [Writing Instant Answers is Easy](http://perltricks.com/article/169/2015/4/20/Writing-DuckDuckGo-instant-answers-is-easy). - -In these docs, we'll show you how to build Instant Answers that can do this and more. Start by reading about [ways to contribute](https://duck.co/duckduckhack/contributing). - - diff --git a/duckduckhack/getting-started/determine_your_instant_answer_type.md b/duckduckhack/getting-started/determine_your_instant_answer_type.md deleted file mode 100644 index c9705b50d..000000000 --- a/duckduckhack/getting-started/determine_your_instant_answer_type.md +++ /dev/null @@ -1,19 +0,0 @@ -# Determine Your Instant Answer Type - -The first step to planning your Instant Answer is deciding what type it is. Instant Answer type depends on how the result is obtained. - -Most Instant Answers rely on some type of data source (e.g. database, text file, API) to provide their answer. Others however, are able to provide their answer through the use of pure code, like a pre-existing Perl package on CPAN or simply a script you write (e.g. a string manipulation function). - -**Before you start coding, let us know your plans, and what Instant Answer type you'd like to use.** By involving us early we can provide guidance and potentially save you a lot of time and effort. Email us at [open@duckduckgo.com](mailto:open@duckduckgo.com) with what idea you're working on and how you're thinking of going about it. - -The following flowchart will help you to think about what type of Instant Answer you'll be creating, which is based on your Instant Answer's data source: - -![Instant Answer type flow chart](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Finstant_answer_flowchart.png&f=1) - - - -If you were able to determine your Instant Answer type, then you're ready to [setup your development environment](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/getting-started/setup_dev_environment.md)! - ------- - -If the right Instant Answer type is still not obvious, don't worry, the DuckDuckGo Community is here for you! Please visit our [Instant Answer Ideas Forum](https://dukgo.com/ideas) and post a new thread for your Instant Answer. Be sure to describe the Instant Answer you have in mind, and don't forget to indicate where you think the data should come from. Someone from the community or the DuckDuckGo staff will be able to help you determine the best course of action for you. diff --git a/duckduckhack/goodie/goodie_advanced_handle_functions.md b/duckduckhack/goodie/goodie_advanced_handle_functions.md deleted file mode 100644 index 028be4fdd..000000000 --- a/duckduckhack/goodie/goodie_advanced_handle_functions.md +++ /dev/null @@ -1,65 +0,0 @@ -# Advanced Handle Functions - -## Further Qualifying the Query - -Trigger words are coarse filters; they may send you queries you cannot handle. Your Instant Answer should return nothing in these cases. As such, you generally need to further qualify the query in your code. - -There are many techniques for doing this qualification. One of the most popular is to `return` as soon as a query can be disqualified. - -As an example, the [Base Goodie's](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Base.pm) has a `return` statement paired with an `unless` right on the first line of its `handle` function: - -```perl -handle remainder => sub { - return unless /^([0-9]+)\s*(?:(?:in|as)\s+)?(hex|hexadecimal|octal|oct|binary|base\s*([0-9]+))$/; - ... -} -``` - -## Using Files in the Share Directory - -Goodies can use simple text or html input files for display or processing. These files can be read once and reused to answer many queries without cluttering up your source code. - -The `share` function gives each Instant Answer access to a subdirectory of the repository's `share` directory. The subdirectory for your Instant Answer is based on its Perl package name which is transformed from CamelCase to underscore_separated_words. - - - -For example the [Passphrase Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Passphrase.pm) uses the `share` directory to hold data for processing purposes: - -```perl -my @words = share('words.txt')->slurp; -``` - -Here the `share` function grabs the `words.txt` file, found in `zeroclickinfo-goodies/share/goodie/passphrase/`. The returned object's `slurp` method is called which pushes each line of the file into the `@words` array. - -In another case, the [PrivateNetwork Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/PrivateNetwork.pm) uses its `share` directory to hold files for display purposes: - -```perl -my $text = scalar share('private_network.txt')->slurp, -my $html = scalar share('private_network.html')->slurp; - -handle sub { - $text, html => $html; -}; -``` - -Here each file is grabbed from `share/goodie/private_network/` and `slurp`ed in a `scalar` context. This returns the entire file as a **string** and assigns it to the appropriate variable. In the `handle` function, `$text` and `$html` are returned to display as plain text or HTML Instant Answer. - -One further consideration is whether your data file contains non-ASCII characters. If so, you will want to prepare the file with UTF-8 encoding. The [Shortcut Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Shortcut.pm) uses a UTF-8 data file: - -```perl -my @shortcuts = share('shortcuts.csv')->slurp(iomode => '<:encoding(UTF-8)'); -``` - -As with the Passphrase Goodie example above, each line becomes an entry in the resulting array. With this `iomode` set, the UTF-8 characters used to denote system-specific keys will be handled properly throughout the rest of the processing. - -## Generating Data Files - -In some cases, you may need to generate the data files you will `slurp` from the share directory. If so, please put the required generation scripts in the Goodie's `share` directory. While **shell scripts are preferred**, your scripts can be written in the language of your choice. - -As an example, the [CurrencyIn Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/CurrencyIn.pm) uses a [combination of Shell and Python scripts](https://github.com/duckduckgo/zeroclickinfo-goodies/tree/master/share/goodie/currency_in) to generate its input data, `currency.txt`. - -## Stylesheets - -Goodies can load custom stylesheets by adding a `.css` file to their `share` directory, with a filename identical to the parent directory. Goodie stylesheets will be automatically included along with the Goodie's output when triggered. For example, the [RegexCheatSheet Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/RegexCheatSheet.pm) uses the directory `share/goodie/regex_cheat_sheet` which contains a [custom stylesheet](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/share/goodie/regex_cheat_sheet/regex_cheat_sheet.css). - -**Note:** Custom stylesheets should be used sparingly and only when absolutely necessary. \ No newline at end of file diff --git a/duckduckhack/goodie/goodie_basic_tutorial.md b/duckduckhack/goodie/goodie_basic_tutorial.md deleted file mode 100644 index aa1cb03c6..000000000 --- a/duckduckhack/goodie/goodie_basic_tutorial.md +++ /dev/null @@ -1,176 +0,0 @@ -## Basic Goodie Tutorial - -**If you've already completed the [Quick Start](https://duck.co/duckduckhack/goodie_quickstart)**, you are well prepared for this section. Here you will learn more about all the things you can do with Goodie. While many of the steps will be familiar, we recommend starting from step one and creating a new Goodie from scratch. - -This tutorial will show you how to build a Goodie Instant Answer from scratch. If you've already completed the [Quick Start](https://duck.co/duckduckhack/goodie_quickstart), this tutorial is a great next step for getting more comfortable with creating Goodies. - -_Stuck on something? Got a question? Shoot us an email at **open@duckduckgo.com** and we'll jump at the chance to help._ - -## Let Us Know What You're Working On - -**Before you start coding your new Instant Answer, let us know your plans.** By involving us early we can provide guidance and potentially save you a lot of time and effort. - -Email us at [open@duckduckgo.com](mailto:open@duckduckgo.com) with what idea you're working on and how you're thinking of going about it. - -## Automatically Generate Your Goodie Files - -The following tutorial will walk through each file and line of code necessary to build and test the example Goodie. However, for building your *own* Instant Answer, we've created a tool that **automatically creates the necessary boilerplate files**, with all of the correct naming conventions. - -The `duckpan new` tool will create the following Goodie files for you automatically, with the correct paths and naming conventions inside each file: - -- The backend Perl file with the right name, in the `DDG/Goodie/` directory -- The test file, in the `t/` testing directory - -*Currently the `duckpan new` command does not automatically generate any [Goodie frontend files](https://duck.co/duckduckhack/goodie_displaying#setting-goodie-display-properties-in-the-frontend)*. - -This allows you to focus on what makes your Goodie unique. To use this tool, follow these instructions: - -1. After [setting up your environment](https://duck.co/duckduckhack/setup_dev_environment), open your Terminal and enter the root directory of your local repository, `zeroclick-goodies\`. -2. At the command line, type `duckpan new` and hit enter. -3. When prompted, enter what you want to call your Goodie. - - *For example, `volume conversion`. (White spaces and character casing are automatically formatted.)* - -4. You will see a list of the boilerplate files created for you, each with the proper naming conventions already done: - - ``` - [10:08 PM ... zeroclickinfo-goodies {master}]$ duckpan new - Please enter a name for your Instant Answer : volume conversion - Created file: lib/DDG/Goodie/VolumeConversion.pm - Created file: t/VolumeConversion.t - Successfully created Goodie: VolumeConversion - ``` - -Congratulations! You've breezed through a lot of typing, files, and naming conventions. In the following tutorial, we'll explain each line of code and how to customize it to your Instant Answer idea. - -## The Chars Goodie - -In this tutorial, we'll be making a Goodie Instant Answer that checks the number of characters in a given search query. The end result, [chars.pm](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Chars.pm) works [like this](https://duckduckgo.com/?q=chars+How+many+characters+are+in+this+sentence%3F) and will contain the following: - -```perl -package DDG::Goodie::Chars; -# ABSTRACT: Give the number of characters (length) of the query. - -use DDG::Goodie; - -triggers start => 'chars'; - -handle remainder => sub { - return 'Chars: ' . length $_ if $_; - return; -}; -1; -``` - -Let's go through the Chars Goodie line by line. - -## Naming our Goodie Package - -To begin, open your favourite text editor like [gedit](http://projects.gnome.org/gedit/), notepad or [emacs](http://www.gnu.org/software/emacs/) and type the following: - -```perl -package DDG::Goodie::Chars; -# ABSTRACT: Give the number of characters (length) of the query. -``` - - - -Each Instant Answer is a [Perl package](https://duckduckgo.com/?q=perl+package), so we start by declaring the package namespace. For brand new development, you would change **Chars** to the name of the Instant Answer (written in [CamelCase](https://duckduckgo.com/?q=camelcase) format). - -The second line is a special comment line that is used for documentation purposes. - -## Import the Goodie Class - -Next, type the following [use statement](https://duckduckgo.com/?q=perl+use) to import [the magic behind](https://github.com/duckduckgo/duckduckgo/tree/master/lib/DDG) our Instant Answer system. - -```perl -use DDG::Goodie; -``` - -**Note:** Right after the above line, you should include any Perl modules that you'll be leveraging to help generate the answer. **Make sure** you add those modules to the `dist.ini` file in this repository. If you're not using any additional modules, carry on! - -## Define the Trigger Word(s) - -On the next line, type: - -```perl -triggers start => 'chars'; -``` - -**triggers** are keywords/phrases that tell us when to make the Instant Answer run. When a particular *trigger word* (or phrase) appears in a search query, the DuckDuckGo engine knows that *triggering* the Instant Answer may *handle* the query. - -In this case there is one trigger word: "**chars**". - -Let's say someone searched "**chars this is a test**". **chars** is the *first* word, so it would trigger our Goodie because the **start** keyword says, "Make sure the *trigger word* is at the *start* of the query." - -There are several other keywords like **start** which will be covered shortly. The **=>** symbol is there to separate the trigger words from the keywords (for readability). - -## Define the Handle Function - -Moving on, enter this on the next line: - -```perl -handle remainder => sub { -``` - -Once triggers are specified, we define how to *handle* the query. `handle` is another keyword, similar to **triggers**. - -You can *handle* different parts of the search query, but the most common is the **remainder**, which refers to the remainder of the query, after the first matched trigger word/phrase has been removed. - - - -For example, if the query was "**chars this is a test**", the trigger would be *chars* and the remainder would be *this is a test*. - -Now let's add a few more lines to complete the handle function: - -```perl -handle remainder => sub { - return 'Chars: ' . length $_ if $_; - return; -}; -``` - -This function (the part within the **{}**, after **sub**) is the most important part of the Goodie. It defines the Instant Answer that will be displayed at the top of the [search results page](https://duckduckgo.com/?q=chars+this+is+a+test). - -Whatever you are handling is passed to the function in the **$\_** variable ( **$\_** is a special default variable in Perl that is commonly used to store temporary values). For example, if you searched DuckDuckGo for *"chars this is a test"*, the value of **$\_** will be *"this is a test"*, i.e. the remainder. - -Let's take a closer look at the first line of the function: - -```perl -return 'Chars: ' . length $_ if $_; -``` - -The heart of the function is just this one line. The **remainder** is in the **$\_** variable as discussed. If it is not blank ( **if $\_** ), we return the number of chars using Perl's built-in [length function](https://duckduckgo.com/?q=perl+length). - -Perl has a lot of built-in functions, as well as thousands of modules available [via CPAN](https://metacpan.org/). You can leverage these modules when making Goodies, similar to how the [Roman Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Roman.pm) uses the [Roman module](https://metacpan.org/module/Roman). - -If we are unable to provide a good Instant Answer, we simply **return nothing**. That's exactly what the second line in the function does. - -```perl -return; -``` - -This line is only run if **$\_** contained nothing, because otherwise the line before it would return something and end the function execution. - - -## Return True at EOF - -Finally, all Perl packages that load correctly should [return a true value](http://stackoverflow.com/questions/5293246/why-the-1-at-the-end-of-each-perl-package) so add a 1 on the very last line, and make sure to also add a newline at the end of the file. - -```perl -1; - -``` - -And that's it! At this point you have a working Goodie Instant Answer. - -## Recap -The Instant Answer system works like this at the highest level: - -- We break the query (search terms) down into separate words, which is a process that happens in the background. - -- We see if any of those words or groups of words are **triggers** for any Instant Answers. These **triggers** are defined by the developer when creating an Instant Answer. In the example we used above, the trigger word is "**chars**". - -- If a Goodie is triggered, we run its `handle` function. - -- If the Goodie's handle function outputs an Instant Answer via a **return** statement, we display it at the top of the SERP (search engine results pages). diff --git a/duckduckhack/goodie/goodie_overview.md b/duckduckhack/goodie/goodie_overview.md deleted file mode 100644 index 20475d3cf..000000000 --- a/duckduckhack/goodie/goodie_overview.md +++ /dev/null @@ -1,37 +0,0 @@ -## Goodie Instant Answers - -**If you have questions, [request an invite to our Slack team](mailto:QuackSlack@duckduckgo.com?subject=AddMe) and we'll be happy to chat!** - -Goodies are pure-code Instant Answers. They are essentially a Perl function that is evaluated on our servers, and do not make external HTTP requests to other services. - -Goodies can be extremely simple, such as the [Uppercase](https://duckduckgo.com/?q=uppercase+duckduckgo+instant+answers) Goodie, which simply uses the perl `uc` function to uppercase a string. - -Goodies can also be extremely complex and powerful such as the [Calculator](https://duckduckgo.com/?q=%28879+*+14%29+%2F+12) or [Timezone Converter](https://duckduckgo.com/?q=4pm+EST+to+GMT) Goodies. Contributors have used Goodies to do additional cool things like [generate passwords](https://duckduckgo.com/?q=password+15+strong&ia=answer) and [create QR codes](https://duckduckgo.com/?q=qr+duckduckhack.com&ia=answer). - -### Goodie Quick Start - -If you're new to DuckDuckHack or Perl, writing a simple Goodie Instant Answer is probably the quickest and easiest way to get started with DuckDuckHack. The Goodie [Quick Start Tutorial](https://duck.co/duckduckhack/goodie_quickstart) was created to help you dive right in. - -The [Goodie Quick Start](https://duck.co/duckduckhack/goodie_quickstart) is a hands-on, simple way to understand the Goodie framework, going from zero to a working Instant Answer. It's the best preparation for contributing to DuckDuckHack. - -### Create a Goodie Cheat Sheet - -A popular use of Goodies is creating cheat sheet Instant Answers - for example, a cheat sheet for [vim](https://duckduckgo.com/?q=vim+cheat+sheet&ia=answer) or [tmux](https://duckduckgo.com/?q=tmux+cheat+sheet&ia=answer). We've made it exceptionally quick and easy to [contribute a Cheat Sheet](https://duck.co/duckduckhack/goodie_cheat_sheets) by adding a single file to the repository. - -![vim cheat sheet](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fvim_cheat_sheet.png&f=1) - -Goodie Cheat Sheets are the quickest way to make a live contribution, and a great place to get started. Learn more about [adding your Goodie Cheat Sheet](https://duck.co/duckduckhack/goodie_cheat_sheets). - -## Important Goodie Criteria - -- Goodies ***cannot* make HTTP requests**. If it's better served by an external API, it should probably be a [Spice Instant Answer](https://duck.co/duckduckhack/spice_overview). -- Goodies should return an answer in **less than 10ms**. Execution times between 10-50ms require review by the community. Goodies which run longer than 50ms will not be accepted. -- Goodies should use **less than 1MB** in memory. Memory usage greater than 1MB will require review by the community. - -Most Goodies shouldn't have a problem, but if you think your idea might run into these constraints, we're happy to help you think through it. Feel free to email us at [open@duckduckgo.com](mailto:open@duckduckgo.com). - -## Let Us Know What You're Working On - -**Before you start coding your new Instant Answer, let us know your plans.** By involving us early we can provide guidance and potentially save you a lot of time and effort. - -Email us at [open@duckduckgo.com](mailto:open@duckduckgo.com) with what idea you're working on and how you're thinking of going about it. diff --git a/duckduckhack/goodie/goodie_quickstart.md b/duckduckhack/goodie/goodie_quickstart.md deleted file mode 100644 index 24fd57402..000000000 --- a/duckduckhack/goodie/goodie_quickstart.md +++ /dev/null @@ -1,366 +0,0 @@ -# My First Goodie Instant Answer! - -**If you are new to DuckDuckHack, you're in the right place.** This Goodie Quick Start is meant to show you the basics of DuckDuckHack by building a simple Instant Answer that will look like [this](https://duckduckgo.com/?q=zekiel+duckduckhack&ia=answer): - -![IsAwesome Goodie](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fzekiel_isawesome.png&f=1) - -(Another easy way to contribute is by adding a [Cheat Sheet](https://duck.co/duckduckhack/goodie_cheat_sheets) to DuckDuckGo search results. This is a quick, direct way to contribute a live Instant Answer.) - -If you're already familiar with how Instant Answers are built, feel free to move along to the [Basic Tutorial](https://duck.co/duckduckhack/goodie_basic_tutorial). - -## Set Up Your Development Environment - -By this point you should have already **[set up your development environment](https://duck.co/duckduckhack/setup_dev_environment)** to be ready to code. If you need help with that (or anything else), please shoot us an email at: [open@duckduckgo.com](mailto:open@duckduckgo.com) and we'll jump on the chance to help! - -## Creating Your First Goodie - -In this tutorial we'll be making a super-simple Goodie by changing some template files. - -We'll be using the **DuckPAN tool** to generate this boilerplate code for us. The DuckPAN tool is an application we built to help DuckDuckHack developers save time. Aside from generating boilerplate code, you'll also use it to run and test your Instant Answer contribution. - -1. Click the "**DuckPAN New Goodie**" button on the command bar. The Terminal should prompt you to enter a name for your Instant Answer. -2. Type **`IsAwesome::GitHubUsername`** (replacing `GitHubUsername` with your actual GitHub username), then press "**Enter**". From this point on, whenever you see, ***GitHubUsername***, replace it with your actual GitHub username. - - ``` - [04:31 PM codio@buffalo-pixel zeroclickinfo-goodies {master}]$ cd ~/workspace/zeroclickinfo-goodies/ && duckpan new - Please enter a name for your Instant Answer: IsAwesome::GitHubUsername - ``` - - *Usually you'll be typing in just a regular name like `Calculator` with no prefix, but because so many community members are creating `IsAwesome` projects, we wanted to keep them together in their own directory. Hence the `IsAwesome::` prefix.* - -3. DuckPAN should print some text, confirming that your first Goodie was created: - - ``` - [04:31 PM codio@buffalo-pixel zeroclickinfo-goodies {master}]$ cd ~/workspace/zeroclickinfo-goodies/ && duckpan new duckpan new - Please enter a name for your Instant Answer : IsAwesome::GitHubUsername - - Created file: ./lib/DDG/Goodie/IsAwesome/GitHubUsername.pm - - - Created file: ./t/IsAwesome/GitHubUsername.t - - - Successfully created Goodie: IsAwesome::GitHubUsername - ``` - - DuckPAN created two files: a code file, and a test file, each in their proper locations in the repository. That's all it takes to make a Goodie. - - Currently, these two generated files only contain boilerplate code and comments, which saves us a lot of time. Next, we'll customize the files to our liking and get your Goodie working. - -4. Let's start by editing your code file first. Press "**Ctrl+O**" (Cmd+O on a Mac), then type "**GitHubUsername.pm**" and press "**Enter**". This will open the file for editing in Codio's text editor. (Vim, Emacs and Nano are also available). - - It should look like this: - - ```perl - package DDG::Goodie::IsAwesome::GitHubUsername; - # ABSTRACT: Write an abstract here - # Start at https://duck.co/duckduckhack/goodie_overview if you are new - # to Instant Answer development - - use DDG::Goodie; - use strict; - - zci answer_type => "is_awesome_git_hub_username"; - zci is_cached => 1; - - # Metadata. See https://duck.co/duckduckhack/metadata for help in filling out this section. - name "IsAwesome GitHubUsername"; - description "Succinct explanation of what this Instant Answer does"; - primary_example_queries "first example query", "second example query"; - secondary_example_queries "optional -- demonstrate any additional triggers"; - # Uncomment and complete: https://duck.co/duckduckhack/metadata#category - # category ""; - # Uncomment and complete: https://duck.co/duckduckhack/metadata#topics - # topics ""; - code_url "https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/IsAwesome/GitHubUsername.pm"; - attribution github => ["GitHubAccount", "Friendly Name"], - twitter => "twitterhandle"; - - # Triggers - triggers any => "triggerWord", "trigger phrase"; - - # Handle statement - handle remainder => sub { - - # optional - regex guard - # return unless qr/^\w+/; - - return unless $_; # Guard against "no answer" - - return $_; - }; - - 1; - ``` - -5. Change the **`trigger`** (line 26) to this: - - ```perl - triggers start => "duckduckhack githubusername"; - ``` - - This tells the Instant Answer system to trigger your Goodie when the query **starts** with the phrase "**duckduckhack githubusername**". - - **Note:** Triggers must be entered in **lowercase**. If your username has uppercase letters, **don't worry**, a lowercased trigger will always work because we compare the *lowercased query* against the trigger. - -6. Change the **`handle`** statement (lines 29-37) to this: - - ```perl - handle remainder => sub { - - return "GitHubUsername is awesome and has successfully completed the DuckDuckHack Goodie tutorial!"; - }; - ``` - - This will make your Goodie tell everyone that you're totally awesome! - - **Note:** Do ***not*** remove the `1;` from the end of the file. This is required because Perl modules must return a true value. - -7. Switch back to your Terminal by clicking on the "**Terminal**" tab. -8. In the `zeroclickinfo-goodies` directory type **`duckpan server`** and press "**Enter**". The Terminal should print some text and let you know that the server is listening on port 5000. - - ``` - Starting up webserver... - - You can stop the webserver with Ctrl-C - - HTTP::Server::PSGI: Accepting connections at http://0:5000/ - ``` - - **Note:** If you modify **GitHubUsername.pm** (or any other Perl files) while DuckPAN Server is *running*, you **must restart the server** for the changes to take effect. In the Terminal, press "**Ctrl+C**" to shut down the DuckPAN Server. Type **`duckpan server`** and press "**Enter**" to start it again. - -9. Click the "**DuckPAN Server**" button at the top of the screen. A new browser tab should open and you should see the DuckDuckGo Homepage. Type "**duckduckhack GitHubUsername**" and press "**Enter**". -10. You should see a DuckDuckGo Instant Answer displaying the text, "**GitHubUsername is awesome and has successfully completed the DuckDuckHack Goodie tutorial!**". This is the text we told your Goodie to **`return`**! -11. In the Terminal, press "**Ctrl+C**" to shut down the DuckPAN Server. The Terminal should return to a regular command prompt. - - ``` - Starting up webserver... - - You can stop the webserver with Ctrl-C - - HTTP::Server::PSGI: Accepting connections at http://0:5000/ - ^C - [04:32 PM codio@buffalo-pixel zeroclickinfo-goodies {master}]$ - ``` - -**Congrats!** Your first Goodie is working! You specified its **`trigger`** and told it what to **`return`**. You're almost done! Now you should write a test to make sure your Goodie only triggers when we want it to. - -## Writing Your First Goodie Test File - -1. Let's edit your corresponding test file. Press "**Ctrl+O**" (Cmd+O on a Mac), then type "**GitHubUsername.t**" and press "**Enter**". This will open the file for editing in Codio's text editor. - - It should look like this: - - ```perl - #!/usr/bin/env perl - - use strict; - use warnings; - use Test::More; - use DDG::Test::Goodie; - - zci answer_type => "is_awesome_git_hub_username"; - zci is_cached => 1; - - ddg_goodie_test( - [qw( DDG::Goodie::IsAwesome::GitHubUsername )], - # At a minimum, be sure to include tests for all: - # - primary_example_queries - # - secondary_example_queries - 'example query' => test_zci('query'), - # Try to include some examples of queries on which it might - # appear that your answer will trigger, but does not. - 'bad example query' => undef, - ); - - done_testing; - ``` - - _Make sure to change **all** instances of `GitHubUsername` in the file to your user name._ - -2. Change the **`ddg_goodie_test`** function (lines 11-20) to this: - - ```perl - ddg_goodie_test( - [qw( - DDG::Goodie::IsAwesome::GitHubUsername - )], - 'duckduckhack GitHubUsername' => test_zci('GitHubUsername is awesome and has successfully completed the DuckDuckHack Goodie tutorial!'), - 'duckduckhack GitHubUsername is awesome' => undef, - ); - ``` - - This test file now ensure two things: - - 1. For the query "**duckduckhack GitHubUsername**", your Goodie returns "GitHubUsername is awesome and has successfully completed the DuckDuckHack Goodie tutorial!". - 2. For the query "**duckduckhack GitHubUsername is awesome**", your Goodie returns **`undef`**, meaning it won't display any result for that query. - - *Can you guess what the `test_zci()` function does? ZCI stands for Zero Click Info. The `test_zci()` function verifies what is being returned specifically in the Zero Click Info section of the search page.* - - -3. Switch back to your Terminal by clicking on the "**Terminal**" tab. -4. Type **`prove -Ilib t/IsAwesome/GitHubUsername.t`** and press "**Enter**". The prompt should print the results of the test. - - ``` - [04:33 PM codio@buffalo-pixel zeroclickinfo-goodies {master}]$ prove -Ilib t/IsAwesome/GitHubUsername.t - t/IsAwesome/GitHubUsername.t .. 1/? - # Failed test 'Checking for not matching on duckduckhack GitHubUsername is awesome' - # at /home/codio/perl5/perls/perl-5.18.2/lib/site_perl/5.18.2/DDG/Test/Block.pm line 62. - # got: 'DDG::ZeroClickInfo=HASH(0x2e5b628)' - # expected: undef - # Looks like you failed 1 test of 2. - t/IsAwesome/GitHubUsername.t .. Dubious, test returned 1 (wstat 256, 0x100) - Failed 1/2 subtests - - Test Summary Report - ------------------- - t/IsAwesome/GitHubUsername.t (Wstat: 256 Tests: 2 Failed: 1) - Failed test: 2 - Non-zero exit status: 1 - Files=1, Tests=2, 0 wallclock secs ( 0.02 usr 0.02 sys + 0.14 cusr 0.04 csys = 0.22 CPU) - Result: FAIL - ``` - - Uh oh! We failed a test! The output says a `DDG::ZeroClickInfo` object was returned, but the test was expecting `undef`. Let's update our code to make this test pass. - -4. Switch back to your text editor by clicking the tab if it's still open, or open the "**GitHubUsername.pm**" file with "**Ctrl+O**" (Cmd+O on a Mac). -5. Update the **`handle`** statement to this: - - ```perl - handle remainder => sub { - return if $_; - return "GitHubUsername is awesome and has successfully completed the DuckDuckHack Goodie tutorial!"; - }; - ``` - - Now your Goodie will return nothing (i.e. `undef`) if `$_` has a value. Within our `handle` function, `$_` is a special variable that takes on the value of **`remainder`**. The `remainder` refers to the rest of the query after removing our matched **`trigger`**. So for the query "duckduckhack GitHubUsername is awesome", the value of `$_` will be: - - ``` - "duckduckhack GitHubUsername is awesome" - "duckduckhack GitHubUsername" = `is awesome` - ``` - -6. Switch back to your Terminal by clicking the "**Terminal**" tab. -7. Type **`prove -Ilib t/IsAwesome/GitHubUsername.t`** and press "**Enter**". The prompt should print the results of the test again. - - ``` - [04:34 PM codio@buffalo-pixel zeroclickinfo-goodies {master}]$ prove -Ilib t/IsAwesome/GitHubUsername.t - t/IsAwesome/GitHubUsername.t .. ok - All tests successful. - Files=1, Tests=2, 0 wallclock secs ( 0.02 usr 0.01 sys + 0.15 cusr 0.03 csys = 0.21 CPU) - Result: PASS - ``` - - **Success!** The test passes, meaning that your Goodie will only `return` an answer when our query `start`s with the `trigger` "**duckduckhack GitHubUsername**" and has no `remainder` after that. - - _Still not passing? Make sure you changed **all** instances of `GitHubUsername` in the file to your user name._ - -You've written and tested your first Goodie! Feels great, doesn't it? - -**While we can no longer accept 'IsAwesome' submissions as pull requests, you're ready to contribute bigger things:** - -- Tackle the [Basic Tutorial](https://duck.co/duckduckhack/goodie_basic_tutorial). You will find many things familiar there and be well on your way to advanced Goodie functionality. -- Work on an approved idea on [the DuckDuckGo Community Portal](https://duck.co/ideas/status/3?table_lnKRpLENwO2NUmZUyukQpw_sort=votes) -- Create a [cheat sheet](https://duck.co/duckduckhack/goodie_cheat_sheets) (peruse the [cheat sheet ideas](https://duck.co/duckduckhack/goodie_cheat_sheets#cheat-sheet-ideas)) -- Own an issue from [Goodie Low Hanging Fruit](https://github.com/duckduckgo/zeroclickinfo-goodies/issues?q=is%3Aopen+is%3Aissue+label%3A%22Low-Hanging+Fruit%22) - -**As always, feel free to email us with any questions - any time - at [open@duckduckgo.com](mailto:open@duckduckgo.com). Happy hacking!** - - diff --git a/duckduckhack/goodie/goodie_triggers.md b/duckduckhack/goodie/goodie_triggers.md deleted file mode 100644 index 65051e62c..000000000 --- a/duckduckhack/goodie/goodie_triggers.md +++ /dev/null @@ -1,92 +0,0 @@ -# Triggers - -There are two types of triggers, **words** and **regex**. We insist that you use word triggers whenever possible as they are simpler and faster. - -## Word Triggers - -### Usage - -```perl -triggers => -``` - - - -#### Examples - -```perl -triggers start => "trigger my instant answer", "trigger myIA", "myIA"; -``` - -or - -```perl -@triggers = qw(these are separate triggers for my instant answer); -triggers any => @triggers; -``` - -or - -```perl -triggers start => "starting phrase of query"; -triggers end => "ending phrase of query"; -``` - -### Trigger Locations - -- `start` — Word exists at the start of the query -- `end` — Word exists at the end of the query -- `startend` — Word is at the beginning or end of the query -- `any` — Word is anywhere in the query - -**Note:** You can combine several trigger statements if, for example, you want certain words or phrases to be **startend** but others to be **start**. The [Average Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Average.pm#L5) demonstrates the usage of multiple Word trigger statements. - -## Regex Triggers - -### Usage - -```perl -triggers => -``` - - - -#### Examples - -```perl -triggers query_lc => qr/trigger (?:my|your|our) instant answer/; -``` - -or - -```perl -my $regex = qr/^this is an? instant answer regexp$/; -triggers query_raw => $regex; -``` - -#### Query Formats - -- `query_raw` — The query in its original form, with whitespace and case preserved -- `query` — Uniformly whitespaced version of `query_raw` -- `query_lc` — Lowercase version of `query` -- `query_nowhitespace` — `query` with all whitespace removed -- `query_clean` — `query_lc`, but with whitespace and non-alphanumeric ascii removed - -**Note:** You **cannot** combine the use of **Regex Triggers** with **Word Triggers**. - -## Regex Guards - -We much prefer you use **trigger words** when possible because they are faster on the backend. In some cases however, **regular expressions** are necessary, e.g., you need to trigger on sub-words. In this case we suggest you consider using a **word trigger** and supplement it with a **regex guard**. A regex guard is a return clause immediately inside the `handle` function. - -A good example of this is the Base64 goodie. In this case we want to trigger on queries with the form "base64 encode/decode \". Here's an excerpt from [Base64.pm](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Base64.pm) which shows how this case is handled using a word trigger, with a regex guard: - -```perl -triggers startend => "base64"; - -handle remainder => sub { - return unless $_ =~ /^(encode|decode|)\s*(.*)$/i; -``` - -## Triggers in Multiple Languages - -We have plans to make it possible to trigger Instant Answers in many different languages. Until an internationalization mechanism is place, to uphold maintainability and consistency, **we cannot accept pull requests that add languages directly in the code.** \ No newline at end of file diff --git a/duckduckhack/longtail/longtail_basic_tutorial.md b/duckduckhack/longtail/longtail_basic_tutorial.md deleted file mode 100644 index 1926404ba..000000000 --- a/duckduckhack/longtail/longtail_basic_tutorial.md +++ /dev/null @@ -1,3 +0,0 @@ -# Longtail Basic Tutorial - -(This section is coming soon! Know what should go here? Then **please** [contribute to the documentation](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/CONTRIBUTING.md)!) \ No newline at end of file diff --git a/duckduckhack/longtail/longtail_overview.md b/duckduckhack/longtail/longtail_overview.md deleted file mode 100644 index 9284c4aca..000000000 --- a/duckduckhack/longtail/longtail_overview.md +++ /dev/null @@ -1,41 +0,0 @@ -# Longtail Instant Answers - -**If you have questions, [request an invite to our Slack team](mailto:QuackSlack@duckduckgo.com?subject=AddMe) and we'll be happy to chat!** - -Longtails are database-backed, full text search, Instant Answers. For every query DuckDuckGo receives, each Longtail's database of articles is searched and any matching articles are used to display a paragraph of text, highlighting the portion of the article which matches the query. Developing a Longtail Instant Answer entails writing a program that generates an XML data file. This XML file describes each article, as well as some other important information discussed below. The program may be written in Perl, Python, JavaScript, or Ruby, and if necessary, will be run periodically to keep the database current. - -## Structure - -Longtails consist of two primary files. The first is a metadata file that describes the Instant Answer you are building. Its structure is identical to the Fathead metadata file, described [here](https://github.com/duckduckgo/zeroclickinfo-fathead#meta-file). The second, which can be generated using a language of your choosing, contains the data set in a format ready for us to deploy: - -```XML - - - - - - - - - - - - - - - - - - - - - -1 - - - - - -``` - -(This section is still growing! Know what should go here? Then **please** [contribute to the documentation](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/CONTRIBUTING.md)!) diff --git a/duckduckhack/resources/code_styleguide.md b/duckduckhack/resources/code_styleguide.md deleted file mode 100644 index bfb7b4586..000000000 --- a/duckduckhack/resources/code_styleguide.md +++ /dev/null @@ -1,272 +0,0 @@ -# Code Style Guide - -As a largely open-source project, we like to keep our code as consistent as our Instant Answers. This means all code should be formatted the same way and should look and feel as though it has all been written by the same person. - -This document outlines some language specific guidelines for formatting your code and also highlights best practices, and things to avoid. In any large open-source project, maintainability is of utmost importance, so a style guide is necessary to help our contributors write clean, readable and maintainable code. - -## General - -- **Indent with 4 spaces** (soft tabs) - - All DuckDuckHack code should be indented with four spaces. Be sure to configure your text editor to insert four spaces when you press the tab button - this is referred to as a "soft-tab". If you are correcting the indentation of a file, please submit that change in a separate pull request. It is important that code reviewers are able to easily differentiate between functional and stylistic changes. - -- **Document your code** - - Well-documented code helps others understand what you've written. It's likely that someone else will read your code and might even need to change it at some point in the future. Comments should primarily document the intent of the code. Reviewers are much more effective when they know exactly what you were trying to do. Meaningful variable names also help to document your intent. - -- **Writing meaningful commits** - - Commit messages should be concise and informative. If the specific commit fixes a bug on GitHub, note that by saying `fixes #123`, where `123` is the issue number. Doing this will automatically close the specified issue when your pull request is merged. - - Usually pull requests only deal with a single Instant Answer. If however your pull request modifies more than one Instant Answer, please preface your commit messages with the name of the IA modified by your commit: - - For example, if your pull request updates the Movies, InTheaters and Kwixer IA's: - - - Commit 1: `Movies: updated title font color to match mockup`. - - Commit 2: `InTheaters: updated title text, typo fix`. - - Commit 3: `Movies, InTheaters, Kwixer: change title to h5 tag`. - -## JavaScript - -**We generally adhere to [Crockford's Code Conventions](http://javascript.crockford.com/code.html)**. Most importantly: - -- Use semicolons; - -- Use the ["One True Brace Style"](https://en.wikipedia.org/wiki/Indent_style#Variant:_1TBS) (opening brace on the same line) - - ```javascript - // Bad - if ( ... ) - { - ... - } - else - { - ... - } - - // Good - if ( ... ) { - ... - } else { - ... - } - ``` - -- Use `{}` instead of `new Object()`, and `[]` instead of `new Array()`. - - ```javascript - // Bad - var obj = new Object(); - var arr = new Array(); - - // Good - var obj = {}; - var arr = []; - ``` - -- Use `===` instead of `==`, and `!==` instead of `!=`. [Why?](http://stackoverflow.com/a/359509/1998450) - - ```javascript - // Bad - if (foo == bar) { ... } - if (foo != bar) { ... } - - // Good - if (foo === bar) { ... } - if (foo !== bar) { ... } - ``` - -- Declare variables with var, chaining multiple declarations -- one per line: - - ```javascript - - // Bad - var foo = 1; - var bar = true; - var baz = "string"; - - // good - var foo = 1, - bar = true, - baz = "string"; - - // when initializing undefined variables - var foo, bar, baz; - ``` - - Note: We're using ECMAScript's [strict mode](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FFunctions_and_function_scope%2FStrict_mode), so you'll *need* to declare every variable with `var`. - -- Avoid trailing commas - - We support all modern browsers, including IE 9, which breaks when it reaches a trailing comma in objects. It also treats trailing commas in arrays [differently than you might expect](http://www.akawebdesign.com/2011/06/23/the-curious-case-of-trailing-commas-in-ie/). - - ```javascript - // Bad - var foo = { - a: 'b', - c: 42, //<-- trailing comma - }; - - // Good - var foo = { - a: 'b', - c: 42 //<-- no trailing comma - }; - ``` - -- Use [`$.map()`](http://api.jquery.com/jQuery.map/) and [`$.each()`](http://api.jquery.com/jQuery.each/) instead of `Array.prototype.map()` and `Array.prototype.forEach()`, again for IE support. - -- Avoid modifying object prototypes - - Do not modify the prototypes of objects which are defined outside of your code. For example, modifications to `Array.prototype` or `Spice` will affect the global scope and may cause problems. In general, we advocate the use of local, private functions instead. - -- Define default properties when the object is created: - - ```javascript - // Bad - var bar = {}; - bar.a = 'b'; - bar.c = 42; - - // Good - var foo = { - a: 'b', - c: 42 - }; - ``` - -- Store jQuery selectors: - - If you need to re-use a jQuery selector (e.g. `$('#myDiv')`), store it in a variable for speed and efficiency. Otherwise, jQuery will need to traverse the DOM each time you use the same selector. - - ```javascript - // Bad - // Traverse the DOM and find '#text_element'... - $('#text_element').show(); - // ... now do all that work again! - $('#text_element').html('abc'); - - // Good - // Traverse the DOM and find '#text_element', then store it in memory - // Convention is to prefix variables with a '$' when they hold a jQuery object - var $text_element = $('#text_element'); - $text_element.show(); - $text_element.html('abc'); - - // Better - // jQuery supports method chaining! - $('#text_element').show().html('abc'); - - ``` - -## Handlebars - -Handlebars templates and Handlebars helpers should be easy to read and understand. Please: - -- Put nested elements on new lines: - - ```html - - - - - - ``` - -- Define helper functions with `Spice.registerHelper`, instead of `Handlebars.registerHelper`: - - ```javascript - // Bad - Handlebars.registerHelper("spice_name_do_something", function(){ ... }); - - // Good - Spice.registerHelper("spice_name_do_something", function(){ ... }); - ``` - -- Namespace your helper functions: - - Handlebars helpers are all created in the same scope, so any two helpers with the same name will collide (we plan to fix this). This can be avoided by prepending your helpers with the name of your Spice IA. - - ```javascript - // Bad - Spice.registerHelper("do_something", function(){ ... }); - - // Good - Spice.registerHelper("spice_name_do_something", function(){ ... }); - ``` - ------- - -The easiest way to verify your code meets our style guide is to test it with [JSHint](http://jshint.com/). - -## CSS - -- All CSS should be "namespaced" with the container element. - - For Spices, use `.zci--spicename`, and for Goodies, use `.zci--answer`: - - ```css - /* Stopwatch Spice */ - .zci--stopwatch .spice-pane { - ... - } - - /* Calendar Goodie */ - .zci--answer table.calendar { - ... - } - ``` - -- Put multiple selectors on new lines for each rule: - - ```css - /* Bad */ - .zci--stopwatch .spice-pane, .zci--stopwatch .spice-pane-right { - ... - } - - /* Good */ - .zci--stopwatch .spice-pane, - .zci--stopwatch .spice-pane-right { - ... - } - ``` - -- Avoid the use of vendor prefixes and experimental features. We strive for a uniform experience on all current browsers and your IA *must* work across them. - - When in doubt, [CanIUse](http://caniuse.com/) is a good resource for determining if prefixes are needed. We support IE 9+, and recent versions of Chrome, Firefox, Safari, and Opera. - - ```css - /* Bad */ - .element { - -webkit-border-radius: 45px; - -o-border-radius: 45px; - -moz-border-radius: 45px; - -khtml-border-radius: 45px; - border-radius: 45px; - } - - /* Good */ - .element { - border-radius: 45px; - } - ``` - -- Avoid using inline CSS. Custom CSS should be placed in a file (`/share/{goodie,spice}/my_ia/my_ia.css`) to be automatically included in the Instant Answer response. - -## Perl - -(This section is coming soon! Know what should go here? Then **please** [contribute to the documentation](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/CONTRIBUTING.md)!) diff --git a/duckduckhack/resources/common_pitfalls.md b/duckduckhack/resources/common_pitfalls.md deleted file mode 100644 index 7191cdb8c..000000000 --- a/duckduckhack/resources/common_pitfalls.md +++ /dev/null @@ -1,7 +0,0 @@ -# Common Pitfalls - -(This section is coming soon! Know what should go here? Then **please** [contribute to the documentation](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/CONTRIBUTING.md)!) - -### Defining Perl Variables and Functions - -- inside vs outside the `handle` function diff --git a/duckduckhack/resources/faq.md b/duckduckhack/resources/faq.md deleted file mode 100644 index 3b90c08cb..000000000 --- a/duckduckhack/resources/faq.md +++ /dev/null @@ -1,170 +0,0 @@ -# DuckDuckHack FAQ - -## General FAQ - -### Why should I make Instant Answers? - -We hope you will consider making DuckDuckGo Instant Answers to: - -- Improve results in areas you personally search and care about, e.g., [programming documentation](https://duckduckgo.com/?q=perl+split), [gaming](https://duckduckgo.com/?q=roll+3d12+%2B+4) or [entertainment](https://duckduckgo.com/?q=xkcd). -- Increase usage of your own projects, e.g., data and [APIs](https://duckduckgo.com/?q=cost+of+living+nyc+philadelphia). -- Attribution [on our site](https://duckduckgo.com/goodies.html) and [Twitter](https://twitter.com/duckduckhack) (working on more). -- See your code live on a [growing](https://duckduckgo.com/traffic.html) search engine! -- Learn something new. - -### What if I'm not a coder at all? - -If you don't code at all, please check out our [Instant Answers Ideas Forum](https://duck.co/ideas) where you can suggest and comment on Instant Answer ideas. For instance, identifying the best sources to draw from is extremely important but developers may not know what they are. Similarly, you can submit [issues about current Instant Answers](https://github.com/duckduckgo/duckduckgo/issues?direction=desc&sort=created&state=open). Both of these activities are very valuable and will help direct community efforts. - -If you're a business and want your data to be utilized, adding your service to the [Instant Answers Ideas Forum](https://duck.co/ideas) is a great way for your API to get picked up by a developer and integrated into the search engine. - -### Can you help me? - -Of course! Here are the easiest ways to contact someone who can help answer your questions: - -- Write us publicly on the [discussion list](https://www.listbox.com/subscribe/?list_id=197814). -- Write us privately at open@duckduckgo.com. - -### What if I don't know Perl? - -If you don't know Perl, that's OK! Some Instant Answer types ([Fathead](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/fathead/fathead_overview.md), [Longtail](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/longtail/longtail_overview.md)) don't require the use of Perl. Also, if you know PHP, Ruby, or Python you should be able to write a [Goodie](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/goodie/goodie_overview.md) in Perl pretty easily using [this awesome cheat sheet](http://hyperpolyglot.org/scripting). - -### Do you have any Instant Answer ideas? - -Yup! We maintain [a growing list](https://duck.co/ideas). There are also improvement ideas for [Goodies](https://github.com/duckduckgo/zeroclickinfo-goodies/issues), [Spice](https://github.com/duckduckgo/zeroclickinfo-spice/issues), [Fathead](https://github.com/duckduckgo/zeroclickinfo-fathead/issues) and [Longtail](https://github.com/duckduckgo/zeroclickinfo-longtail/issues). - -### How do I note that I've started on something? - -In your initial pull request, please note the link on the [Ideas Forum](https://duck.co/ideas). We'll move it to the "in process" bucket for you. - -### Where I can report Instant Answer bugs? - -Submit a GitHub issue in the [appropriate repository](http://github.com/duckduckgo). - -### What if there are Instant Answer conflicts? - -Instant answer sources often compete to answer the same searches. In a lot of cases, the experience can be blended together so that the user is shown answers from more than one source. Our long-term vision for Instant Answers involves multiple sources used in that way. - -There are times, though, where one source does a drastically better job of answering a particular query set. In those cases, the source used for those queries should be the source most capable of delivering the best possible user experience. Our community evaluates those in a few ways: - -- Consistent performance (is the service reliable?) -- Speed (does the service return results fast enough?) -- Quality (does the service answer the queries better than any other service?) - -If you think you have a source that is better, let's talk about it on the [DuckDuckHack e-mail list](https://www.listbox.com/subscribe/?list_id=197814). - -### Why isn't my Instant Answer in the [DuckDuckGo Instant Answers API](https://api.duckduckgo.com)? - -If your Instant Answer is spice or longtail, sometimes we can't expose it through the API for licensing reasons, but our over-arching goal is to make all of our Instant Answers available on their own. - -### Can I add triggers for my language? - -We have plans to make it possible to trigger Instant Answers in many different languages. Until an internationalization mechanism is place, to uphold maintainability and consistency, **we cannot accept pull requests that add languages directly in the code.** - -### Can I do something more complicated? - -Maybe. There are a bunch more internal interfaces we haven't exposed yet, and we'd love to hear your ideas to influence that roadmap. - -### Can I create adult Instant Answers (i.e. NSFW)? - -No. - -### What's the roadmap? - -Here's what we're working on (in roughly in this order): - -- better testing/file structure for spice Instant Answers. -- better JS interface for spice Instant Answer callback functions. -- better attribution. -- embedding Instant Answers. -- better testing/file structure for fathead Instant Answers. -- more defined structure for longtail Instant Answers. -- better testing for longtail Instant Answers. - -### Are there other open source projects? - -Yes! Check out the other repositories in [our GitHub account](https://github.com/duckduckgo). You can email open@duckduckgo.com if you have any questions on those. - -### Can I get the Instant Answers through an API? - -Yes! Check out the [DuckDuckGo API](https://api.duckduckgo.com). Our goal is to make as many Instant Answers as possible -available through this interface. Fathead and goodie Instant Answers are automatically syndicated through the API, and Spice and Longtail are selectively (due to licensing complications) mixed in. - -### Can I talk to you about a partnership idea? - -Sure -- check out [our partnerships page](https://duck.co/help/company/partnerships). - -## Goodie FAQ - -### Can Goodie Instant Answers make network requests? - -No. If you are trying to use an API, you should consider creating a Spice Instant Answer instead. - -### Can Goodie Instant Answers include the user's query string? - -Yes. **However**, they must be handled *very* carefully. User-supplied strings create a lot of potential for [cross-site scripting attacks](https://duckduckgo.com/Cross-site_scripting?ia=about). While the platform attempts to mitigate these issues in pure ASCII responses, HTML responses should **never** include a raw query string. It is safest to return only data which is generated by your Goodie itself. - -## Spice FAQ - -### I want to use 'X' API, but it doesn't have an endpoint for 'Y'. What should I do? - -Email them! - If you explain what it's for, they might be willing to create and endpoint for you! If not, it's probably best to find another API. - -### The API provides both HTTP and HTTPS endpoints; which should I use? - -We prefer to use **HTTP endpoints** because the reduced connection setup time allows us to provide faster answers to the user. Note that the end-user's query will still be secure in transit, because it is proxied ( e.g. https://duckduckgo.com/js/spice/movie/mib ) through an HTTPS connection to the DuckDuckGo servers. - -### Can I use an API that returns XML? - -Sorry, but **not right now**. XML support is coming soon. -**Note:** If an API supports both JSON and XML, we *strongly encourage* you to use **JSON**. - -### Can I use an API that returns HTML or a String? - -Sorry, but **no**. We currently don't support HTML or plain text API's. - -### Can I use the 'X', 'Y' or 'Z' JavaScript library? - -Probably not. Maybe, if it is very small, but we prefer that no third party, extra libraries are used. ***Please*** ask us first before writing an Instant Answer that is **dependent** on an extra library - we don't want you to waste your time and energy on something we can't accept! - -### Can I use Coffeescript? - -No. - -### What about... - -Nope. Just use JavaScript, please and thanks :) - -## Fathead FAQ - -### How can I test my output file? - -Unfortunately, there is no way for contributors to do so. But if you've gotten that far, we want to hear about it! Please open a pull request and we'll help you through the testing process. - -### What can go in a result abstract? - -A result abstract can be either plain text (generally one readable sentence, ending in a period), or HTML. Special care needs to be taken when abstracts contain HTML. Please let us know ahead of time if you are planning to use HTML. - -(This section is still growing! Know what should go here? Then **please** [contribute to the documentation](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/CONTRIBUTING.md)!) - -## Longtail FAQ - -(This section is coming soon! Know what should go here? Then **please** [contribute to the documentation](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/CONTRIBUTING.md)!) - -## DuckPAN FAQ - -### How do I install a missing Perl dependency? - -Any Perl module (.pm file) that has external Perl dependencies will load them with a `use` statement. Typically these statements are located near the top of the file. For example, the Factors Goodie (`lib/DDG/Goodie/Factors.pm`) loads the module `Math::Prime::Util`. If this is not installed on your system, DuckPAN will not be able to use the Factors Goodie and you will likely see an error or warning. - -In order to install any missing dependencies you can use cpan or cpanm like so: - -```perl -cpan install Math::Prime::Util -# or -cpanm Math::Prime::Util -``` - -Alternatively, if you would like to install all the dependencies for the repo (e.g. zeroclickinfo-goodies), you can run `duckpan installdeps`. Please note that installing all the dependencies will take **several minutes** to install as there are many dependencies. - -![dependency](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckpan%2Fassets%2Fdependency.png&f=1) diff --git a/duckduckhack/resources/how_to_qa.md b/duckduckhack/resources/how_to_qa.md deleted file mode 100644 index ef93138e7..000000000 --- a/duckduckhack/resources/how_to_qa.md +++ /dev/null @@ -1,130 +0,0 @@ -# How to QA an Instant Answer - -Our goal is to have a great Instant Answer for every search. When a developer submits a new Instant Answer, it must first be thoroughly reviewed by our community and internal staff before going live on DuckDuckGo. -Please use the following guide when QA-ing Instant Answers: - -## Everyone (Reviewing Quality): - -### What's an Instant Answer made of? - -1. Some code -2. A data source (like a website) - -### How do they work? - -Instant Answers are a bundle of code that make information from one source available directly on DuckDuckGo. Anyone can suggest them and anyone can create them! -Check out some examples of what we mean: - -- [Definition search:](https://duckduckgo.com/?q=define+hello&ia=definition) - - [Code](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/share/spice/dictionary/definition/dictionary_definition.js) - - [Data Source](https://www.wordnik.com/) - -- [Weather search:](https://duckduckgo.com/?q=weather+in+chicago&ia=weather) - - [Code](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/lib/DDG/Spice/Forecast.pm) - - [Data Source](https://developer.forecast.io/) - -### What we're looking for in QA - -**Function:** Is the Instant Answer actually useful? -Instant Answers should *always* be unambiguously **better** than organic links. If it doesn't add value to the page, then it should not be approved. - -- **Example test:** Search for something that will trigger the Instant Answer and compare it to the organic links. The user should benefit from having the Instant Answer available. In the best case scenario, the Instant Answer should give the user all the information they need, so they don't even have to click a link. At the very least, the Instant Answer should offer some different and more valuable information than the links. - - -**Relevancy:** Does the Instant Answer always provide relevant information? -Instant Answers should only show information that is correct and relevant to the user's search. If an Instant Answer is capable of returning irrelevant information (e.g., "free gaming apps" should *only* show free apps, "the dark knight movie" should ensure both words, "dark" and "knight" are in the resulting movie's title), then the relevancy must be improved before the Instant Answer is accepted and goes live. - -- **Example test:** Search for something that will trigger the Instant Answer and compare the information provided to the original source's website (if one exists) or another credible source. For example, if the Instant Answer performs arithmetic operations, you could verify that its calculations are correct using your calculator at home. If it provides movie information, you could verify that it's correct using Wikipedia or IMDb. - - -**Triggering:** Does the Instant Answer trigger when it shouldn't? Are there any queries that *should* trigger the Instant Answer, but don't? -Goodie and Spice Instant Answers use a list of, "trigger words" (or phrases) that signal DuckDuckGo to use that Instant Answer when those triggers appear in a search query. If they are too generic, it will cause the Instant Answer to be shown in cases which are inappropriate. For example, "app" is a very generic word which occurs in many queries that aren't necessarily an app search. Instant Answers that use generic triggers should always further qualify the query to make sure it should return an answer. On the other hand, if triggers are too specific, it can lead users to believe that an Instant Answer doesn't exist for that topic or query space, reducing the value in searching with DuckDuckGo. - -- **Example test:** Can you think of any queries that should or shouldn't be triggering this Instant Answer? Let's say we have an Instant Answer that shows movies, and it triggers with the term, "movie". The query, "movie Thor" would trigger this Instant Answer, but other queries, such as, "watch Thor", "Thor movies", "film Thor" or "Thor film" should also trigger this Instant Answer. - - -**Adult Content:** -Is the Instant Answer effectively preventing adult words or inappropriate content from showing? There shouldn't be any adult imagery or profanity in Instant Answers, by default. If an Instant Answer is capable of displaying profanity or questionable adult humor, it should not be approved (if it's vulgar or distasteful), or it can be set to only show when safe search is off. If ever in doubt, please ask community leaders or DDG staff for help. - -- **Example test:** Check if the Instant Answer is capable of producing profanity or adult imagery by searching for relevant (profane) keywords or risqué content. If so, the Instant Answer should block all instances of adult language and adult imagery. If not, you've found a bug! - - -**Design:** -Can we minimize the space used? How does it look on smaller screens? Can you break the design? For example, try using non-UTF8 characters or long search queries. Do the design and layout make sense given the type of information? Does it look and feel like other Instant Answers? (It should!) Spotting design bugs and improvements can be tricky, since everyone's eye for design is a bit different, but you can refer to live Instant Answers as an example. - -- **Example test:** Test the Instant Answer with a few different queries. Make sure the most important information is easy to identify and understand. The information shouldn't be too crowded or too sparse. Try previewing the Instant Answer on a mobile device (phone, tablet) and check if the design breaks or if too much vertical space is used. Ideally, an Instant Answer on mobile screens should ***not*** push organic links off the page. If this is the case, look for ways to either increase the information density or reduce the information shown — this is a great way to determine what information is absolutely necessary and deserves to be shown. - - -**Conflicts:** -Does it conflict with other Instant Answers? We wouldn't want to step on the query space of other Instant Answers. - -- **Example test:** Check to see if an Instant Answer already exists for the new Instant Answer's triggers. For example, [a search for "Bill Murray"](https://duckduckgo.com/?q=bill+murray) currently shows Wikipedia, so if the new Instant Answer will show for searches like, "Bill Murray," then it should be noted to the developer in case one Instant Answer is better than the other. - - -## Developers (Reviewing Code): - -**High Level (Perl & JavaScript)** - -- Is this the right Instant Answer type? Would it be better to implement this as another IA type? - - - If this should really be another IA type (e.g., JavaScript heavy Goodie should probably be a Spice) it's best to note this as early in the process as possible, since the Instant Answer will need to be re-implemented and a new pull-request submitted. - -- What other data is available from this source? (check the API response for anything really useful that's not being displayed). - -- Is this the best layout/design to display all the data? (For Spice, consider the various templates) - -- Does the API often return irrelevant results? If so, consider using the `isRelevant()` function or, if that is already in use, improve the client-side relevancy checking by making it more strict. - -**Regarding the code...** - -- The code should well organized. If things don't make sense, make comments and ask questions! It's better to go overboard with your feedback than to hold back. - - - For Perl modules, metadata comes first, then static variables and function definitions, then the `handle` function last. - -- The code should be easy to understand and follow. Other developers must be able to understand the code reasonably well, in case fixes or improvements need to be made. - - - Non-trivial functions and processes should be well documented. - - - The code should be written to optimize performance and efficiency while maintaining simplicity and legibility (where applicable and without causing performance problems). - - - Inefficient code should be noted and improvements should be suggested. - -- Are the caching parameters correct? Should we *not* cache the API responses? (they are cached by default) - - - Consider `is_cached` and `proxy_cache_valid`. - -- If an Instant Answer is capable of displaying profanity or questionable adult humor, make sure the `is_unsafe` flag is set. - -**Low Level (Perl)** - -- Static variables (e.g., lists, hashes, regular expressions) and helper functions should not be declared inside `handle` functions (this will cause them to be redefined each time the Instant Answer is triggered). The same applies when reading files — the file handler should be outside the `handle` function. - -- Long lists of trigger words/phrases should be moved to a `triggers.txt` file (in the share directory) and `slurp()` should be used to convert them into a list. - -- API Keys should not be merged in, the proper placeholder syntax should be used `{{ENV{DDG_SPICE__APIKEY}}}` - - - DDG staff should also be notified so we can get our own API Key. - -- Check if existing CPAN libraries can replace some functions. We can use libraries for a variety of things and you can find them all on [MetaCPAN](https://metacpan.org/). - -**Low Level (JavaScript)** - -- Semicolons must be used; Point out any missing semicolons; - -- Cross-browser compatibility is very important! Use jQuery methods where applicable to ensure this. We also support IE9+, and it's good to be aware of these. Search for the method on MDN if you're unsure. - - - e.g., `Array.prototype.forEach()` should be replaced with `$.each()`. - -- JavaScript that runs before the rendering of the Spice (`Spice.render()`) should be used to error-check, massage, and organize the data that will be passed on to the template. - -- Template helpers should be used to format output and decide what should be shown. - -- HTML should not be created or inserted into the DOM before or after rendering. For example, don't use jQuery to build your display, that's what templates are for :) - -- Templates and sub-templates should be used when dealing with HTML, not jQuery. - -- Don't declare any global variables. JavaScript has function scope, so anything outside of a function is global (or part of the `window` object). Also, variables that were not declared with `var` are globals, too. Check out the [JavaScript Garden](http://bonsaiden.github.io/JavaScript-Garden/#function.general) for more information about this. - - - On this note, make sure [strict mode](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FFunctions_and_function_scope%2FStrict_mode) is enabled. This helps catch the usual pitfalls in JS. - -- `if` statements should always use curly braces, `{}` diff --git a/duckduckhack/resources/other_development_environments.md b/duckduckhack/resources/other_development_environments.md deleted file mode 100644 index d55d0bc82..000000000 --- a/duckduckhack/resources/other_development_environments.md +++ /dev/null @@ -1,262 +0,0 @@ -# Other Development Environments - -For the vast majority of contributors, the best, simplest, and quickest way to develop on DuckDuckHack is to use the **free, web-based Codio environment**. Instructions on setting up Codio can be found in the section on [setting up your development environment](https://duck.co/duckduckhack/setup_dev_environment). - -However, some developers prefer working on either a local environment or a virtual machine. This guide addresses setting up DuckPAN on environments other than Codio. - -## About DuckPAN - -DuckPAN is an application built to aid DuckDuckHack developers. It is mainly used to generate the required files for new Instant Answers, where the developer can then focus on implementing functionality. DuckPAN also assists developers in testing the triggering and visual display of Instant Answers. - -## Overview of Environments - -Aside from the preferred [Codio web-based environment](https://duck.co/duckduckhack/setup_dev_environment), there are three other environments you can set up: - -- [**Install DuckPAN locally**](#installing-duckpan-locally). This **requires Linux or Mac OS X**. We suggest you install [Ubuntu](http://www.ubuntu.com/download). -- The [**DuckDuckHack Virtual Machine Image**](#duckduckhack-development-virtual-machine) -- The [**Vagrant virtual environment**](#vagrant-virtual-environment) - -_**Note on Windows systems:** Local development is not possible on Windows environments. Windows users can use either Codio or the virtual machine._ - -Once DuckPAN is up and running, be sure to continue to the [using DuckPAN](#using-duckpan) section below. - -## Universal Notes - -### Operating Systems - -Currently, DuckPAN has been developed on, and works well with **Ubuntu**. More specifically, we regularly build, test and run DuckPAN on **Ubuntu 12.04**. We have also successfully installed and run DuckPAN on older and newer Ubuntu releases, e.g. Ubuntu 10.04, 12.10, and 13.04. - -Developers have also been successful running DuckPAN on other Linux distros (e.g. Arch, Debian) and on Mac OS X 10.8 and later, but **we make no promises that it will work outside of Ubuntu**. - -As well, **there have been reported issues with installing DuckPAN on Windows**, so we don't recommend you go down that path. - -That being said, we are more than willing to help you debug any installation problems, so please come to us with your problems and we'll try to get your issues sorted out. If you'd like some help from our community, feel free to engage with them on the [DuckDuckGo forum](http://duck.co/). - -### Perl Versions - -We run our DuckPAN tests against Perl 5.16 and 5.18 using Travis (https://travis-ci.org/duckduckgo/p5-app-duckpan). We suggest you install Perl 5.16 via Perlbrew for local development. The Codio boxes come with Perlbrew and Perl 5.18 already installed. - ------- - -## Installing DuckPAN Locally - -_**Note**: You don't need to install DuckPAN locally if you're using our DuckDuckHack virtual machine or the Vagrant virtual environment. It's already installed for you!_ - -To install DuckPAN, open your terminal and run: - -``` -curl http://duckpan.org/install.pl | perl -``` - -[This script](https://github.com/duckduckgo/p5-duckpan-installer) will setup [local::lib](https://metacpan.org/module/local::lib), which is a way to install Perl modules without changing your base Perl installation. If you already use `local::lib` or [perlbrew](https://metacpan.org/module/perlbrew), don't worry, this script will intelligently use what you already have. - -If you didn't have a `local::lib` before running the install script, you will need to run the script twice. It should tell you when like this: - -``` -please now re-login to your user account and run it again! -``` - -If everything works, you should see this at the end: - -``` -EVERYTHING OK! You can now go hacking! :) -``` - -Note that with `local::lib` now installed, you can easily install [Perl modules](http://search.cpan.org/) with [cpanm](https://metacpan.org/module/cpanm). - -``` -cpanm App::DuckPAN -App::DuckPAN is up to date. -``` - -### Adding Shell Completion - -Some of our awesome community members have written shell completion scripts for DuckPAN, which should save you tons of time. Feel free to improve these, or contribute new ones! - -#### Bash - -- Submitted by: [mattr555](https://github.com/mattr555) -- link: https://github.com/mattr555/dotfiles/blob/master/bin/duckpancomp.sh - -#### Z Shell - -- Submitted by: [elebow](https://github.com/elebow) -- link: https://github.com/elebow/duckpan-completion - -### Dealing With Installation Issues - -If during the course of your DuckPAN install you run into errors, don't panic, there are a few things you can try. - -First, try running the install command again (`curl http://duckpan.org/install.pl | perl`), this often solves issues related to any dependencies. - -If that doesn't work, you should investigate the build.log and see what's wrong. It might be a dependency issue which you can resolve by manually installing whichever dependency is missing via `cpanm`. - -If it still won't install with `cpanm` try adding `--notest` to the cpanm command: - -``` -cpanm Test::More --notest -``` - -If that still doesn't work, you can also try using `--force`: - -``` -cpanm Test::More --force -``` - -If this ***still*** doesn't work, please create a GitHub Issue in the DuckPAN Repo [here](https://github.com/duckduckgo/p5-app-duckpan/issues). Be sure to paste the contents of your `build.log` and also let us know the details of your OS (`$ uname -a` is great). Once you've made the issue, we'll work with you to try and solve any problems you're having. - ------- - -## Vagrant Virtual Environment - -The Vagrant-based DuckDuckHack virtual environment provides a similar sandbox to the DuckDuckHack VM, but rather than downloading a prebuilt VM, Vagrant creates an environment for you based on the defined configuration. Vagrant is an awesome tool for building development environments. One command - `vagrant up` - gets you a complete working environment in minutes. Something go wrong with the environment? No messing around with snapshots. Tear the VM down and build a fresh environment. The DuckDuckHack Vagrant environment uses Chef cookbooks and the DuckPAN installer script, so configuration is transparent and easily shared. - -Through the Vagrant configuration, you can easily switch back and forth between a headless-mode and the traditional VirtualBox interface. The configuration defaults to headless. - - -### Setup Instructions - -Refer to [the duckpan-vagrant readme](https://github.com/shedd/duckpan-vagrant#installation) for installation instructions. - -Once the environment has been built, **the DuckPAN client is installed and ready to go.** You can now clone the Instant Answer repos and start developing/testing. - -If you run into any issues, please file an issue in the [duckpan-vagrant issue page](https://github.com/shedd/duckpan-vagrant/issues). - - -##### Quick Overview of key Vagrant CLI commands - -There are a couple of key Vagrant commands that you'll use to manage your environment. - -``` -$ vagrant - -up - Build environment from Vagrantfile or resume a previously halted environment. -ssh - Connect to your running VM via SSH. -suspend - Pause the VM, storing its current state to disk. -resume - Bring a suspended VM back to life. -reload - The equivalent of running a halt followed by an up. Use this when you make changes to Vagrantfile. -halt - Shut down the VM. Tries to gracefully shutdown first; if that fails, it will forcefully shut the VM down. -destroy - Stop the currently running VM and blow everything away. -``` - -Run these commands from the directory containing your `Vagrantfile`. - -For more information, please see the (excellent) [Vagrant docs](http://docs.vagrantup.com/). - ------- - -## DuckDuckHack Development Virtual Machine - -The purpose of our DuckDuckHack VM is to provide a sandbox for DuckDuckGo Instant Answer development that is quick to set up and start working with. - - -#### DDH VM Breakdown - -- Ubuntu 12.04 LTS -- Perl 5.16.3 (managed by Perlbrew) -- build-essential (for make, gcc, cc, etc) -- cpanminus (managed by Perlbrew) -- App::DuckPAN -- XFCE Window Manager -- SublimeText, vim, emacs -- Firefox (Configured via fixtracking.com) -- Platform specific virtualization guest tools (optimizes hardware emulation) - - -#### For VirtualBox hosts - -ddh-vbox-2014-12-23.ova: - -MD5: 02a0fb03db2b2466504bf9fbc894c7dd - -https://ddg-community.s3.amazonaws.com/ddh-vbox-2014-12-23.ova - - -#### For VMWare hosts - -ddh-vmw-2014-12-23.ova: - -MD5: 6ecdeb8ead2c2eb7a9aba1db22359c4b - -https://ddg-community.s3.amazonaws.com/ddh-vmw-2014-12-23.ova - - -#### Roadmap - -- Docker support -- Public AMI for use on EC2 - - -### Installing the Virtual Machine - -To use the Virtual Machine, you will need to download and install **VirtualBox**, **VMWare Workstation** or **VMWare Player**, depending on your current OS. - -Then you will need to import the VM. - - -#### VirtualBox (free) - -Website: https://www.virtualbox.org/ -Supports: Windows, OS X, Linux - - -##### Import the VM - -1. Download the OVA -2. Open VirtualBox, click "File" and then click "Import Appliance" -3. Click "Open appliance..." and select the DuckDuckHack virtual appliance OVA file -- click "Next" -4. Click "Import" - - -#### VMWare Player (free) - -Website: https://www.vmware.com/products/player/ -Supports: Windows, Linux - - -##### Import the VM - -1. Download the OVA -2. Open VMWare Player, and click "Open a Virtual Machine" -3. Choose a storage path for the Virtual Machine -- click "Import" - - -### Using the Virtual Machine - - -#### Logging into the VM - -Once you have installed the virtual machine you should be able to start up the VM and login with the following credentials: -- **username** : `vagrant` -- **password** : `duckduckhack` - - -#### Cloning the repository on the VM - -**The DuckPAN client has already been installed for you.** To use it, you must 1st clone your Instant Answer git repository. - -If you haven't already done so, [Determine your Instant Answer Type](https://duck.co/duckduckhack/determine_your_instant_answer_type) and follow GitHub's instructions to [fork](https://help.github.com/articles/fork-a-repo) the Instant Answer repository. - -The Instant Answer repositories are: -+ [zeroclickinfo-goodies](https://github.com/duckduckgo/zeroclickinfo-goodies) -+ [zeroclickinfo-spice](https://github.com/duckduckgo/zeroclickinfo-spice) - -Then, run the git clone command to clone the repository. The URL is the **SSH clone URL** listed on the right side of the github webpage for your forked repository. (You can also use the **HTTPS clone URL**.) - -``` -git clone URL -``` - -_**If your Github password doesn't work**, you may need to enter a [Personal Access Token](https://github.com/settings/tokens) instead. Simply copy and paste your token from your [Github Settings](https://github.com/settings/tokens). (This happens if you have set up [Github's Two-Factor Authentication](https://github.com/blog/1614-two-factor-authentication) feature.)_ - -#### Happy Hacking! - -See the instructions below on [Using DuckPAN](#using-duckpan). - ------- - -## Using DuckPAN - -Running `$ duckpan` with no commands will output some help information. More details on the DuckPAN commands can be found in the [DuckPAN Readme](https://github.com/duckduckgo/p5-app-duckpan#using-duckpan). - -The next section on [testing triggers](https://duck.co/duckduckhack/testing_triggers) will show you how to use DuckPAN to interactively test your triggers. diff --git a/duckduckhack/resources/video-tutorials.md b/duckduckhack/resources/video-tutorials.md deleted file mode 100644 index b386d2693..000000000 --- a/duckduckhack/resources/video-tutorials.md +++ /dev/null @@ -1,21 +0,0 @@ -# Video Tutorials - -We have some video tutorials (screencasts) which accompany our DuckDuckHack documentation. - -## Setting up your environment - -Watch a visual guide to setting up GitHub and Codio, the easiest way to start making DuckDuckGo Instant Answers. - -[Watch video on Vimeo](https://vimeo.com/132712266) - -![https://vimeo.com/132712266](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fscreencast_environment-setup.jpg&f=1) - -## Multiple API endpoints - -Learn how to handle multiple API endpoints when developing a DuckDuckGo Instant Answer. - -[Watch video on Vimeo](https://vimeo.com/137152536) - -![https://vimeo.com/137152536](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fscreencast_multiple-endpoints.jpg&f=1) - - diff --git a/duckduckhack/spice/spice_advanced_frontend.md b/duckduckhack/spice/spice_advanced_frontend.md deleted file mode 100644 index ffdb1b294..000000000 --- a/duckduckhack/spice/spice_advanced_frontend.md +++ /dev/null @@ -1,50 +0,0 @@ -# Advanced Spice Frontend - -## Accessing the query remainder - -It's possible to get the user's full original query with `DDG.get_query()`, but often you may only need a specific part of it. - -For example, let's look at the [Hacker News IA](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/lib/DDG/Spice/HackerNews.pm). - -If a user searches for something like "hacker news oculus rift", you may want to ignore the trigger words ("hacker news") and only retrieve what the user was searching for ("oculus rift"). - -You could replace those trigger words manually, but it's better not to have a duplicate list of trigger words between your backend and frontend code. Luckily there's a way to get the user's query as processed by the backend code. - -```javascript -var script = $('[src*="/js/spice/hacker_news/"]')[0], - source = $(script).attr("src"), - query = source.match(/hacker_news\/([^\/]+)/)[1], - decodedQuery = decodeURIComponent(query); - -console.log(decodedQuery); // "oculus rift" -``` - -Here's what this snippet does: - -``` -var script = $('[src*="/js/spice/hacker_news/"]')[0], - source = $(script).attr("src"), -``` - -The JSONP response from the Spice query will be retrieved as a script with a source of `/js/spice/hacker_news/oculus%20rift`. The first part of this (`/js/spice/hacker_news/`) will always be the same for our Spice, so we can use jQuery to get access to our `script` tag, and get its full `src` attribute. - -At this point the `source` variable contains `/js/spice/hacker_news/oculus%20rift`. - -``` - query = source.match(/hacker_news\/([^\/]+)/)[1], - decodedQuery = decodeURIComponent(query); -``` - -Then we use regular expressions to get anything after `/hacker_news/`, and run it against `decodeURIComponent()` to remove all URL encoded characters. - -If you're returning multiple values in your backend `handle` function, you may need some more logic. For instance: - -``` -// our JSONP response has src like "/js/spice/example_answer/term1/term2" - -var matches = source.match(/example_answer\/([^\/]+)\/([^\/]+)/), - partOne = matches[1], // equals "term1" - partTwo = matches[2]; // equals "term2" -``` - -(More for this section is coming soon! Know what should go here? Then **please** [contribute to the documentation](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/CONTRIBUTING.md)!) diff --git a/duckduckhack/spice/spice_basic_tutorial.md b/duckduckhack/spice/spice_basic_tutorial.md deleted file mode 100644 index 2f08d05b9..000000000 --- a/duckduckhack/spice/spice_basic_tutorial.md +++ /dev/null @@ -1,472 +0,0 @@ -# Basic Spice Tutorial - -In this tutorial, we'll be making a Spice Instant Answer that lets you search for Node.js packages, using the [Node Packaged Modules API](http://registry.npmjs.org/uglify-js/latest). The end result works [like this](https://next.duckduckgo.com/?q=npm+http-server). - -First, however, you'll learn an easy tool that automates much of the details. - -## Let Us Know What You're Working On - -**Before you start coding your new Instant Answer, let us know your plans.** By involving us early we can provide guidance and potentially save you a lot of time and effort. - -Email us at [open@duckduckgo.com](mailto:open@duckduckgo.com) with what idea you're working on and how you're thinking of going about it. - -## Automatically Generate Your Spice Files - -The following tutorial will walk through each file and line of code necessary to build and test the example Spice. However, for building your *own* Instant Answer, we've created a tool that **automatically creates the necessary boilerplate files**, with all of the correct naming conventions. - -The `duckpan new` tool will create the following Spice files for you automatically, with the correct paths and naming conventions inside each file: - -- The backend Perl file with the right name, in the `DDG/Spice/` directory -- The frontend handlebars and JavaScript files, in the `share/spice/` directory -- The test file, in the `t/` testing directory - -This allows you to focus on what makes your Spice unique. To use this tool, follow these instructions: - -1. After [setting up your environment](https://duck.co/duckduckhack/setup_dev_environment), open your Terminal and enter the root directory of your local repository, `zeroclick-spice\`. -2. At the command line, type `duckpan new` and hit enter. -3. When prompted, enter what you want to call your Spice Instant Answer. - - *For example, `ron swanson quotes`. White spaces and character casing are automatically formatted.* - -4. You will see a list of the boilerplate files created for you, each with the proper naming conventions already done: - - ``` - [09:22 PM ... zeroclickinfo-spice {master}]$ duckpan new - Please enter a name for your Instant Answer : ron swanson quotes - Created file: lib/DDG/Spice/RonSwansonQuotes.pm - Created file: share/spice/ron_swanson_quotes/ron_swanson_quotes.handlebars - Created file: share/spice/ron_swanson_quotes/ron_swanson_quotes.js - Created file: t/RonSwansonQuotes.t - Successfully created Spice: RonSwansonQuotes - ``` - -Congratulations! You've breezed through a lot of typing, files, and naming conventions. In the following tutorial, we'll explain each line of code and how to customize it to your Instant Answer idea. - -## NPM Spice - Backend (Perl) - -We'll start building our Spice on the backend, by first creating a Perl file, [NPM.pm](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/lib/DDG/Spice/Npm.pm). - -Our Perl file is located in [zeroclickinfo-spice/lib/DDG/Spice/](https://github.com/duckduckgo/zeroclickinfo-spice/tree/master/lib/DDG/Spice) and will end up containing the following: - -```perl -package DDG::Spice::Npm; -# ABSTRACT: Returns package information from npm package manager's registry. - -use strict; -use DDG::Spice; - -primary_example_queries "npm underscore"; -description "Shows an NPM package"; -name "NPM"; -code_url "https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/lib/DDG/Spice/Npm.pm"; -icon_url "/i/npmjs.org.ico"; -topics "sysadmin", "programming"; -category "programming"; -attribution github => ['https://github.com/remixz', 'zachbruggeman'], - twitter => ['https://twitter.com/zachbruggeman', 'zachbruggeman']; - -triggers startend => 'npm', 'nodejs'; -triggers start => 'npm install'; - -spice to => 'http://registry.npmjs.org/$1/latest'; -spice wrap_jsonp_callback => 1; - -handle remainder_lc => sub { - return $_ if $_; - return; -}; - -1; -``` - -Let's go through line by line. - -## Naming our Spice Package - -To begin, open your favorite text editor like [gedit](http://projects.gnome.org/gedit/), notepad or [emacs](http://www.gnu.org/software/emacs/) and type the following: - -```perl -package DDG::Spice::Npm; -# ABSTRACT: Returns package information from npm package manager's registry. -``` - - - -Each Instant Answer is a [Perl package](https://duckduckgo.com/?q=perl+package), so we start by declaring the package namespace. For a new Spice (or any new Instant Answer), you would change **npm** to the name of the Instant Answer (written in [CamelCase](https://duckduckgo.com/?q=camelcase) format). - -The second line is a special comment line that is used for documentation purposes. - -## Import the Spice Class - -Next, type the following [use statement](https://duckduckgo.com/?q=perl+use) to import [the magic behind](https://github.com/duckduckgo/duckduckgo/tree/master/lib/DDG) our Instant Answer system. - -```perl -use DDG::Spice; -``` - -**Note:** Right after the above line, you should include any Perl modules that you'll be leveraging to help generate the answer. **Make sure** you add those modules to the `dist.ini` file in this repository. If you're not using any additional modules, carry on! - -## Define the Meta Properties - -The meta properties assist in the display, classification, and attribution of your Instant Answer. Some of these properties are self-explanatory; all are detailed in the [metadata section](https://duck.co/duckduckhack/metadata). - -```perl -primary_example_queries "npm underscore"; -description "Shows an NPM package"; -name "NPM"; -code_url "https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/lib/DDG/Spice/Npm.pm"; -icon_url "/i/npmjs.org.ico"; -topics "sysadmin", "programming"; -category "programming"; -attribution github => ['https://github.com/remixz', 'zachbruggeman'], - twitter => ['https://twitter.com/zachbruggeman', 'zachbruggeman']; -``` - -For now, feel free to copy, paste, and edit these values into your file. - -## Define the Trigger Word(s) - -On the next line, type: - -```perl -triggers startend => 'npm', 'nodejs'; -triggers start => 'npm install'; -``` - -**triggers** are keywords/phrases that tell us when to make the Instant Answer run. When a particular *trigger word* (or phrase) is part of a search query, it tells DuckDuckGo to *trigger* the Instant Answer(s) that have indicated they should trigger for the given word (or phrase). - - - -Let's say someone searched "**npm uglify-js**". "**npm**" is the *first* word, so it would trigger our Spice because the **startend** keyword says, "Make sure these *trigger words* are at the *start*, or the *end*, of the query." - -For the second trigger line, `triggers start` defines phrases that can be found at the start of a query. The **=>** symbol is there to separate the trigger words from the keywords (for readability). More on triggers can be found in the [triggers overview](https://duck.co/duckduckhack/spice_triggers). - -### Triggers in Multiple Languages - -We have plans to make it possible to trigger Instant Answers in many different languages. Until an internationalization mechanism is place, to uphold maintainability and consistency, **we cannot accept pull requests that add languages directly in the code.** - -## Define the API Call - -On the next line enter: - -```perl -spice to => 'http://registry.npmjs.org/$1/latest'; -``` - -The **spice to** attribute indicates the API endpoint we'll be using, which means a `GET` request will be made to this URL. The URL has a **$1** placeholder, which will eventually be replaced with whatever string our `handle` function (which we'll define shortly) returns. Generally, Spice Instant Answers use a search endpoint for a given API and so, we'll need to pass along our search term(s) in the API request. We do this by returning the desired search terms in the `handle` function and then the **$1** placeholder, in the `spice to` URL, will be replaced accordingly. - -Please note that we prefer to use **HTTP** endpoints, even when an HTTPS endpoint is available. The faster connections make for a better user experience. User security and privacy is not violated because all requests are proxied through an HTTPS connection to the DuckDuckGo servers. - - - -Using the previous example, if we wanted to search for "**uglify-js**" with the NPM API, we'd need to replace `$1` with `uglify-js` which would result in this URL: . If you follow that link, you'll notice the API returns a JSON object containing all the data pertaining to the "uglify-js" NPM Package. - -## Indicate our Callback Function - -In most cases, APIs allow for a "callback" parameter, which usually looks like this: - -```perl -http://www.api.awesome.com/?q=&callback= -``` - -This parameter is used to wrap the JSON object being returned, in a JavaScript function call to the function named in the `callback` parameter. Unfortunately, the NPM API doesn't allow for this parameter to be specified, so we force this manually by using the **spice wrap\_jsonp\_callback** function. Enter this text on the next line to do this: - -```perl -spice wrap_jsonp_callback => 1; -``` - - - -Now, when the JSON is returned by the API, it will be wrapped in a call to our Spice's JavaScript callback function, which we'll define later. - ------- - -**If the API *did* support the callback parameter**, our `spice to` would look like this: - -```perl -spice to => 'http://registry.npmjs.org/$1/latest?callback={{callback}}'; -``` - -Where `{{callback}}` is another special placeholder which will be **automatically** replaced with the correct Spice callback function name. - -**Note:** Not every API uses the word "callback" for their callback parameter. Some use "jsonp" (i.e.`&jsonp=myCallbackFn`), but these names are simply convention. Therefore it's best to read the documentation for the API you're using to ensure the correct callback parameter name is used. - -## Define the Handle Function - -Moving on, enter this on the next line: - -```perl -handle remainder => sub { -``` - -Once triggers are specified, we define how to *handle* the query. `handle` is another keyword, similar to **triggers**. - -You can *handle* different parts of the search query, but the most common is the **remainder**, which refers to the remainder of the query, after the first matched trigger word/phrase has been removed. - - - -For example, if the query was "**npm uglify-js**", the trigger would be *npm* and the **remainder** would be *uglify-js*. - -Now let's add a few more lines to complete the handle function: - -```perl -handle remainder => sub { - return $_ if $_; - return; -}; -``` - -This function (the part within the **{}**, after **sub**) is a very important part of the Spice. It defines what our Spice Instant Answer will replace the **$1** placeholder with. - -Whatever you are *handling* is passed to the `handle` function in the **$\_** variable ( **$\_** is a special default variable in Perl that is commonly used to store temporary values). For example, if you searched DuckDuckGo for *"npm uglify-js"*, the value of **$\_** will be *"uglify-js"*, i.e. the **remainder** of the query. - -Let's take a closer look at the first line of the function: - -```perl -return $_ if $_; -``` - -The heart of the function is just this one line. The **remainder** is in the **$\_** variable as discussed. If it is not blank ( **if $\_** ), we return the **$\_** variable, which as we just saw, contains the **remainder** of the query. - -If we are unable to provide a good Instant Answer, we simply **return nothing**. That's exactly what the second line in the function does: - -```perl -return; -``` - -This line is only run if **$\_** contained nothing, because otherwise the line before it would return something and end the function execution. - -If for example you searched DuckDuckGo for "npm", this would trigger our NPM Spice, and then in the `handle` function the value of **$\_**, the **remainder** of the query, would be blank (because "npm" is the trigger word and would have been stripped out) and so our handle function would **return nothing**, meaning no API call would be made, and no result will be displayed. - -## Return True at EOF - -Finally, all Perl packages that load correctly should [return a true value](http://stackoverflow.com/questions/5293246/why-the-1-at-the-end-of-each-perl-package) so add a `1;` on the very last line. - -```perl -1; -``` - -And that's it! At this point you have written a functional backend for a Spice Instant Answer. Now, the frontend components need to written so that we can display our Instant Answer result on the page. - -## Recap (So Far) - -The Instant Answer system works like this at the highest level: - -- First, DuckDuckGo breaks down the query (search terms) into separate words. - -- Then we see if any of those words or groups of words are **triggers** for any Instant Answers. These **triggers** are defined by the developer when creating an Instant Answer. In the example we used above, the trigger word is "**npm**". - -- If a Spice is triggered, we run its `handle` function. - -- If the Spice's `handle` function returns a value, it is used to replace our **$1** placeholder in the **spice to** URL, and then a request is made to that URL. When the API responds with a JSON object, it is wrapped in a function call, making the JSON object the input to our JavaScript callback function. - - ------- - -# NPM Spice - Frontend (JavaScript) - -As mentioned, every Instant Answer requires a Spice callback function. For the *NPM* Instant Answer, the callback function will be named `ddg_spice_npm()` and will be defined in the [npm.js](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/share/spice/npm/npm.js) file. - -The name of the callback function is determined by the **Npm.pm** Perl module we created above, which specifies the name of the package, `DDG::Spice::Npm`. The portion after `DDG::Spice::` is lower cased and converted from camel case to underscore separated (i.e. `DDG::Spice::CamelCase` -> `ddg_spice_camel_case`) in order to create the name of our callback function. - -This generated name is what the previous `{{callback}}` placeholder will be replaced with. Similarly, if we instead had to use `spice wrap_jsonp_callback`, that will also wrap the JSON returned by the API with a function call to this generated callback name. - -In practice: - -```perl -{{callback}} => ddg_spice_npm -``` - -or - -``` -{ JSON_API_RESPONSE: 1, ... } => ddg_spice_npm( { JSON_API_RESPONSE: 1, ... } ); -``` - -The final [npm.js](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/share/spice/npm/npm.js) will be located in [zeroclickinfo-spice/share/spice/npm/](https://github.com/duckduckgo/zeroclickinfo-spice/tree/master/share/spice/npm) and end up as follows: - -```javascript -(function (env) { - "use strict"; - env.ddg_spice_npm = function(api_result){ - - if (!api_result || api_result.error) { - return Spice.failed('npm'); - } - - Spice.add({ - id: "npm", - name: "Software", - data: api_result, - meta: { - sourceName: "npmjs", - sourceUrl: 'http://npmjs.org/package/' + api_result.name - }, - normalize: function(item) { - ... - }, - - templates: { - group: 'text', - options: { - content: Spice.npm.content, - moreAt: true - } - } - }); - }; -}(this)); -``` - -Let's go through each line. - -## Invoke an Immediate Function - -###### npm.js (continued) - -```javascript -(function (env) { - "use strict"; -``` - - - -We begin by invoking an anonymous, immediately-executing function, which takes an object as input (i.e. the environment). This is better known as the JavaScript "[Module Pattern](http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript)" and it ensures that any variables or functions created within our anonymous function do not affect the global scope. It also allows us to explicitly import anything from the outside environment, which we use to pass along the global scope into our `env` variable (you'll see this at the end), so we can still access and modify the global scope as needed. After creating our module, we then turn on JavaScript's [Strict Mode](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FFunctions_and_function_scope%2FStrict_mode) which also offers various benefits. You don't really need to understand the purpose of these first two lines to create a Spice Instant Answer; however, they're both necessary and must be included when defining a Spice callback function. - -## Define our Callback Function - -```javascript - env.ddg_spice_npm = function (api_result) { -``` - - - -We now define our callback function, `ddg_spice_npm`, using a function expression and set it as a property of the `env` object that was passed into our anonymous function. The name we specify here ***must*** match the name of our Spice package, which we discussed above. We also specify that the callback function takes one input parameter, which we have named `api_result`. All Spice callback functions should look like this. The name for the input should **always** be called `api_result`. This is part of our naming convention and helps to standardize the JavaScript code. - -## Validate our API Response - -###### npm.js (continued) - -```javascript - if (api_result.error) { - return Spice.failed('npm'); - } -``` - - - -Here we specify that if the `error` property in the API result is defined (meaning there are no results to use) we `return` a call to `Spice.failed('npm')`, which stops the execution of the function and as a result, won't display an Instant Answer. It's important to use `Spice.failed();` because this lets the rest of the Spice system know our Spice isn't going to display so that other relevant answers can be given an opportunity to display. - -In other cases, because most APIs return an array of results, a similar check should be made to see if the results array has a `length`. This way, if no results were returned from the API we can stop and display nothing. - -Moving on, the next part is very important, it defines how the Spice result should look and specifies which parts of the API result are important. This piece of code tells DuckDuckGo to show the Instant Answer: - -## Display our Spice Result (and Specify some Details) - -###### npm.js (continued) - -```javascript - ... - Spice.add({ - id: "npm", - name: "Software", - data: api_result, - meta: { - sourceName: "npmjs", - sourceUrl: 'http://npmjs.org/package/' + api_result.name - }, - normalize: function(item) { - ... - }, - - templates: { - group: 'text', - options: { - content: Spice.npm.content, - moreAt: true - } - } - }); -``` - -Here we make a call to the `Spice.add()` function, which operates on an input object that we normally define inside the function call. - -Full documentation of these properties can be found at the [display reference](https://duck.co/duckduckhack/display_reference). A few notes in particular: - -- [**`data`**](https://duck.co/duckduckhack/display_reference#codedatacode-emobjectem-required) is the object or array that is passed along (item by item, if iterable) to the handlebars template. In most cases the `data` parameter should be set to `api_result` so all the data returned from the API is accessible to the template. -- [**`normalize`**](https://duck.co/duckduckhack/display_reference#codenormalizecode-emfunctionem-optional) is an optional function that is useful for "pre-processing" each item in `data` before it is used by the template. -- [**`templates`**](https://duck.co/duckduckhack/display_reference#codetemplatescode-emobjectem-required) specifies the template group, templates, and other display options to apply when rendering the results to the DuckDuckGo AnswerBar. Here, we use the [Text Template Group](https://duck.co/duckduckhack/template_groups#text-template-group). - -## Global Import - -```javascript - } -}(this)); -``` - -Lastly, we close our callback function expression, as well as our module, and we "import" the global scope, via `this`, as the input to our module. This means within the module, we can access the global scope using the `env` variable defined at the very beginning. - -## Defining Templates - -At this point, the rendering of the Spice Instant Answer changes context from JavaScript to Handlebars.js. As mentioned, our `Spice.add()` call specifies our template group and the **context** for the template. - -We specified the [Text Template Group](https://duck.co/duckduckhack/template_groups#text-template-group). This is a preset, which automatically picks the `text_item` and `text_detail` for multiple and single results, respectively. Practically speaking, the NPM Spice by its nature can only return one result at a time - hence just `text_detail`. - -### Creating a Custom Sub-Template - -The [`text_detail` template](https://duck.co/duckduckhack/templates_reference#codetextdetailcode-template) has an ability to pass a `content` sub-template. We pass it a custom handlebars template that we created for this Instant Answer. It is located at [`spice/npm/content.handlebars`](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/share/spice/npm/) and is thus compiled into a handlebars function titled `Spice.npm.content` ([explained here](https://duck.co/duckduckhack/subtemplates#custom-subtemplates)). - -Let's quickly look at the file [`content.handlebars`](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/share/spice/npm/content.handlebars) to see how it displays the Instant Answer result. Detailed information can be found in the [sub-templates section](https://duck.co/duckduckhack/subtemplates). - -```html -
$ npm install {{name}}
-``` - -As you can see, we access the `name` property of each item. This is possible because it was present in the `data` property, to which we directly passed this `api_result`. - -```json -{ - - "name": "http-server", - "version": "0.6.1", - "author": ... - ... -} -``` - -With this sub-template added, our NPM Spice frontend is complete. - -## All Done! - -And that's it, you're done! You now have a working Spice Instant Answer! The backend (Perl) tells DuckDuckGo when to trigger our Spice and the frontend (JavaScript & Handlebars) tells DuckDuckGo what to put on the page. Before moving on, lets do a quick recap... - -## What We've Accomplished - -We've created **one** file in the Spice lib directory, `lib/DDG/Spice/`: - -- `Npm.pm` - defines the API to use and the triggers for our Spice - -We've created **two** files in the Spice share directory, `share/spice/npm/`: - -- `npm.js` - delegates the API's response and calls `Spice.add()` -- `content.handlebars` - specifies the Instant Answer's HTML structure and determines which properties of the API response are placed into the HTML result - -To recap, the Spice Instant Answer system works like so: - -- First, DuckDuckGo breaks down the query (search terms) into separate words. - -- Then we see if any of those words or groups of words are **triggers** for any Instant Answers. These **triggers** are defined by the developer when creating an Instant Answer. In the example we used above, the trigger word is "**npm**". - -- If a Spice is triggered, we run its `handle` function. - -- If the Spice's `handle` function returns a value, it is used to replace our **$1** placeholder in the **spice to** URL, and then a request is made to that URL. When the API responds with a JSON object, it is wrapped in a function call, making the JSON object the input to our JavaScript callback function. - -- Our JavaScript callback function takes the API result (JSON Object), and passes it along to our `Spice.add()` call which specifies, using the elements of the JSON object, which parts are to be used in creating the Instant Answer "More at" link and most importantly, passes along our JSON object to our Spice's Handlebars template. - -- The template then defines, using HTML and variables, what the actual content for the Spice result will be - -- This content is then created and rendered onto the page by the Spice system's backend. - -## Next Steps - -Congratulations! You have now written your first Spice Instant Answer. Now, let's move on to testing, so we can make sure our Instant Answer functions as expected! diff --git a/duckduckhack/spice/spice_frontend_walkthroughs.md b/duckduckhack/spice/spice_frontend_walkthroughs.md deleted file mode 100644 index df828b49e..000000000 --- a/duckduckhack/spice/spice_frontend_walkthroughs.md +++ /dev/null @@ -1,1010 +0,0 @@ -# Spice Frontend Walkthoughs - - - -## Alternative.To Walkthrough (Simple) - -The [Alternative.To Instant Answer](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/share/spice/alternative_to/alternative_to.js) is very similar to NPM in that it's also relatively simple. However, it returns multiple items, and so it produces a tile view, where each tile represents a single result item. Let's take a look at the code and see how this is done: - - -###### alternative_to.js - -```javascript -(function(env) { - "use strict"; - - env.ddg_spice_alternative_to = function(api_result) { - - if (!api_result || !api_result.Items) { - return Spice.failed('alternative_to'); - } - - Spice.add({ - id: 'alternative_to', - name: 'Software', - data: api_result.Items, - signal: 'high', - meta: { - searchTerm: api_result.Name, - itemType: 'Alternatives', - sourceUrl: 'http://alternativeto.net/', - sourceName: 'AlternativeTo' - }, - normalize: function(item) { - return { - ShortDescription: DDG.strip_html(DDG.strip_href(item.ShortDescription)), - url: item.Url, - icon: item.IconUrl, - title: item.Name, - description: item.ShortDescription - }; - }, - templates: { - group: 'icon', - options: { - footer: Spice.alternative_to.footer - } - } - }); - }; - - Handlebars.registerHelper("AlternativeTo_getPlatform", function (platforms) { - return (platforms.length > 1) ? "Multiplatform" : platforms[0]; - }); - -}(this)); -``` - -Just like the NPM Spice, Alternative.To uses `Spice.add()` with most of the same properties. However, it also uses a few new properties as well. The biggest difference between the two Spices though, is that **the AlternativeTo API returns an array of items, which is given to `data`,** rather than a single item like the NPM API. - -This means first and foremost, that we'll be dealing with a tile view, so that each item can be separately displayed. In order to do that, we must specify an `item` template which determines the content of each tile. Let's begin by taking a look at the new `Spice.add()` properties used by Alternative.To: - -- `searchTerm` is used to indicate the term that was searched, stripped of unimportant words (e.g., "cat videos" would be "cat") or more formally, this is known as the *[noun adjunct](https://en.wikipedia.org/wiki/Noun_adjunct)*. The `searchTerm` will be used for the MetaBar wording where it reads, for example, "Showing 10 **iTunes** Alternatives", where "iTunes" is the `searchTerm` for the query "alternatives to iTunes". - -- `itemType` is the type of item being shown (e.g., Videos, Images, Alternatives) and this is also used in the MetaBar. In the previous example, "Showing 10 **iTunes** Alternatives", "Alternatives" is the `itemType`. - -- `normalize` allows you to normalize an item before it is passed on to the template. You can add or modify properties of the item that are used by your templates. In our case, we're using `normalize` to modify the `ShortDescription` property of each item, by removing HTML content from it and we also use it to add a few properties to our `item`, which our template will use. - - **Note:** This function uses jQuery's `$.extend()` method, so it will modify your `data` object by adding any returned properties that don't already exist, or simply overwrite the ones that do. - -- `templates` is used to specify the template `group` and any other templates that are being used. Template `options` may also be provided to enable or disable template components used by the chosen `group`. In our case we've specified that we're using the `icon` template group and in the `options` block, we've specified the sub-template to be used for the `footer` component. - - The `icon` template has a few features including a `title`, `icon` and `description`. It also has an optional `footer` feature, which is actually a sub-template. We've created a **footer.handlebars** template and placed in the AlternativeTo Spice's share directory, **/share/spice/alternative_to**. We specify in the `options` block that the template to be used for the `footer` feature is the template we've created by referencing its name: `Spice.alternative_to.footer`. - ------- - -Now, let's take a look at the Footer Handlebars template: - -###### footer.handlebars (in /share/spice/alternative_to/) - -```html -
- {{Votes}} likes{{#if Platforms}} • {{AlternativeTo_getPlatform Platforms}}{{/if}} -
-``` - -As you can see, this is some fairly simple HTML, which contains a few Handlebars expressions referencing properties of `data` as well as some [Handlebars helpers](https://duck.co/duckduckhack/handlebars_helpers) functions (i.e. `if` and `AlternativeTo_getPlatform`). - -These helpers are really JavaScript functions, which operate on input and return their content to the template. - -The `if` helper is a **block helper**, which acts like a normal `if` statement. When the specified variable exists, the code contained within the block, `{{#if}}...{{/if}}`, is executed. In our case, we use it to make sure the `Platforms` property is defined for the current item (remember we're looping over each item and applying this template) and if so, we add a bullet point, ` • ` and the result of `{{AlternativeTo_getPlatform Platforms}}` to the page. - -You may have noticed that `AlternativeTo_getPlatform` is actually defined alongside our `ddg_spice_alternative_to` callback function. Let's take a quick look at it: - -###### alternative_to.js - -```javascript - Handlebars.registerHelper("AlternativeTo_getPlatform", function (platforms) { - return (platforms.length > 1) ? "Multiplatform" : platforms[0]; - }); -``` - -This code demonstrates how Handlebars helpers are created and made available to the templates. Using the `Handlebars.register()` method, you are able to specify the name of the helper you are registering, as well as the function it executes. The `AlternativeTo_getPlatform` helper is very simple: it takes an array as input and depending on the length, returns either the first element in the array, or if more than one element exists, returns the string "Multiplatforms". - -The AlternativeTo Spice also uses a little bit of CSS to further customize and perfect the layout of the tiles. Let's take a look at the CSS: - -###### alternative_to.css - -```css -.tile--alternative_to .tile__icon { - float: right; - margin-top: 0; - margin-right: 0; -} - -.tile--alternative_to .tile__body { - height: 13em; -} - -.tile--alternative_to .tile__footer { - bottom: 0.6em; -} -``` - -As you can see, this Spice requires very little CSS. This layout is a bit unique and so we opted to modify the layout of the content slightly. In most case the use of templates will alleviate the need to write custom CSS, however sometimes it is necessary and can be used sparingly. - -The most important thing to note is that we have prefaced each of our CSS rules with the class `.tile--alternative_to`. Each Spice Instant Answer is wrapped in a `
` that has a class called `.zci--` where `` matches the Spice's package name. As well, when a tile view is used, *each tile* is wrapped in a `div` that has a class called `.tile--`. These allow us to **namespace** all the CSS rules for each individual Spice and their tiles. The is very important because DuckDuckGo simultaneously loads and triggers multiple Spice Instant Answers (depending on the query) and so namespaceing the CSS is necessary to ensure that none of our Spices' CSS rules affect other elements on the page. If your Spice requires any CSS, it **must** only target child elements of `.zci--` for the detail area and/or `.tile--` for the tiles. - - - - - - - diff --git a/duckduckhack/spice/spice_js_api.md b/duckduckhack/spice/spice_js_api.md deleted file mode 100644 index 6f3dc7fe0..000000000 --- a/duckduckhack/spice/spice_js_api.md +++ /dev/null @@ -1,388 +0,0 @@ -## Spice JavaScript API Reference - -For a list of avaliable Spice JS functions see: - -- [DDG Namespace Functions](http://duck.co/duckduckhack/spice_js_api#ddg-namespace) -- [Spice Namespace Functions](http://duck.co/duckduckhack/spice_js_api#spice-namespace) - -# DDG Namespace - - -## get_query_encoded() - -Provides the value of `DDG.get_query` as a URIEncoded string - -Note: The query is trimmed (i.e. no leading or trailing spaces) and -has any extra spaces within the query removed - - -## get_query() - -Provides the search query, as displayed in the search box - -Note: The query is trimmed (i.e. no leading or trailing spaces) and -has any extra spaces within the query removed - - -## get_is_safe_search() - -Indicates if "safe search" is on, for the current query - -**Returns** - -*boolean*, Either `1` or `0` (on/off) - - -## get_asset_path(spice_name, asset) - -Provides the path to the given asset, for the specified Spice Instant Answer - -Example: - -`DDG.get_asset_path('quixey', 'quixey_logo.png')` -> `'/share/spice/quixey/1234/quixey_logo.png'` - -**Parameters** - -**spice_name**: *string*, The name of the Spice (this gives us the correct `/spice/share` sub-directory) - -**asset**: *string*, The filename of the asset, including extension - - -## getRelevants(p) - -Provides an array of relevant strings, given an input array of comparator strings - -Note: This is a shortcut to running `isRelevant()` against an array and collecting only the relevant results - -Example: - -```javascript -var relevants = DDG.getRelevants({ - num: 10, // the first 10 relevant candidates will be returned - candidates: ['is this relevant', 'is this one relevant', 'how about this one', ... ], //candidate strings - skipArray: ['a', 'list', 'of', 'words'], //words to ignore in comparison - strict: false -}); -``` -Only the `candidates` array is required, the other parameters are optional. `num` defaults to `candidates.length` - -**Parameters** - -**p**: *object*, An object containing an array of candidate strings and other optional parameters to be passed along to `DDG.isRelevant`, including: `num` - the maximum amount of results to return, `skipArray`, `minWordLength`, and `strict` - - -## isRelevant(candidate, skipArray, minWordLength, strict) - -Determines if the candidate string is relevant to **the search query** - -**Parameters** - -**candidate**: *string*, The string to be checked for relevancy - -**skipArray**: *array*, **[optional]** An array of words (usually the trigger words) that should not be considered in determining the candidate string's relevancy - -**minWordLength**: *number*, **[optional]** The minimum length for any words to be considered in the comparison (used to ignore small words like "to", "and", "is", "a", etc.), Default: `4` - -**strict**: *boolean*, **[optional]** Turns on stricter relevancy checking, by switching candidate and comparator strings, Default: `0` - - -## stringsRelevant(s1, s2, skipArray, minWordLength, strict) - -Determines if the candidate string is relevant to the given comparator string - -**Parameters** - -**s1**: *string*, The string to be checked for relevancy - -**s2**: *string*, The string to be compared against - -**skipArray**: *array*, **[optional]** An array of words (usually the trigger words) that should not be considered in determining the candidate string's relevancy - -**minWordLength**: *number*, **[optional]** The minimum length for any words to be considered in the comparison (used to ignore small words like "to", "and", "is", "a", etc.), Default: `4` - -**strict**: *boolean*, **[optional]** Turns on stricter relevancy checking, by switching candidate and comparator strings, Default: `0` - - -## parse_link(string, wanted) - -Parses a string containing an anchor tag, ('text'), and returns the URL or text -as indicated - -Note: If more than one anchor tag exists in the string, the first will be parsed - -Example: - -`str = 'Click here! to see my website.'` - -- `DDG.parse_link(str)` -> `'https://mywebsite.com'` -- `DDG.parse_link(str, 'text')` -> `'Click here!'` -- `DDG.parse_link(str, 'rest')` -> `' to see my website.'` - -**Parameters** - -**string**: *string*, A string containing an anchor tag - -**wanted**: *string*, **[optional]** The piece of the link to return Default: `'url'` - - -## getDateFromString(date) - -Provides a JavaScript `Date()` object for the given Date string - -**Parameters** - -**date**: *string*, Date string in UTC format with time (yyyy-mm-ddThh:mm:ss) or without (yyyy-mm-dd) - - -## strip_html(html) - -Removes HTML tags/characters from a string - -**Parameters** - -**html**: *string*, String containing HTML - -Example: - -- `strip_html("DuckDuckGo")` -> `"DuckDuckGo"` -- `strip_html("DuckDuckGo'")` -> `"DuckDuckGo"` - -## strip_href(html) -Removes `src` and `href` attributes from a string - -Note: The `src` and `href` attributes are not removed entirely. They are prefixed with `_` - -**Parameters** - -**html** : *string*, String containing `href` or `src` attributes - -Example: - -- `strip_href("DuckDuckGo")` -> `"DuckDuckGo"` -- `strip_href(" `" `'456th'` - -**Parameters** - -**number**: *number*, The number you need an ordinal for - - -## strip_non_alpha(str) - -Removes Non-Alpha characters (`\W`) from a string - -**Parameters** - -**str**: *sting*, The input string to strip - -## capitalize(str) - -Capitalizes the first letter of the given string - -**Parameters** - -**str**: *string*, String to capitalize - - -## capitalizeWords(str) - -Capitalizes the first letter of each word in the given string - -**Parameters** - -**str**: *string*, String to capitalize - - -## getProperty(obj, pathname) - -Provides the member of an object using dot separated path - -It's best to use this only when the sub elements might not be defined, -to avoid complex and awkward expressions. - -Note: Arrays can use the index number since we access object -properties and array indices in the same way - -Example: - -`obj = { a: { b: { c: 'test', d: [1,2,3] }}}` - -- `getProperty(obj, 'a.b.c')` -> `'test'` -- `getProperty(obj, 'a.b')` -> `{ c:'test' }` -- `getProperty(obj, 'a.b.d.0')` -> `1` - -**Parameters** - -**obj**: *object*, the object to look through - -**pathname**: *string*, the dot separated path of object properties and/or array indices - -## isNumber(value) - -Determines if an input is a Number - -**Parameters** - -**value**: the value to check - -Example: - -- `isNumber(10)` -> `true` -- `isNumber("HelloWorld")` -> `false` -- `isNumber(NaN)` -> 'false' - -## abbrevNumber(value) - -Returns an abbreviated string representation of a number. - -**Parameters** - -**value**: *number*, the number to abbreviate - - -Example: - -- `abbrevNumber(1)` -> `1` -- `abbrevNumber(1000)` -> `1k` -- `abbrevNumber(1000000)` -> `1M` - -## commifyNumber(value) - -Returns the comma seperated string representation of a number - -**Parameters** - -**value**: *number*, the number to comma seperate - -Example: - -- `commifyNumber(10000)` -> `10,000` - -## formatDuration(value) - -Returns a string in the format of HH:MM:SS - -**Parameters** - -**value**: *number*, the total milliseconds to format - -Example: - -- `formatDuration(86400000)` -> `24:00:00` -- `formatDuration(150000)` -> `2:30` -- `formatDuration(1000)` -> `0:01` - - -## toHTTPS(url) - -Returns a string with the https protocol - -**Parameters** - -**url**: *string*, A url with the http protocol - -Example: - - `toHTTPS("http://duckduckgo.com")` -> `"https://duckduckgo.com"` - - `toHTTPS("duckduckgo.com")` -> `"duckduckgo.com"` - - -## toHTTP(url) - -Returns a string with the http protocol - -**Parameters** - -**url**: *string*, A url with the https protocol - -Example: - - `toHTTP("https://duckduckgo.com")` -> `"http://duckduckgo.com"` - - `toHTTP("duckduckgo.com")` -> `"duckduckgo.com"` - - -## scaleToFit(width, height, maxWidth, maxHeight) -Returns an object containing width and height properties scaled proportionally to fit within a specified range - -**Parameters** - -**width** : *number*, Current width of an element - -**height** : *number*, Current height of an element - -**maxWidth** : *number*, Max width available for element - -**maxHeight** : *number*, Max height available for element - -Example: - -- `scaleToFit(4,2, 2, 1)` -> `{ width: 2, height: 1 }` -- `scaleToFit(10,10,5,3);` -> `{ width: 3, height: 3 }` - ------- - -# Spice Namespace - - -## add(ops) - -Add a Spice Instant Answer to the AnswerBar and display it - -Note: A detailed explanation of `Spice.add()` can be found in [Displaying your Spice](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/duckduckhack/spice/spice_displaying.md) - -**Parameters** - -**ops**: *object*, The object containing all necessary information for creating a Spice Instant Answer - - -## getDOM(id) - -Provides a scoped DOM for a given Spice id - -Note: Seeing as we maintain a cache, this is more efficient than using jQuery, i.e. `$('spice_name')` - -Example: - -`var $my_spice = Spice.getDOM('my_spice')` - -**Parameters** - -**id**: *string*, The id of the Spice Instant Answer, should match the `id` property of the object given to `Spice.add()` - -**Returns** - -*object*, A jQuery object, matching the selector that targets the given Spice id - - -## registerHelper(id, fn) - -Provides access to `Handlebars.registerHelper()` so you can register helpers for your Spice - -**Parameters** - -**id**: *string*, The name of the helper to register - -**fn**: *function*, The function we are registering - - -## failed(id) - -Alerts the frontend that a Spice has stopped executing, preventing it from being displayed. - -Note: This is generally used when a Spice API returns no useful results. - -Example: - -```javascript -if (/* check for no results */) { - -``` - -**Parameters** - -**id**: *string*, The id of the Spice Instant Answer, should match the `id` property of the object given to `Spice.add()` \ No newline at end of file diff --git a/duckduckhack/spice/spice_overview.md b/duckduckhack/spice/spice_overview.md deleted file mode 100644 index 21c8e2910..000000000 --- a/duckduckhack/spice/spice_overview.md +++ /dev/null @@ -1,64 +0,0 @@ -## Spice Overview - -**If you have questions, [request an invite to our Slack team](mailto:QuackSlack@duckduckgo.com?subject=AddMe) and we'll be happy to chat!** - -Spice Instant Answers are triggered by a backend Perl component that then calls the JSON API of an upstream service. The API response is wrapped in a JavaScript function call. You, the Instant Answer author, define this callback function and handle the API's response on the client side, generating the display from the data returned by the API. - -## Spice API Criteria - -With millions of search queries triggering Instant Answers every day, it's important to choose APIs wisely. There are several criteria for APIs used in Spice Instant Answers. - -First, the technical constraints: - -- APIs called by Spice Instant Answers **must use the JSON or JSONP formats**. We do not support the use of XML (it's coming soon though!), HTML, or plain text responses. -- APIs should respond to requests in **less than one second** (< 1s). -- Avoid **static JSON files**. These often have large payloads and require heavy local processing. Not sure? [Talk to us about your idea](mailto:open@duckduckgo.com). - -Next, API reliability: - -- APIs used should be **reliable**. Pick sources that will be most likely be around and accurate for the foreseeable future. -- APIs created by contributors solely for the purpose of an Instant Answer cannot be accepted. - -Finally, credibility: - -- APIs used should represent the **most credible source** for the information. This means it should draw upon the preferred data source of the relevant community. Look for posts and sources like [these](https://duck.co/forum/thread/37/great-resources-for-instant-answer-ideas) which have been suggested by others. -- APIs must have the appropriate permissions or rights to serve their information. - -If you're not sure about whether the API you'd like to use fits these criteria, we're happy to help figure it out. Email us over at [open@duckduckgo.com](mailto:open@duckduckgo.com). - -## Spice Frontend - -The Spice frontend is the code that is triggered by the Perl backend for your spice Instant Answer. It mainly consists of a function (the Spice "callback" function) that takes a JSON formatted, API response as its input and uses the data to display a Spice result at the top of the DuckDuckGo search results page. - -## Spice Templates - -In order to display the result, the Spice callback function needs to specify a template, which will determine how the result looks. There are several built-in templates to choose from and you are able to choose whichever template works best for the given data and desired output. - -## Third-Party Libraries - -Aside from HTML and CSS, the Spice frontend also utilizes the following third-party libraries: - -- [jQuery](https://jquery.org) v1.10.2 -- and [Handlebars](http://handlebarsjs.com) v1.3.0 - -If you're not already familiar with Handlebars, *please* read the [Handlebars documentationn](http://handlebarsjs.com) before continuing on. Don't worry if you don't fully understand how to use Handlebars, the examples will explain everything. You should, at the very least, familiarize yourself with Handlebars concepts and terminology before moving on. It should only take a few minutes to read! - - - -Likewise, using jQuery is not required for making a Spice Instant Answer. But, it does offer certain benefits, such as cross-browser compatible implementations of various JavaScript functions. For example, jQuery's `$.each()` should be used in place of the native `Array.prototype.forEach()`, as it does **not** work in IE 6,7,8. - -Later, we will walk you through several examples, ranging from simple to complex, which will explain how to use templates and make your Instant Answers look awesome :) - -## Spice Files - -A typical Spice Instant Answer requires several files to function properly. -- The Perl files go in the **lib** directory: `lib/DDG/Spice/InstantAnswerName.pm` -- The frontend files (JS, Handlebars, CSS) discussed later go in the **share** directory: `share/spice/instant_answer_name/` - -**\*\*Note** : The file and folder names must adhere to our naming conventions (covered later) in order for everything to function properly. - -## Let Us Know What You're Working On - -**Before you start coding your new Instant Answer, let us know your plans.** By involving us early we can provide guidance and potentially save you a lot of time and effort. - -Email us at [open@duckduckgo.com](mailto:open@duckduckgo.com) with what idea you're working on and how you're thinking of going about it. diff --git a/duckduckhack/spice/spice_perl_api.md b/duckduckhack/spice/spice_perl_api.md deleted file mode 100644 index 32b6fa7c4..000000000 --- a/duckduckhack/spice/spice_perl_api.md +++ /dev/null @@ -1,7 +0,0 @@ -# Spice Perl API Reference - -(This section is coming soon! Know what should go here? Then **please** [contribute to the documentation](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/CONTRIBUTING.md)!) - -### share() - -(Know what should go here? Then **please** [contribute to the documentation](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/CONTRIBUTING.md)!) diff --git a/duckduckhack/submitting-your-instant-answer/preparing_for_a_pull_request.md b/duckduckhack/submitting/checklist.md similarity index 91% rename from duckduckhack/submitting-your-instant-answer/preparing_for_a_pull_request.md rename to duckduckhack/submitting/checklist.md index 92acae5a3..c7a242b32 100644 --- a/duckduckhack/submitting-your-instant-answer/preparing_for_a_pull_request.md +++ b/duckduckhack/submitting/checklist.md @@ -1,6 +1,13 @@ -# Preparing for Pull Request +# Submission Checklist + +Is the below useful to salvage? + +-------------- + +Checked everything off the list? Congratulations - you are now ready to [add metadata](https://duck.co/duckduckhack/metadata) to your Instant Answer which will help us to understand it a little better. + +-------------- -The culmination of your contribution comes in the form of a pull request to the Github repository for your Instant Answer type. Before proceeding, make sure you've done the following steps. @@ -24,6 +31,5 @@ Before proceeding, make sure you've done the following steps. - Can this Instant Answer return an HTML response? - Have you guaranteed that the response does not contain unsanitized user-supplied strings (e.g., the query string) which could lead to [cross-site scripting attacks](https://duckduckgo.com/Cross-site_scripting?ia=about)? -## Proceed to Adding Metadata -Checked everything off the list? Congratulations - you are now ready to [add metadata](https://duck.co/duckduckhack/metadata) to your Instant Answer which will help us to understand it a little better. \ No newline at end of file +-------------- \ No newline at end of file diff --git a/duckduckhack/submitting/maintaining.md b/duckduckhack/submitting/maintaining.md new file mode 100644 index 000000000..c2e561122 --- /dev/null +++ b/duckduckhack/submitting/maintaining.md @@ -0,0 +1,3 @@ +# Maintaining your Instant Answer + +(This section should talk about regularly checking on their IA and IA page, prodding the community for feedback/improvements, and owning the query_space long term.) \ No newline at end of file diff --git a/duckduckhack/submitting-your-instant-answer/submission_and_review.md b/duckduckhack/submitting/pull-request.md similarity index 60% rename from duckduckhack/submitting-your-instant-answer/submission_and_review.md rename to duckduckhack/submitting/pull-request.md index 3e41d507e..2b4802739 100644 --- a/duckduckhack/submitting-your-instant-answer/submission_and_review.md +++ b/duckduckhack/submitting/pull-request.md @@ -1,11 +1,10 @@ -# Making a Pull Request - -Now that you have completed the [pull request checklist](https://duck.co/duckduckhack/preparing_for_a_pull_request) and added [Metadata](https://dukgo.com/duckduckhack/metadata) to your Instant Answer, you are ready to submit a pull request. +# Submitting a Pull Request +The culmination of your contribution comes in the form of a pull request to the Github repository for your Instant Answer type. A pull request is a great, transparent way to review and discuss potential changes to a repository. ## Committing Your Changes -The first step in submitting your changes is to commit your changes to your local repository. If you've already done this, you can skip to [submitting a pull request](#submitting-a-pull-request), below. +The first step is to commit your changes to your local repository. If you've already done this, you can skip to [submitting a pull request](#submitting-a-pull-request), below. Here is how to commit your code in the Codio environment: @@ -55,12 +54,9 @@ If you had created a branch for your current contribution then type **`git push ``` - ## Submitting a Pull Request -Clarity is super important in any open source project - especially one with lots of contributors. A pull request is a great, transparent way to review new changes. - -Here's how to submit a pull request to DuckDuckHack: +*The steps below are all you need, but it's worth mentioning that GitHub provides [excellent instructions](https://help.github.com/articles/creating-a-pull-request) as well.* 1. Open a **new browser tab** and go to your remote repository. For example, for Goodies: **`https://github.com/YOUR_GITHUB_USERNAME/zeroclickinfo-goodies`**. @@ -110,41 +106,6 @@ Here's how to submit a pull request to DuckDuckHack: 7. Finally, click **"Create Pull Request"**! -Congratulations! You can now sit back and relax. A Community Leader or DDG staff member will review your Goodie in turn, give you any feedback (if necessary) and merge it in. - -Once it's merged, it will be deployed to the site and should be live within a few days. **We'll be sure to let you know once it's live!** - -*For more information on how to create a pull request, GitHub provides excellent [instructions](https://help.github.com/articles/creating-a-pull-request).* - -## Review Process - -When you submit a pull request, a community leader will assign themselves to your pull request and work with you to get your Instant Answer live on DuckDuckGo. - -All comments and suggestions for your pull request should be discussed publicly in the pull request on Github, so that others can follow the progression. Of course, you can always contact anyone from the community or team if you have questions. - -In addition to the main [open@duckduckgo.com](mailto:open@duckduckgo.com) way to reach us, here are some community leaders who are available to help out: - - - -- [@bradcater](https://github.com/bradcater) -- [@loganom](https://github.com/loganom) -- [@mattr555](https://github.com/mattr555) -- [@mintsoft](https://github.com/mintsoft) -- [@TomBebbington](https://github.com/TomBebbington) -- [@killerfish](https://github.com/killerfish) -- [@MrChrisW](https://github.com/mrchrisw) -- [@javathunderman](https://github.com/javathunderman) - -Here's how the whole process looks, after you submit your pull request: - -1. A community leader (an experienced member of the community) will work with you on your pull request. - - The community leader will ping [@abeyang](https://github.com/abeyang) (or [@chrismorast](https://github.com/chrismorast)) for any design/interaction feedback. - - The community leader will test and give feedback about your code. - - You discuss and incorporate any applicable feedback. -2. When the community leader feels that the Instant Answer is ready to go live, they ping [@jagtalon](https://github.com/jagtalon) so that he can set it up on a testing server. -3. Final review by the internal team. -4. Your pull request gets merged in and goes live! - -## Thank you! +Congratulations! A Community Leader or DDG staff member will review your contribution in turn. -We're excited to have you in our community and we can't wait to see your Instant Answer on DuckDuckGo.com. Your contributions are helping our search engine get better every day. We owe you our deepest gratitude. +Once your pull request is merged into the repository, it should be live on DuckDuckGo.com within a few days. Next, read about [maintaining your Instant Answer](#) over time. \ No newline at end of file diff --git a/duckduckhack/submitting/quality.md b/duckduckhack/submitting/quality.md new file mode 100644 index 000000000..74ffb6c33 --- /dev/null +++ b/duckduckhack/submitting/quality.md @@ -0,0 +1,7 @@ +# Production Quality Instant Answers + +To get your Instant Answer live on DuckDuckGo.com, it must be accepted by staff or community leaders. + +(Talk about our process and standards from a high level. Set the expectation of submitting an IA, reviewing, getting feedback, and maintaining long term.) + +(Pass-fail nature. Get help at a meetup, community channel, and so on. Review process is simply an evaluation of the checklist.) diff --git a/duckduckhack/testing/test_files.md b/duckduckhack/testing-reference/test-files.md similarity index 100% rename from duckduckhack/testing/test_files.md rename to duckduckhack/testing-reference/test-files.md diff --git a/duckduckhack/testing/testing_html.md b/duckduckhack/testing-reference/testing-html.md similarity index 100% rename from duckduckhack/testing/testing_html.md rename to duckduckhack/testing-reference/testing-html.md diff --git a/duckduckhack/testing/testing_location_language_apis.md b/duckduckhack/testing-reference/testing-location-language-apis.md similarity index 100% rename from duckduckhack/testing/testing_location_language_apis.md rename to duckduckhack/testing-reference/testing-location-language-apis.md diff --git a/duckduckhack/testing/testing_triggers.md b/duckduckhack/testing-reference/testing-triggers.md similarity index 100% rename from duckduckhack/testing/testing_triggers.md rename to duckduckhack/testing-reference/testing-triggers.md diff --git a/duckduckhack/welcome/intro.md b/duckduckhack/welcome/intro.md new file mode 100755 index 000000000..25241e070 --- /dev/null +++ b/duckduckhack/welcome/intro.md @@ -0,0 +1,69 @@ +# Welcome to DuckDuckHack + +Thanks for joining DuckDuckHack! These docs will show you how to build and contribute an Instant Answer to DuckDuckGo. + +## Quick Start Tutorials + +Learn to make an Instant Answer by starting with any of our quick tutorials. Pick a tutorial that's most similar to what you'd like to build: + +**Create a Cheat Sheet:** + +- [Programming Syntax](#) + + [Screenshot] + +- [Foreign Language Help](#) + + [Screenshot] + +- [Key Bindings](#) + + [Screenshot] + +**Build a Utility:** + +- [Conversions](#) + + [Screenshot] + +- [Calculations](#) + + [Screenshot] + +- [Transformations](#) + + [Screenshot] + +**Hack an API-Based Response:** + +- [Forum Lookup](#) + + [Screenshot] + +- [Transit Schedules](#) + + [Screenshot] + +- [Local Search](#) + + [Screenshot] + +## Dive in and Improve a Live Instant Answer + +We welcome new contributors to dive in and improve live Instant Answers. It's a great, hands-on way to learn how things work. + +We always make sure to identify "low-hanging fruit" for new community members to work on. You'll want to start by [setting up your development environment](#), and make use of the reference documentation. + +Goodie Instant Answers are self-contained Instant Answers that run on the DuckDuckGo server. + +- [Goodie Low Hanging Fruit](https://github.com/duckduckgo/zeroclickinfo-goodies/issues?q=is%3Aopen+is%3Aissue+label%3A%22Low-Hanging+Fruit%22) + +Spice Instant Answers can make external API calls: + +- [Spice Low Hanging Fruit](https://github.com/duckduckgo/zeroclickinfo-spice/issues?q=is%3Aopen+is%3Aissue+label%3A%22Low-Hanging+Fruit%22) + +## Talk to the Community + +Want help? Need to think out loud? [Join us over on Slack!](mailto:QuackSlack@duckduckgo.com?subject=AddMe). + +We're a digital community, but real people - we frequently meet up to hack together. Check out our [global meetups](#). \ No newline at end of file diff --git a/duckduckhack/getting-started/setup_dev_environment.md b/duckduckhack/welcome/setup-dev-environment.md similarity index 51% rename from duckduckhack/getting-started/setup_dev_environment.md rename to duckduckhack/welcome/setup-dev-environment.md index 855a3aca3..d8c5771bf 100644 --- a/duckduckhack/getting-started/setup_dev_environment.md +++ b/duckduckhack/welcome/setup-dev-environment.md @@ -1,32 +1,31 @@ # Setting Up Your Development Environment -In order to get moving with Instant Answer development, you'll need to setup your environment. At the very minimum, you will need a GitHub account and the DuckDuckHack developer tool, DuckPAN, to make and submit an Instant Answer. This guide will help you determine the best setup for you. +In order to get moving with Instant Answer development, you'll need to setup your environment. There are three main steps: -Before moving forward, you **must** know which Instant Answer type you will be using. After this section, the documentation will be specific to each Instant Answer type. +1. Fork the Spice Repository on Github.com +2. Fork the DuckDuckGo environment on Codio.com +3. Clone your Github fork onto the Codio environment -## Before you start... +You can also watch a [video screencast of this tutorial](https://vimeo.com/132712266). -We highly recommend that everyone uses Codio, a web-based IDE that simplifies the setup and development process greatly. If you prefer using a local text editor, that's alright, but using Codio is still beneficial because we already have the required software installed and ready to go. This page will show you how to set up Codio and then it's on to creating Instant Answers! You can also watch a [video screencast of this tutorial](https://vimeo.com/132712266). +![https://vimeo.com/132712266](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fscreencast_environment-setup.jpg&f=1) -### Alternative Development Environments +## 1. Fork the Spice Repository on Github.com -Codio is the preferred choice of most DuckDuckHack contributors for its ease and speed. However, you may also [develop and test locally](https://duck.co/duckduckhack/other_development_environments), or install a [pre-configured virtual machine](https://duck.co/duckduckhack/other_development_environments). These options do require more time and effort than using Codio. +### Sign up for a GitHub Account -## Sign up for a GitHub Account +*Already have a GitHub Account? Perfect, move to the next step.* -*Already have a GitHub Account? Perfect, move on to [the next step](#sign-up-for-a-codio-account)!* +GitHub is a well known, popular tool that many individuals and companies use to save their code. Many open-source projects (such as DuckDuckHack) are hosted on GitHub and anyone with an account can contribute. GitHub is a great tool that you will likely be using long after this tutorial. -If you're new to programming, GitHub is a well known, popular tool that many individuals and companies use to save their code. Many open-source projects (such as DuckDuckHack) are hosted on GitHub and anyone with an account can contribute. GitHub is a great tool that you will likely be using long after this tutorial. To get started, let's sign up! +To get started, let's sign up: 1. Go to https://github.com/join and enter the required information, then click "**Create an Account**" 2. Click "**Finish Signup**" to continue with a **Free** GitHub account. -**Congrats!** You now have a GitHub account. +## 2. Fork the DuckDuckGo environment on Codio.com - -## Sign up for a Codio Account - -Next, you'll need to get an account for Codio: +### Sign up for a Codio Account *Already have a Codio Account? Perfect, move on to [the next step](#fork-the-duckduckhack-project-on-codio)!* @@ -36,67 +35,78 @@ Next, you'll need to get an account for Codio: 4. Click "**Authorize application**" to continue. 5. In the new screen, enter the required details and click "**Create Account**". -**Congrats!** You now have a Codio account. You'll notice that you didn't need to provide a password, that's because you've logged in to Codio using your GitHub account. As long as you can login to your GitHub account, you can also login to Codio. Now let's get started with setting up your Codio environment! +### Fork the DuckDuckHack Codio Machine -## Join the DuckDuckGo Organization +In this step we'll setup our virtual development computer with all the convenient development tools pre-installed. We've already created this for you on Codio, and all you need to do is make a copy for yourself. -1. **After logging into Codio,** [click this link](https://codio.com/p/signup?orgToken=Ax-OB3tU4sdNAG8axJBYcjNqR04) and you'll be added to our organization, which gives you a professional Codio setup free of charge. You should see a confirmation message at the bottom of your Codio screen after clicking. +1. **After logging into Codio,** [click this link](https://codio.com/p/signup?orgToken=Ax-OB3tU4sdNAG8axJBYcjNqR04) and you'll be added to our organization, which gives you a professional Codio setup free of charge. + You should see a confirmation message at the bottom of your Codio screen after clicking. -## Fork the DuckDuckHack Project on Codio +2. Go to https://codio.com/duckduckgo/duckduckhack and click "**Project**" at the top left corner. -1. Go to https://codio.com/duckduckgo/duckduckhack and click "**Project**" at the top left corner. -2. In the drop-down, select the "**Fork**" option. +3. In the drop-down, select the "**Fork**" option. ![Codio Fork](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckpan%2Fassets%2Fcodio_fork.png&f=1) -3. In the pop-up window, select the "**Box & Project**" option and click "**Continue**". +4. In the pop-up window, select the "**Box & Project**" option and click "**Continue**". ![Codio Fork Both](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckpan%2Fassets%2Fcodio_fork_both.png&f=1) -4. Wait a minute while the project forks... -5. You should now see a new window with three panes. It should say "**DuckDuckHack**" at the top of the left pane. +5. Wait a minute while the project forks... -**Congrats!** You've now successfully forked the DuckDuckHack environment. Now, let's grab the DuckDuckHack Goodie code (from GitHub.com) and start learning! +6. You should now see a new window with three panes. It should say "**DuckDuckHack**" at the top of the left pane. +Good work! You now have your own machine on Codio with all the DuckDuckHack development tools installed. You'll learn more about these tools in the tutorials. -## Fork the correct DuckDuckHack repository on GitHub +## 3. Clone your Github fork onto your Codio Machine -In order to test out and create your own Instant Answer, you'll need the open-source code that DuckDuckGo hosts on GitHub.com. We're now going to "fork" that code, so you'll have your own personal copy which you can modify. +The final step is to obtain the latest copy of the open-source code powering all Instant Answers. DuckDuckGo hosts this on GitHub.com. We're going to "fork" that code, so you'll have your own personal copy which you can modify and test. -By now you should have [determined the Instant Answer type](https://duck.co/duckduckhack/determine_your_instant_answer_type) you're going to build. - -1. Go to the Instant Answer repository homepage: - - [Goodies](https://github.com/duckduckgo/zeroclickinfo-goodies) (for Cheat Sheets and Instant Answers that are pure code functions) +1. Go to the corresponding Instant Answer repository homepage: + - [Goodies](https://github.com/duckduckgo/zeroclickinfo-goodies) (for Cheat Sheets, and Instant Answers that are pure code functions) - [Spice](https://github.com/duckduckgo/zeroclickinfo-spice) (for Instant Answers that will make API calls) - - [Fathead](https://github.com/duckduckgo/zeroclickinfo-fathead) (for Instant Answers that use key->value based data) - - [Longtail](https://github.com/duckduckgo/zeroclickinfo-longtail) (for Instant Answers that do full text search) + + Don't worry about picking the right one: you can fork either or both of these repositories - just repeat these steps. + 2. Do you see your user portrait or "**Sign up**" and "**Sign in**" buttons in the top right corner? + - **User Portrait**? Perfect. Move on to the next step. - **Sign up/in Buttons**? Click "**Sign In**", then enter your details and click "**Sign In**". - - **A portrait that's not mine**? Whoops! Click the portrait to see the username. If it's yours, you're good to go. If not, click Sign out, and then sign in with your username and password. + - **A portrait that's not mine**? Whoops! Click the portrait to see the username. If it's yours, you're good to go. + +If not, click Sign out, and then sign in with your username and password. + 3. Click "**Fork**", near the top-right corner. + 4. Wait while the repo forks... + 5. You should see a page that looks nearly identical to the repo home page you were just on. The URL should be different though, it should look like **`https://github.com/yourGitHubUsername/zeroclickinfo-xxxxx`**. This is the URL for your personal copy of the DuckDuckHack code. -6. **Keep this URL handy, we'll be using it in a minute!** +**Keep this URL handy, we'll be using it in a minute!** -## Clone your Repository onto your Codio Machine +## Clone your Github Repository onto your Codio Machine -Now we need to "clone" the code from GitHub to your Codio box so you can see it, modify it and run it! +Having forked the code on Github, we want to be able to make changes. We'll need to clone that code to our Codio machine in order to modify and run it. 1. Go to the [Codio projects page](https://codio.com/home/projects). - See a "**Sign In**" screen? Use the "**Sign in via GitHub**" method like you did before (see Step #2 [here](#sign-up-for-a-codio-account)). + 2. Click the "**DuckDuckHack**" project. + 3. You should now see the three-pane window we previously saw. Press **Ctrl+Alt+R** (Cmd+Alt+R on a Mac), this will improve the layout a bit. (You can also click *View->Layouts->Default* from the command bar at the top). + 4. Press **Shift+Alt+T** to open a new Terminal. (You can also click *Tools->Terminal* from the command bar at the top). You should see the right side pane change into a black command prompt. + 5. Type **`git clone .git`** into the Terminal, replacing `` accordingly. It should look something like this for a Goodie: ``` [04:30 PM codio@buffalo-pixel workspace {master}]$ git clone https://github.com/githubusername/zeroclickinfo-goodies.git ``` + + Enter your Github credentials as prompted. - _**If your Github password doesn't work**, you may need to enter a [Personal Access Token](https://github.com/settings/tokens) instead. Simply copy and paste your token from your [Github Settings](https://github.com/settings/tokens). (This happens if you have set up [Github's Two-Factor Authentication](https://github.com/blog/1614-two-factor-authentication) feature.)_ + _**If your Github password doesn't work**, you may need to enter a [Personal Access Token](https://github.com/settings/tokens) instead. Simply copy and paste your token from your [Github Settings](https://github.com/settings/tokens). (No worries - this happens if you have set up [Github's Two-Factor Authentication](https://github.com/blog/1614-two-factor-authentication) feature.)_ 6. Press "**Enter**". You should see the Terminal print out some text that looks like this: @@ -112,11 +122,13 @@ Now we need to "clone" the code from GitHub to your Codio box so you can see it, [04:30 PM codio@buffalo-pixel workspace {master}]$ ``` -7. The file tree on the left side should update. There should be a new "**zeroclickinfo-xxxxx**" directory, where "**xxxxx**" is whichever Instant Answer type you chose: Goodie, Spice, Fathead, or Longtail. +7. The file tree on the left side of Codio should update. You'll see a new "**zeroclickinfo-xxxxx**" directory (where "**xxxxx**" is whichever Instant Answer type you chose: Goodie, Spice, Fathead, or Longtail). 8. Change the current directory of the terminal by typing **`cd zeroclickinfo-xxxxx`**, where "**xxxxx**" is whichever Instant Answer type you chose: Goodie, Spice, Fathead, or Longtail. -9. [Optional, best practice] Create a new branch in your repository for this particular project. This lets you work on several ideas at one time and keep them separate. Create a new branch by typing **`git checkout -b branch_name`**. You can use any branch name you like. You must create a new branch for each of your contributions. You can switch between branches by using **`git checkout branch_name`**. +9. [Best practice, but not required] Create a new branch in your repository for this particular project. This lets you work on several contributions at one time - since you must create a separate branch for each contribution. + + Create a new branch by typing **`git checkout -b branch_name`**. You can use any branch name you like. You can switch between branches by using **`git checkout branch_name`**. **Congrats!** You've now cloned the DuckDuckHack code onto your Codio machine. You're now prepared to code your first Instant Answer! From 11da9f15ae87f7ad7845b9a1d016c84311653ccc Mon Sep 17 00:00:00 2001 From: talsraviv Date: Mon, 19 Oct 2015 08:55:50 -0400 Subject: [PATCH 02/20] Incorporating advanced spice references --- .../backend-reference/api-special-cases.md | 18 - .../accessing-query-remainder.md | 48 +++ .../frontend-reference/js-api-reference.md | 391 ++++++++++++++++++ 3 files changed, 439 insertions(+), 18 deletions(-) create mode 100644 duckduckhack/frontend-reference/accessing-query-remainder.md create mode 100644 duckduckhack/frontend-reference/js-api-reference.md diff --git a/duckduckhack/backend-reference/api-special-cases.md b/duckduckhack/backend-reference/api-special-cases.md index adaeca696..e8168a85b 100644 --- a/duckduckhack/backend-reference/api-special-cases.md +++ b/duckduckhack/backend-reference/api-special-cases.md @@ -81,24 +81,6 @@ Some APIs don't do JSONP by default, i.e. don't have the ability to return the J spice wrap_jsonp_callback => 1; ``` -## Pure JS functions - -Sometimes no external API is necessary to deliver the Instant Answer like how the [Flash Version Spice](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/lib/DDG/Spice/FlashVersion.pm) just prints out your [Flash Player version](https://duckduckgo.com/?q=flash+version) using an [internal call](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/share/spice/flash_version/flash_version.js). - -In cases like these you can define a **spice\_call\_type** as 'self' like this: - -```perl -spice call_type => 'self'; -``` - -Then in the handle function you can return call, e.g.: - -```perl -return $_ eq 'flash version' ? call : (); -``` - -The return of **call** will run whatever is in the **call\_type** setting. **self** is a special keyword to just run the callback function directly, in this case **ddg\_spice\_flash_version()**. - ## Caching Spice Instant Answers have two forms of caching: API Response caching (remembers the JSON returned from the API) and API Call caching (remembers the API call URL created for a given query). Both of these will be explained with examples. diff --git a/duckduckhack/frontend-reference/accessing-query-remainder.md b/duckduckhack/frontend-reference/accessing-query-remainder.md new file mode 100644 index 000000000..0ab936971 --- /dev/null +++ b/duckduckhack/frontend-reference/accessing-query-remainder.md @@ -0,0 +1,48 @@ +# Accessing the Query Remainder + +While it's possible to get the user's full original query with [`DDG.get_query()`](#), but often you may only need a specific part of it. + +For example, let's look at the [Hacker News IA](https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/lib/DDG/Spice/HackerNews.pm). + +If a user searches for something like "hacker news oculus rift", you may want to ignore the trigger words ("hacker news") and only retrieve what the user was searching for ("oculus rift"). + +You could replace those trigger words manually, but it's better not to have a duplicate list of trigger words between your backend and frontend code. Luckily, there's a way to get the user's query as processed by the backend code. + +```javascript +var script = $('[src*="/js/spice/hacker_news/"]')[0], + source = $(script).attr("src"), + query = source.match(/hacker_news\/([^\/]+)/)[1], + decodedQuery = decodeURIComponent(query); + +console.log(decodedQuery); // "oculus rift" +``` + +Here's what this snippet does, line by line: + +``` +var script = $('[src*="/js/spice/hacker_news/"]')[0], + source = $(script).attr("src"), +``` + +The JSONP response from the Spice query will be retrieved as a script with a source of `/js/spice/hacker_news/oculus%20rift`. The first part of this (`/js/spice/hacker_news/`) will always be the same for our Spice, so we can use jQuery to get access to our `script` tag, and get its full `src` attribute. + +At this point the `source` variable contains `/js/spice/hacker_news/oculus%20rift`. + +``` + query = source.match(/hacker_news\/([^\/]+)/)[1], + decodedQuery = decodeURIComponent(query); +``` + +Then we use regular expressions to get anything after `/hacker_news/`, and run it against `decodeURIComponent()` to remove all URL encoded characters. + +If you're returning multiple values in your backend `handle` function, you may need some more logic. For instance: + +``` +// our JSONP response has src like "/js/spice/example_answer/term1/term2" + +var matches = source.match(/example_answer\/([^\/]+)\/([^\/]+)/), + partOne = matches[1], // equals "term1" + partTwo = matches[2]; // equals "term2" +``` + +(More for this section is coming soon! Know what should go here? Then **please** [contribute to the documentation](https://github.com/duckduckgo/duckduckgo-documentation/blob/master/CONTRIBUTING.md)!) diff --git a/duckduckhack/frontend-reference/js-api-reference.md b/duckduckhack/frontend-reference/js-api-reference.md new file mode 100644 index 000000000..e22659122 --- /dev/null +++ b/duckduckhack/frontend-reference/js-api-reference.md @@ -0,0 +1,391 @@ +## JavaScript API Reference + +For a list of available frontend JavaScript functions see: + +# Functions in the DDG Namespace + +The following functions are useful in the broader context of DuckDuckGo's frontend and available for use by Instant Answers. + +## get_query_encoded() + +Provides the value of `DDG.get_query` as a URIEncoded string + +Note: The query is trimmed (i.e. no leading or trailing spaces) and +has any extra spaces within the query removed + +## get_query() + +Provides the search query, as displayed in the search box + +Note: The query is trimmed (i.e. no leading or trailing spaces) and +has any extra spaces within the query removed + +## get_is_safe_search() + +Indicates if "safe search" is on, for the current query + +**Returns** + +*boolean*, Either `1` or `0` (on/off) + +## get_asset_path(spice_name, asset) + +Provides the path to the given asset, for the specified Instant Answer + +Example: + +`DDG.get_asset_path('quixey', 'quixey_logo.png')` -> `'/share/spice/quixey/1234/quixey_logo.png'` + +**Parameters** + +**IA_name**: *string*, The name of the Instant Answer (this gives us the correct `/share/...` relative path) + +**asset**: *string*, The filename of the asset, including extension + + +## getRelevants(p) + +Provides an array of relevant strings, given an input array of comparator strings + +Note: This is a shortcut to running `isRelevant()` against an array and collecting only the relevant results + +Example: + +```javascript +var relevants = DDG.getRelevants({ + num: 10, // the first 10 relevant candidates will be returned + candidates: ['is this relevant', 'is this one relevant', 'how about this one', ... ], //candidate strings + skipArray: ['a', 'list', 'of', 'words'], //words to ignore in comparison + strict: false +}); +``` +Only the `candidates` array is required, the other parameters are optional. `num` defaults to `candidates.length` + +**Parameters** + +**p**: *object*, An object containing an array of candidate strings and other optional parameters to be passed along to `DDG.isRelevant`, including: `num` - the maximum amount of results to return, `skipArray`, `minWordLength`, and `strict` + + +## isRelevant(candidate, skipArray, minWordLength, strict) + +Determines if the candidate string is relevant to **the search query** + +**Parameters** + +**candidate**: *string*, The string to be checked for relevancy + +**skipArray**: *array*, **[optional]** An array of words (usually the trigger words) that should not be considered in determining the candidate string's relevancy + +**minWordLength**: *number*, **[optional]** The minimum length for any words to be considered in the comparison (used to ignore small words like "to", "and", "is", "a", etc.), Default: `4` + +**strict**: *boolean*, **[optional]** Turns on stricter relevancy checking, by switching candidate and comparator strings, Default: `0` + + +## stringsRelevant(s1, s2, skipArray, minWordLength, strict) + +Determines if the candidate string is relevant to the given comparator string + +**Parameters** + +**s1**: *string*, The string to be checked for relevancy + +**s2**: *string*, The string to be compared against + +**skipArray**: *array*, **[optional]** An array of words (usually the trigger words) that should not be considered in determining the candidate string's relevancy + +**minWordLength**: *number*, **[optional]** The minimum length for any words to be considered in the comparison (used to ignore small words like "to", "and", "is", "a", etc.), Default: `4` + +**strict**: *boolean*, **[optional]** Turns on stricter relevancy checking, by switching candidate and comparator strings, Default: `0` + + +## parse_link(string, wanted) + +Parses a string containing an anchor tag, ('text'), and returns the URL or text +as indicated + +Note: If more than one anchor tag exists in the string, the first will be parsed + +Example: + +`str = 'Click here! to see my website.'` + +- `DDG.parse_link(str)` -> `'https://mywebsite.com'` +- `DDG.parse_link(str, 'text')` -> `'Click here!'` +- `DDG.parse_link(str, 'rest')` -> `' to see my website.'` + +**Parameters** + +**string**: *string*, A string containing an anchor tag + +**wanted**: *string*, **[optional]** The piece of the link to return Default: `'url'` + + +## getDateFromString(date) + +Provides a JavaScript `Date()` object for the given Date string + +**Parameters** + +**date**: *string*, Date string in UTC format with time (yyyy-mm-ddThh:mm:ss) or without (yyyy-mm-dd) + + +## strip_html(html) + +Removes HTML tags/characters from a string + +**Parameters** + +**html**: *string*, String containing HTML + +Example: + +- `strip_html("DuckDuckGo")` -> `"DuckDuckGo"` +- `strip_html("DuckDuckGo'")` -> `"DuckDuckGo"` + +## strip_href(html) +Removes `src` and `href` attributes from a string + +Note: The `src` and `href` attributes are not removed entirely. They are prefixed with `_` + +**Parameters** + +**html** : *string*, String containing `href` or `src` attributes + +Example: + +- `strip_href("DuckDuckGo")` -> `"DuckDuckGo"` +- `strip_href(" `" `'456th'` + +**Parameters** + +**number**: *number*, The number you need an ordinal for + + +## strip_non_alpha(str) + +Removes Non-Alpha characters (`\W`) from a string + +**Parameters** + +**str**: *sting*, The input string to strip + +## capitalize(str) + +Capitalizes the first letter of the given string + +**Parameters** + +**str**: *string*, String to capitalize + + +## capitalizeWords(str) + +Capitalizes the first letter of each word in the given string + +**Parameters** + +**str**: *string*, String to capitalize + + +## getProperty(obj, pathname) + +Provides the member of an object using dot separated path + +It's best to use this only when the sub elements might not be defined, +to avoid complex and awkward expressions. + +Note: Arrays can use the index number since we access object +properties and array indices in the same way + +Example: + +`obj = { a: { b: { c: 'test', d: [1,2,3] }}}` + +- `getProperty(obj, 'a.b.c')` -> `'test'` +- `getProperty(obj, 'a.b')` -> `{ c:'test' }` +- `getProperty(obj, 'a.b.d.0')` -> `1` + +**Parameters** + +**obj**: *object*, the object to look through + +**pathname**: *string*, the dot separated path of object properties and/or array indices + +## isNumber(value) + +Determines if an input is a Number + +**Parameters** + +**value**: the value to check + +Example: + +- `isNumber(10)` -> `true` +- `isNumber("HelloWorld")` -> `false` +- `isNumber(NaN)` -> 'false' + +## abbrevNumber(value) + +Returns an abbreviated string representation of a number. + +**Parameters** + +**value**: *number*, the number to abbreviate + + +Example: + +- `abbrevNumber(1)` -> `1` +- `abbrevNumber(1000)` -> `1k` +- `abbrevNumber(1000000)` -> `1M` + +## commifyNumber(value) + +Returns the comma seperated string representation of a number + +**Parameters** + +**value**: *number*, the number to comma seperate + +Example: + +- `commifyNumber(10000)` -> `10,000` + +## formatDuration(value) + +Returns a string in the format of HH:MM:SS + +**Parameters** + +**value**: *number*, the total milliseconds to format + +Example: + +- `formatDuration(86400000)` -> `24:00:00` +- `formatDuration(150000)` -> `2:30` +- `formatDuration(1000)` -> `0:01` + + +## toHTTPS(url) + +Returns a string with the https protocol + +**Parameters** + +**url**: *string*, A url with the http protocol + +Example: + - `toHTTPS("http://duckduckgo.com")` -> `"https://duckduckgo.com"` + - `toHTTPS("duckduckgo.com")` -> `"duckduckgo.com"` + + +## toHTTP(url) + +Returns a string with the http protocol + +**Parameters** + +**url**: *string*, A url with the https protocol + +Example: + - `toHTTP("https://duckduckgo.com")` -> `"http://duckduckgo.com"` + - `toHTTP("duckduckgo.com")` -> `"duckduckgo.com"` + + +## scaleToFit(width, height, maxWidth, maxHeight) +Returns an object containing width and height properties scaled proportionally to fit within a specified range + +**Parameters** + +**width** : *number*, Current width of an element + +**height** : *number*, Current height of an element + +**maxWidth** : *number*, Max width available for element + +**maxHeight** : *number*, Max height available for element + +Example: + +- `scaleToFit(4,2, 2, 1)` -> `{ width: 2, height: 1 }` +- `scaleToFit(10,10,5,3);` -> `{ width: 3, height: 3 }` + +------ + + +# DDH Namespace + +The following functions are available and relevant to both Spice and Goodie Instant Answers. + +## getDOM(id) + +Provides a scoped DOM for a given the Instant Answer's id. + +Note: Seeing as we maintain a cache, this is more efficient than using jQuery, i.e. `$('IA_name')` + +Example: + +`var $my_IA = DDH.getDOM('my_IA')` + +**Parameters** + +**id**: *string*, The id of the Instant Answer. If a Spice, should match the `id` property of the object given to `Spice.add()`. + +**Returns** + +*object*, A jQuery object, matching the selector that targets the given id. + +## registerHelper(id, fn) + +Provides access to `Handlebars.registerHelper()` so you can register helpers for your Instant Answer. + +**Parameters** + +**id**: *string*, The name of the helper to register + +**fn**: *function*, The function we are registering + + +# Spice Namespace + +The following functions are available and relevant to Spice Instant Answers. + +## add(options) + +Add an Instant Answer to the AnswerBar and display it + +Note: A detailed explanation of `Spice.add()` can be found in [Displaying your Spice](#) + +**Parameters** + +**options**: *object*, The object containing all necessary information for creating a Spice Instant Answer + + +## failed(id) + +Alerts the frontend that an Instant Answer has stopped executing, preventing it from being displayed. + +Note: This is generally used when a Spice API returns no useful results. + +Example: + +```javascript +if (/* check for no results */) { + Spice.failed() +} +``` + +To see an example of this, visit the [Forum Lookup Walkthrough](#). + +**Parameters** + +**id**: *string*, The id of the Spice Instant Answer, should match the `id` property of the object given to `Spice.add()` From 8d54c3c551090a8418e5ab627e9ac50275d739d4 Mon Sep 17 00:00:00 2001 From: talsraviv Date: Mon, 19 Oct 2015 09:57:07 -0400 Subject: [PATCH 03/20] Include API criteria inside API Reference + rename file --- ...{api-special-cases.md => api-reference.md} | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) rename duckduckhack/backend-reference/{api-special-cases.md => api-reference.md} (83%) diff --git a/duckduckhack/backend-reference/api-special-cases.md b/duckduckhack/backend-reference/api-reference.md similarity index 83% rename from duckduckhack/backend-reference/api-special-cases.md rename to duckduckhack/backend-reference/api-reference.md index e8168a85b..be9f9ef61 100644 --- a/duckduckhack/backend-reference/api-special-cases.md +++ b/duckduckhack/backend-reference/api-reference.md @@ -1,4 +1,24 @@ -# API Special Cases +# API Reference + +## API Criteria + +With millions of search queries triggering Instant Answers every day, it's important to choose APIs wisely. There are several criteria for APIs used in Spice Instant Answers. + +### Technical constraints: + +- APIs called by Spice Instant Answers **must use the JSON or JSONP formats**. We do not support the use of XML (it's coming soon though!), HTML, or plain text responses. +- APIs should respond to requests in **less than one second** (< 1s). +- Avoid **static JSON files**. These often have large payloads and require heavy local processing. Not sure? [Talk to us about your idea](mailto:open@duckduckgo.com). + +### Reliability + +- APIs used should be **reliable**. Pick sources that will be most likely be around and accurate for the foreseeable future. +- APIs created by contributors solely for the purpose of an Instant Answer cannot be accepted. + +### Credibility + +- APIs used should represent the **most credible source** for the information. This means it should draw upon the preferred data source of the relevant community. Look for posts and sources like [these](https://duck.co/forum/thread/37/great-resources-for-instant-answer-ideas) which have been suggested by others. +- APIs must have the appropriate permissions or rights to serve their information. ## Multiple API endpoints From 8bf1b5b131ea17eeed6d20bb3385bcabc125cbf3 Mon Sep 17 00:00:00 2001 From: talsraviv Date: Mon, 19 Oct 2015 09:57:22 -0400 Subject: [PATCH 04/20] Include other dev environments under resources/ --- .../resources/other-dev-environments.md | 262 ++++++++++++++++++ 1 file changed, 262 insertions(+) create mode 100644 duckduckhack/resources/other-dev-environments.md diff --git a/duckduckhack/resources/other-dev-environments.md b/duckduckhack/resources/other-dev-environments.md new file mode 100644 index 000000000..4de2447c6 --- /dev/null +++ b/duckduckhack/resources/other-dev-environments.md @@ -0,0 +1,262 @@ +# Other Development Environments + +For the vast majority of contributors, the best, simplest, and quickest way to develop on DuckDuckHack is to use the **free, web-based Codio environment**. Instructions on setting up Codio can be found in the section on [setting up your development environment](#). + +However, some developers prefer working on either a local environment or a virtual machine. This guide addresses setting up DuckPAN on environments other than Codio. + +## About DuckPAN + +DuckPAN is an application built to aid DuckDuckHack developers. It is mainly used to generate the required files for new Instant Answers, where the developer can then focus on implementing functionality. DuckPAN also assists developers in testing the triggering and visual display of Instant Answers. + +## Overview of Environments + +Aside from the preferred [Codio web-based environment](#), there are three other environments you can set up: + +- [**Install DuckPAN locally**](#installing-duckpan-locally). This **requires Linux or Mac OS X**. We suggest you install [Ubuntu](http://www.ubuntu.com/download). +- The [**DuckDuckHack Virtual Machine Image**](#duckduckhack-development-virtual-machine) +- The [**Vagrant virtual environment**](#vagrant-virtual-environment) + +_**Note on Windows systems:** Local development is not possible on Windows environments. Windows users can use either Codio or the virtual machine._ + +Once DuckPAN is up and running, be sure to continue to the [using DuckPAN](#using-duckpan) section below. + +## Universal Notes + +### Operating Systems + +Currently, DuckPAN has been developed on, and works well with **Ubuntu**. More specifically, we regularly build, test and run DuckPAN on **Ubuntu 12.04**. We have also successfully installed and run DuckPAN on older and newer Ubuntu releases, e.g. Ubuntu 10.04, 12.10, and 13.04. + +Developers have also been successful running DuckPAN on other Linux distros (e.g. Arch, Debian) and on Mac OS X 10.8 and later, but **we make no promises that it will work outside of Ubuntu**. + +As well, **there have been reported issues with installing DuckPAN on Windows**, so we don't recommend you go down that path. + +That being said, we are more than willing to help you debug any installation problems, so please come to us with your problems and we'll try to get your issues sorted out. If you'd like some help from our community, feel free to engage with them on the [DuckDuckGo forum](http://duck.co/). + +### Perl Versions + +We run our DuckPAN tests against Perl 5.16 and 5.18 using Travis (https://travis-ci.org/duckduckgo/p5-app-duckpan). We suggest you install Perl 5.16 via Perlbrew for local development. The Codio boxes come with Perlbrew and Perl 5.18 already installed. + +------ + +## Installing DuckPAN Locally + +_**Note**: You don't need to install DuckPAN locally if you're using our DuckDuckHack virtual machine or the Vagrant virtual environment. It's already installed for you!_ + +To install DuckPAN, open your terminal and run: + +``` +curl http://duckpan.org/install.pl | perl +``` + +[This script](https://github.com/duckduckgo/p5-duckpan-installer) will setup [local::lib](https://metacpan.org/module/local::lib), which is a way to install Perl modules without changing your base Perl installation. If you already use `local::lib` or [perlbrew](https://metacpan.org/module/perlbrew), don't worry, this script will intelligently use what you already have. + +If you didn't have a `local::lib` before running the install script, you will need to run the script twice. It should tell you when like this: + +``` +please now re-login to your user account and run it again! +``` + +If everything works, you should see this at the end: + +``` +EVERYTHING OK! You can now go hacking! :) +``` + +Note that with `local::lib` now installed, you can easily install [Perl modules](http://search.cpan.org/) with [cpanm](https://metacpan.org/module/cpanm). + +``` +cpanm App::DuckPAN +App::DuckPAN is up to date. +``` + +### Adding Shell Completion + +Some of our awesome community members have written shell completion scripts for DuckPAN, which should save you tons of time. Feel free to improve these, or contribute new ones! + +#### Bash + +- Submitted by: [mattr555](https://github.com/mattr555) +- link: https://github.com/mattr555/dotfiles/blob/master/bin/duckpancomp.sh + +#### Z Shell + +- Submitted by: [elebow](https://github.com/elebow) +- link: https://github.com/elebow/duckpan-completion + +### Dealing With Installation Issues + +If during the course of your DuckPAN install you run into errors, don't panic, there are a few things you can try. + +First, try running the install command again (`curl http://duckpan.org/install.pl | perl`), this often solves issues related to any dependencies. + +If that doesn't work, you should investigate the build.log and see what's wrong. It might be a dependency issue which you can resolve by manually installing whichever dependency is missing via `cpanm`. + +If it still won't install with `cpanm` try adding `--notest` to the cpanm command: + +``` +cpanm Test::More --notest +``` + +If that still doesn't work, you can also try using `--force`: + +``` +cpanm Test::More --force +``` + +If this ***still*** doesn't work, please create a GitHub Issue in the DuckPAN Repo [here](https://github.com/duckduckgo/p5-app-duckpan/issues). Be sure to paste the contents of your `build.log` and also let us know the details of your OS (`$ uname -a` is great). Once you've made the issue, we'll work with you to try and solve any problems you're having. + +------ + +## Vagrant Virtual Environment + +The Vagrant-based DuckDuckHack virtual environment provides a similar sandbox to the DuckDuckHack VM, but rather than downloading a prebuilt VM, Vagrant creates an environment for you based on the defined configuration. Vagrant is an awesome tool for building development environments. One command - `vagrant up` - gets you a complete working environment in minutes. Something go wrong with the environment? No messing around with snapshots. Tear the VM down and build a fresh environment. The DuckDuckHack Vagrant environment uses Chef cookbooks and the DuckPAN installer script, so configuration is transparent and easily shared. + +Through the Vagrant configuration, you can easily switch back and forth between a headless-mode and the traditional VirtualBox interface. The configuration defaults to headless. + + +### Setup Instructions + +Refer to [the duckpan-vagrant readme](https://github.com/shedd/duckpan-vagrant#installation) for installation instructions. + +Once the environment has been built, **the DuckPAN client is installed and ready to go.** You can now clone the Instant Answer repos and start developing/testing. + +If you run into any issues, please file an issue in the [duckpan-vagrant issue page](https://github.com/shedd/duckpan-vagrant/issues). + + +##### Quick Overview of key Vagrant CLI commands + +There are a couple of key Vagrant commands that you'll use to manage your environment. + +``` +$ vagrant + +up - Build environment from Vagrantfile or resume a previously halted environment. +ssh - Connect to your running VM via SSH. +suspend - Pause the VM, storing its current state to disk. +resume - Bring a suspended VM back to life. +reload - The equivalent of running a halt followed by an up. Use this when you make changes to Vagrantfile. +halt - Shut down the VM. Tries to gracefully shutdown first; if that fails, it will forcefully shut the VM down. +destroy - Stop the currently running VM and blow everything away. +``` + +Run these commands from the directory containing your `Vagrantfile`. + +For more information, please see the (excellent) [Vagrant docs](http://docs.vagrantup.com/). + +------ + +## DuckDuckHack Development Virtual Machine + +The purpose of our DuckDuckHack VM is to provide a sandbox for DuckDuckGo Instant Answer development that is quick to set up and start working with. + + +#### DDH VM Breakdown + +- Ubuntu 12.04 LTS +- Perl 5.16.3 (managed by Perlbrew) +- build-essential (for make, gcc, cc, etc) +- cpanminus (managed by Perlbrew) +- App::DuckPAN +- XFCE Window Manager +- SublimeText, vim, emacs +- Firefox (Configured via fixtracking.com) +- Platform specific virtualization guest tools (optimizes hardware emulation) + + +#### For VirtualBox hosts + +ddh-vbox-2014-12-23.ova: + +MD5: 02a0fb03db2b2466504bf9fbc894c7dd + +https://ddg-community.s3.amazonaws.com/ddh-vbox-2014-12-23.ova + + +#### For VMWare hosts + +ddh-vmw-2014-12-23.ova: + +MD5: 6ecdeb8ead2c2eb7a9aba1db22359c4b + +https://ddg-community.s3.amazonaws.com/ddh-vmw-2014-12-23.ova + + +#### Roadmap + +- Docker support +- Public AMI for use on EC2 + + +### Installing the Virtual Machine + +To use the Virtual Machine, you will need to download and install **VirtualBox**, **VMWare Workstation** or **VMWare Player**, depending on your current OS. + +Then you will need to import the VM. + + +#### VirtualBox (free) + +Website: https://www.virtualbox.org/ +Supports: Windows, OS X, Linux + + +##### Import the VM + +1. Download the OVA +2. Open VirtualBox, click "File" and then click "Import Appliance" +3. Click "Open appliance..." and select the DuckDuckHack virtual appliance OVA file -- click "Next" +4. Click "Import" + + +#### VMWare Player (free) + +Website: https://www.vmware.com/products/player/ +Supports: Windows, Linux + + +##### Import the VM + +1. Download the OVA +2. Open VMWare Player, and click "Open a Virtual Machine" +3. Choose a storage path for the Virtual Machine -- click "Import" + + +### Using the Virtual Machine + + +#### Logging into the VM + +Once you have installed the virtual machine you should be able to start up the VM and login with the following credentials: +- **username** : `vagrant` +- **password** : `duckduckhack` + + +#### Cloning the repository on the VM + +**The DuckPAN client has already been installed for you.** To use it, you must 1st clone your Instant Answer git repository. + +If you haven't already done so, [Determine your Instant Answer Type](https://duck.co/duckduckhack/determine_your_instant_answer_type) and follow GitHub's instructions to [fork](https://help.github.com/articles/fork-a-repo) the Instant Answer repository. + +The Instant Answer repositories are: ++ [zeroclickinfo-goodies](https://github.com/duckduckgo/zeroclickinfo-goodies) ++ [zeroclickinfo-spice](https://github.com/duckduckgo/zeroclickinfo-spice) + +Then, run the git clone command to clone the repository. The URL is the **SSH clone URL** listed on the right side of the github webpage for your forked repository. (You can also use the **HTTPS clone URL**.) + +``` +git clone URL +``` + +_**If your Github password doesn't work**, you may need to enter a [Personal Access Token](https://github.com/settings/tokens) instead. Simply copy and paste your token from your [Github Settings](https://github.com/settings/tokens). (This happens if you have set up [Github's Two-Factor Authentication](https://github.com/blog/1614-two-factor-authentication) feature.)_ + +#### Happy Hacking! + +See the instructions below on [Using DuckPAN](#using-duckpan). + +------ + +## Using DuckPAN + +Running `$ duckpan` with no commands will output some help information. More details on the DuckPAN commands can be found in the [DuckPAN Readme](https://github.com/duckduckgo/p5-app-duckpan#using-duckpan). + +The next section on [testing triggers](https://duck.co/duckduckhack/testing_triggers) will show you how to use DuckPAN to interactively test your triggers. From e90bee8e5ce737333503aae8c3ef219404e0a6cb Mon Sep 17 00:00:00 2001 From: talsraviv Date: Mon, 19 Oct 2015 10:52:34 -0400 Subject: [PATCH 05/20] Fixing grammar, typos, and examples --- duckduckhack/api-answers/forum-lookup.md | 8 ++++---- duckduckhack/backend-reference/data-files.md | 10 +--------- duckduckhack/cheat-sheets/programming-syntax.md | 4 ++-- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/duckduckhack/api-answers/forum-lookup.md b/duckduckhack/api-answers/forum-lookup.md index f0d085f6b..719a1b39a 100644 --- a/duckduckhack/api-answers/forum-lookup.md +++ b/duckduckhack/api-answers/forum-lookup.md @@ -18,7 +18,7 @@ Simple enough. So how do we make that work in code? ## Anatomy of an Instant Answer -The Hacker News Instant Answer is a combination of several backend and fronted code files, each covering a specific function. Because it calls an external API, it is a "Spice" Instant Answer, and all files will be located in the [Spice repository](#). +The Hacker News Instant Answer is a combination of several backend and frontend code files, each covering a specific function. Because it calls an external API, it is a "Spice" Instant Answer, and all files will be located in the [Spice repository](#). Backend files: @@ -163,7 +163,7 @@ How will DuckDuckGo know to trigger our Instant Answer on a user's search? That' triggers startend => "hn", "hackernews", "hacker news", "news.yc", "news.ycombinator.com", "hn search", "hnsearch", "hacker news search", "hackernews search"; ``` -This tells DuckDuckGo that if any of these strings occurs at the *start* or *end* of any user's search query, it should activate our Instant Answer and give the API a shot. Of +This tells DuckDuckGo that if any of these strings occurs at the *start* or *end* of any user's search query, it should activate our Instant Answer and attempt calling the API. Triggers don't guarantee the API will return anything useful - just that they're worth trying. Aside from `startend`, there are more types of triggers - and you can even define several together. You can [learn more about triggers here](#). @@ -332,7 +332,7 @@ templates: { You'll notice the inclusion of the `Spice.hacker_news.footer` sub-template. This refers to the [footer.handlebars](#) file also in the `share/spice/hacker_news/` directory. You can learn more about the [inclusion of sub-templates here](#). -Finally, we'll give instructions on how to sort our results - by what properties. [Learn more about sorting here](#). +Finally, we'll define the properties on which we'll sort results. [Learn more about sorting here](#). ```javascript sort_fields: { @@ -402,7 +402,7 @@ ddg_spice_test( done_testing; ``` -A test file is required for submitting your Instant Answer. However, we don't need to it proceed with interactively testing our code, which we'll do next. +A test file is required for submitting your Instant Answer. However, we don't need it to proceed with interactively testing our code, which we'll do next. ### Interactively Test Our Instant Answer diff --git a/duckduckhack/backend-reference/data-files.md b/duckduckhack/backend-reference/data-files.md index 2133a6514..02655b119 100644 --- a/duckduckhack/backend-reference/data-files.md +++ b/duckduckhack/backend-reference/data-files.md @@ -1,10 +1,9 @@ # Data Files -Instant Answers - particularly Goodies - can use simple text or html input files for display or processing. These files can be read once and reused to answer many queries without cluttering up your source code. +Instant Answers - particularly Goodies - can use simple text files for display or processing. These files can be read once and reused to answer many queries without cluttering up your source code. The `share` function gives each Instant Answer access to a subdirectory of the repository's [`share`](https://github.com/duckduckgo/zeroclickinfo-goodies/tree/master/share/goodie) directory. The subdirectory for your Instant Answer is based on its Perl package name which is transformed from CamelCase to underscore_separated_words. - ## Usage The [Passphrase Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Passphrase.pm) uses the `share` directory to hold data for processing purposes: @@ -15,18 +14,11 @@ my @words = share('words.txt')->slurp; Here the `share` function grabs the `words.txt` file, found in `zeroclickinfo-goodies/share/goodie/passphrase/`. The returned object's `slurp` method is called which pushes each line of the file into the `@words` array. -In another case, the [PrivateNetwork Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/PrivateNetwork.pm) uses its `share` directory to hold files for display purposes: ```perl -my $text = scalar share('private_network.txt')->slurp, -my $html = scalar share('private_network.html')->slurp; -handle sub { - $text, html => $html; -}; ``` -Here each file is grabbed from `share/goodie/private_network/` and `slurp`ed in a `scalar` context. This returns the entire file as a string and assigns it to the appropriate variable. In the `handle` function, `$text` and `$html` are returned to display as plain text or HTML Instant Answer. ## UTF-8 Encoding diff --git a/duckduckhack/cheat-sheets/programming-syntax.md b/duckduckhack/cheat-sheets/programming-syntax.md index 6ca635030..397dd1641 100644 --- a/duckduckhack/cheat-sheets/programming-syntax.md +++ b/duckduckhack/cheat-sheets/programming-syntax.md @@ -8,9 +8,9 @@ Cheat Sheets are the easiest type of Instant Answer to contribute. There are sev ## How Cheat Sheets Work -Cheat Sheets automatically trigger on when their topic is searched together with words such as "help", "commands", "guide", "reference", and "syntax" (check out the [full list of terms](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/CheatSheets.pm)). For example, searching for "regex help" would trigger the Regex Cheat Sheet Instant Answer. +Cheat Sheets trigger when users search for their topic together with keywords such as "help", "commands", "guide", "reference", and "syntax" (check out the [full list of terms](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/CheatSheets.pm)). For example, searching for "regex help" would trigger the Regex Cheat Sheet Instant Answer. -For more information on how Cheat Sheets trigger, check out the [detailed documentation on Cheat Sheets](#). +Learn more about [how to trigger your Cheat Sheet](#) in the reference. ## Anatomy of a Cheat Sheet From 45a2f4426406e67a28cc51622e775bb4f30dc7d3 Mon Sep 17 00:00:00 2001 From: talsraviv Date: Mon, 19 Oct 2015 11:29:12 -0400 Subject: [PATCH 06/20] Data files update --- duckduckhack/backend-reference/data-files.md | 22 +++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/duckduckhack/backend-reference/data-files.md b/duckduckhack/backend-reference/data-files.md index 02655b119..fc3c4db7b 100644 --- a/duckduckhack/backend-reference/data-files.md +++ b/duckduckhack/backend-reference/data-files.md @@ -6,19 +6,35 @@ The `share` function gives each Instant Answer access to a subdirectory of the r ## Usage -The [Passphrase Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Passphrase.pm) uses the `share` directory to hold data for processing purposes: + +The [MAC Address Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/andrey/js-keycodes-cheatsheet/lib/DDG/Goodie/MacAddress.pm) uses the `share` directory to hold data for processing purposes: ```perl -my @words = share('words.txt')->slurp; +my %oui_db = share("oui_database.txt")->slurp; ``` -Here the `share` function grabs the `words.txt` file, found in `zeroclickinfo-goodies/share/goodie/passphrase/`. The returned object's `slurp` method is called which pushes each line of the file into the `@words` array. +Here the `share` function grabs the `oui_database.txt` file. The returned object's `slurp` method is called which pushes each line of the file into an array. +The full code performs some additional parsing on each line of the `slurp`-ed array: ```perl +my %oui_db = map { chomp; my (@f) = split(/\\n/, $_, 2); ($f[0] => $f[1]); } share("oui_database.txt")->slurp; +``` +You may decide to take advantage of particular formats. For example, you might decode a JSON file, like the [Independence Day Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/IndependenceDay.pm): + +```perl +my $data = share('independence_days.json')->slurp; +$data = decode_json($data); ``` +Or parse a YAML file, like the [Paper Size Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Paper.pm): + +```perl +use YAML::XS 'LoadFile'; + +my $sizes = LoadFile(share('sizes.yml')); +``` ## UTF-8 Encoding From abe58b26a11b0bfd3c6dde20bfe1202f77e94441 Mon Sep 17 00:00:00 2001 From: talsraviv Date: Mon, 19 Oct 2015 11:30:25 -0400 Subject: [PATCH 07/20] Data files update (my bad, needed to hit save) --- duckduckhack/backend-reference/data-files.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/duckduckhack/backend-reference/data-files.md b/duckduckhack/backend-reference/data-files.md index fc3c4db7b..190831403 100644 --- a/duckduckhack/backend-reference/data-files.md +++ b/duckduckhack/backend-reference/data-files.md @@ -21,14 +21,14 @@ The full code performs some additional parsing on each line of the `slurp`-ed ar my %oui_db = map { chomp; my (@f) = split(/\\n/, $_, 2); ($f[0] => $f[1]); } share("oui_database.txt")->slurp; ``` -You may decide to take advantage of particular formats. For example, you might decode a JSON file, like the [Independence Day Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/IndependenceDay.pm): +You may decide to take advantage of particular data formats, such as JSON, as does the [Independence Day Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/IndependenceDay.pm): ```perl my $data = share('independence_days.json')->slurp; $data = decode_json($data); ``` -Or parse a YAML file, like the [Paper Size Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Paper.pm): +Another example involves parsing a YAML file, as does the [Paper Size Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Paper.pm): ```perl use YAML::XS 'LoadFile'; From 3deddbb92179ec632d5ec596300f9432a6fb4837 Mon Sep 17 00:00:00 2001 From: talsraviv Date: Mon, 19 Oct 2015 12:04:12 -0400 Subject: [PATCH 08/20] Intro updated --- duckduckhack/assets/air_quality.png | Bin 0 -> 32045 bytes duckduckhack/assets/alternative_spotify.png | Bin 0 -> 59704 bytes duckduckhack/assets/blue_pill.png | Bin 0 -> 109812 bytes duckduckhack/assets/bpm_ms.png | Bin 0 -> 45651 bytes duckduckhack/assets/heads_tails.png | Bin 0 -> 23654 bytes duckduckhack/assets/parking_ny.png | Bin 0 -> 415360 bytes duckduckhack/assets/sales_tax.png | Bin 0 -> 23291 bytes duckduckhack/assets/url_encode.png | Bin 0 -> 27595 bytes duckduckhack/welcome/intro.md | 64 +++++++++++++------- 9 files changed, 42 insertions(+), 22 deletions(-) create mode 100644 duckduckhack/assets/air_quality.png create mode 100644 duckduckhack/assets/alternative_spotify.png create mode 100644 duckduckhack/assets/blue_pill.png create mode 100644 duckduckhack/assets/bpm_ms.png create mode 100644 duckduckhack/assets/heads_tails.png create mode 100644 duckduckhack/assets/parking_ny.png create mode 100644 duckduckhack/assets/sales_tax.png create mode 100644 duckduckhack/assets/url_encode.png diff --git a/duckduckhack/assets/air_quality.png b/duckduckhack/assets/air_quality.png new file mode 100644 index 0000000000000000000000000000000000000000..4c8ad2ca402fe8cb14666ec26e0c1ac44bb56aa8 GIT binary patch literal 32045 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 BkDUMj literal 0 HcmV?d00001 diff --git a/duckduckhack/assets/alternative_spotify.png b/duckduckhack/assets/alternative_spotify.png new file mode 100644 index 0000000000000000000000000000000000000000..53c6458c02d595f1a397b7a9b77aa0652ffab2d8 GIT binary patch literal 59704 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 literal 0 HcmV?d00001 diff --git a/duckduckhack/assets/heads_tails.png b/duckduckhack/assets/heads_tails.png new file mode 100644 index 0000000000000000000000000000000000000000..3db7b6de3bf3ae4e347397be7ca0ce73703e6e19 GIT binary patch literal 23654 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%0A%Pf!Q~=RV3&a&EQ*B5WV0lJ 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 z

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 z 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

X!87rB80K$c5!*ZF}+dE!n#dbL2-! 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 UA*V-&=YN*~E2=9L%9#ZGKf?`mwEzGB literal 0 HcmV?d00001 diff --git a/duckduckhack/assets/url_encode.png b/duckduckhack/assets/url_encode.png new file mode 100644 index 0000000000000000000000000000000000000000..fd1f040f695c944731ee2685838d11b7cd237a1c GIT binary patch literal 27595 zcmce+WmMeF?+3bzySqzqm*TF)X(?XH0>$0k-6`%`q&O5Sx;Vw%o#O5ecl+4yf6je< zFE2RX9Z4q1OeXnc!c~=JQIUv{00020+&ifc007ia$oEeKD9HbUg6cs4fI!|{Qc_h; zQj$W|!Pdmw$`}C9Lafj>{fIL%d9nb*JQVLZ%5NH%={SnO%pXb<7*2up5e6tN28#=W zs|bUM9e_X;fJA_S2p5mUNDt-U$yJZB9Bv4p zU=;8_GBcrHKiOaqyCzbFrWFHl`eor@kXwRmZBbu#ZH-|l68q?CadcnRjyrhS;oy4V z0eT-Kl-pLC_hTLo_K5k*hT!Oor453?3mcFLD^mZ-oZVB{+sb8X?) zkr@m?85&>#6)uGa^fN=*hLQtPj-zp4G;m16he&tZFkl?Q1;yt^m7yLCNJ;mqo)L%9 zJiU%64|Et{{d%oZ!eaQ%_Ogw9gh*~hf=5m)C%@8s|0*OcP21&W{S32_h9S@68l;Iw z&^Q=Iz=T9A=EbqNHj8FR8z$J5E8B4{W|sdGxd-Pt+|P}gKmiPQJ|`AmgWDqn$UO_k zWQFUfAqYpANER7nXYTB}=XIg!=X+_0MT(87D~v)ngRiIN9@s=@MT_9I4{#U&;*yb= zSO7VOaSyC?N`4Uc#L<eNl;=C zks#%!WF*UHc{IxdOwRt`%l$+{IlVwKXrN!`42r8k>^b{scAIOKvgS3OSA!UWBZ%`{ zH$PBuj_RHt8Avrk??4%*(oe_#yzj~8f28=eyD3k$OD;L_9ErbR*AV-Nfg|ti90>-93+ZG~=p`_8qVOFc?GD+1swKeP3kS-eKNKMq`sT|T zWZk7KiPk(}-->$R%tF2HY}xX^k0^P_2!1860@1!oZHiVrO<}=7fALI{n zC5Ko7w9Z9W^rNYU9tA_+flERI=m!J{j{t-e@Hl>wxi}=ybYKQMyib4>ai%?hD_Hmp zfD&MEh7}Xt2qI$+z^x9UK){s3>H_`Hnk2>`1IO z4(b~Lf5=Db>j9eIL=N!#(jjrX18+DZy<~iH$LXOWV0$C6B!3lftHRMUC30B^GQ!}7 z%1as-pykKpTd3~7XDJaZfiE$bhOr>4kAgGP;U?C>V2PX+BhEV>&)x%Z6Sg5|#j;Ay z@b-mrN*$T0n zYBFYIWK?D}XC!45WW-X3Qb$wgpK&kM{TTaw^@DeDQQ=OpMm|sB&9|7M(Qm8;Ho5I` zc>*F>n$(e%-H(WFWgN{mXBBj)KY>9X9m=Cfx}ZuYHctAyk+V_@=L-p!VCqdT^` zx;lxv^g6UUgE~*M*vZe|+EfJPTI4}g?=YhfR)eIv#3e{KcsBSqkV#3i2(m=7==7jg z#G5^uTb#C>*20IS`14^o;+itF#H}brXnnpF=iwLf=HBM16tER^NW6ym`1^;5M|Fnz z_f$vb1#A#?(|2=Ha}`h(kQ(7^`Sii{eeNTqWu)bx#V!&nvMN$jbWJNtn;7mImKg>P zYY!KvwWO`pu50yZGi!BeBWbZ#qf|53a@LeqH`f+bYgDg-vOtnQ!fUjvrE76(^-PEj z9y>>eY`|na+5M{nFR9PO@VucSvKX==ve^CX{piX-W$aOeQL0gmQO!>TtPHI1m0v2i zKCOI0US?iiTm~-RFQ@#}Kg)Id=0@T^>8^Z!b;*2rah`tOcaeO#x~;cvv^BMhyvwxF z@{4z9Y`AKOyidQ&H_}(xPaP~q@nOA0ECrlT5u5uHln<(3_ghboYl@3hEmBPwXEJE5 z4za7Y3%4si%SY%4iylDx>PW>VWiItrN>VyD>?X_y8ynvddx>tAk%xMe(uOjd)<@Y( zF+f>Dg-SVJX7l?SP2|3)>OI~%suEl$IU;2wS>kL6KeRM8yM88c?X zuKG~bxLUf(ze>H-+gNOMdcAQGe)V%h;Z)(GZ8P-R@zU~4mu}&!#k-*wyqBbxNT3W* z7HS9j8d?F$G|(v^B5)P{5C$K9ENCx?1T7792AKs}4}l9w5U&BphRlcRNjFGOO0UP{ zo9-7i9Op#+>3XxGy|BGXg7(zJ)I6>I`ONunzKW*FCdlUh$wL;tMz)p=h7!$w#HPWz zrB$Zgr&WLBt>U889^aLUl{J~en3SIKATq*ztSCS$Owr~Tx*iinnjnbkqH!wWa({ZT z%+f08dAlTR;yG%v&PByZX2SRd&(vqcVaQ@^XJj=&xNXkr^e2fS8o#Mi&P_Y^&(!7W zWq+aV){EAhd;fcHSR`0u*uzKYn_E&PwEc$v$=>&4=jILAY1Srfg$ks&+1#|=-ghGR;V%*y6PIPorz5cjM26$&&$I^>>#|0mEFB%KuW8D|m(Nj~+w;G;4P0wx}$*s!uK2DMj1<%DZV>KfsBO_W^ zX?52uej%nG?brc1hk)EmfS)@CK3W zVu6Z@k+L!dbIEXC*Ob(1)I!G~i~?=mW=pnSK0QDM2S|3gVJf{xuR%DcN3@lbWcd7@ zX5W)@yB5miqwXbz~7e6j&EIH4s2pVSbW&Qj_@M)s* z(8iJsoX{7!r_@OL!+XJW&~^NjXFtN%TFf2fqiSLIF3hpSAXUEUV-V<#DULU{z=P%R z$0N|P^TqyMAYu!)V|=gieSn#QM2${Qk&pC*JB zy;S`c$K1p=b8YgDDI2NA49B`pXetXwjnQPSVs(--NV&?#E2hgoh_HG}9DI|gS67<- z9?peVzk9fINJuO-#*jVN4q7&w`t34t`(bZ;p6QpS>s!-?BkK`srY4Q~&mL{H1vh;& z87qx4wkpen`&P}w%e@oM9W6(n9aPSqkK1g#(a_5uM#$39`9vd#h4`2(_%j>(Vj~OjKW=LB-)g*1f9Ze*X z*bvVyo|vy<($wGcD|7H7Q7K$FVGB2f(G_isf*il2MeHjmbUgK}b|7Leb6)aX4eN`X z9)rdA;z_zMUB>FhzJn_Xq9yA^166mQzrW{~la|GOf2=X2**FE7C758IyO`XWAqy-3 z>!zr=emo6pPw`LfOy8)UpxJt+6)##ECKy>wbJa@Jq1A@feq0J#?33qvY`|HsWh63p5-z~1!IYL>VXKb*r!GTHk z_2K>Igp=JH#lDz+?`V9*GbLt~=7c9^V*zJMYiIal<#s)+7TBBho7PdYQRZPP)5jy{ zU-oPG$r(wSNxpfx?!H6*W$aB~3T|qS*(6)Uctn_l z-sO2U`|3HRTiwF$MhZ(%+50MAhB}>GLYd&&qQR zYBPE3S@EZejMceyl=MiosOgRJP45 z(`#sPXclp1a^iJeyE40py23j5*w$-Uae0hT39l+SRTqWs!2gEhOZjSQM~aBbiL8M> zfl`k^9V{yyM|GV~kl&X-)+5zh+E>}XLbKbyL|0AQswngoCzUz*iFMnpRPI1a=Zk>C zLjviX>+14M{o_ftCE<0Nv9|UChi99E;*H$4p<~WY(yk|77*6?d4&T|?dVN)cs7n9Hti}G>E{G5dy`;EcG=&FXC0?#%_iy_Jsz$maf#k><6-!Zy(rN*UF!o6s&a9ojFF3?Qus z2t)1mrXvG*3IHZ6X{QnFJb_qbpQ(}=$hDv0u9Fxue@a*sG@}&9@;V_ zVMoFpkg<-L3ZuU<`W61Y)G&tr8$t$&QR>^TuJk1GP{z>_vg)1QtF+5=G zp&V*j##XF1Zr};f3J)J>-ty{K&|>0D)Kq4_M9+ub!C8UPof7Mm6;pTv zS>EEnQQ=AgUZY!*SRXbX+t*`M5!)xbH!{ANuMXfPa82${j0e@S>dCX)uS@yz`J#O~ zeQ$fPu{N>v-((ck75*xkJHeS(uL)%-phwQhs&RGKcRTU&>3k^(9FdL+{V6Y!I75Cd z+^4~z<-8uW@M}B0Yl_*_!BTTnX4+T8buT~;d#kr_=(KXQZn&|{Hs?gEx!0$EuTrH^ zKUS@375Y9jK6W}JKgWx_w>6hg@I2l9Vn=s#IL18?T`6Z)q|E!RUZ=0%S(~l%PX7|* zZqwvNd%jxxIIkm0e_tGMEljKBhyn9KjBpR&sAYN0=W0fmt`mrdaqqFRMKeXQ^)qe?Ex$Z`PGMFL{mdJ&yo6w#3+U<|5njj zVnv2pWy&w5C#P6FuT8p|PI0Ob!#u3;D&Pu##hh!dMwjp+x|C46#Lx!Y`kRjrlx z5eLZ;Nh5!ElU9?BWB*y$S=4#*<YZuh(3tH>OD`(qetnxw|cZ(H3 zZRsT7O&yxdjo4~k=_u6lmQ z;HnCJ02Kw<0fh(s9AN~dg;X4WpL_*mT{FmPb6G~pJ!V<9po_?)2Ub5qGD=i zn*3$!wrH36cl<>W(j*!^PCi;2WBbSWk3|l@9q$VxdKfFVM3rY}>9a}&p4&BAS+9WEC?h3yczn1o1IyM$2tqHj{lX|823+2deiyT$NT4T5b;c^ic^hUT4WDNV za%1;ocho{ZlFY5NjHjRh z&!gbtj3%e7&Z>X%F&pNyuZXFSE|6H9n9|aK7*qDWevR8XG!|<7ZJ~+r-j|u}fbCd@ zD0+Ja_)_lgmEV^vg{B9WcJd-;1iy9Im>DO+a?M*T8n{e(fel9n2b+5}Mo(G;GmRpD zd>snYO@v>)Y;7z%r0r?> z;&JV+tci1jCE9CyZ!0nEBRULzI<7sQC_N&p9)G<0s9Sl_hl+!Z@O6uCMHh8_X&cQw z9w#A>yRN+HdWjuY9?q@`O1cIuvha`56S}yrLMI=bvwjv&I=0Pyv#k>~7W2UnuDknU z;$~L2_wz2YG(}WDEo!&Jhh0u|o74MZt2J@1Ib=AjJWzXBjGfjOeQxV(Wpu{Jkq7v$vS_+LoV1h_1&nO1Sq;9}8XB{@S=&LX4gi3Vn*ij~+Sti}!p+*s#!fvsmz?5>;%}@ zTwPsRUAb6o9ZcCc`1$$S*g4raIawehSRCDLoDAGpY#gcoCh{*GDPuw|BsW6<3D0S1Z4Zu!^XkN&h{T|$W);}tpcj%ZpKzx zQs&miHjWS;B0T)OLVu0_fA##2UE#&rBhz zi69BF{ik{nq@r7masWUKASWgM(G7Tcy`z;$&ApXiD^zikfYPessz^j| zs1ZO(1X`h|*U^Pvly4{l*kI=F>kM+dZ$5jTp7NViwB0PyJ=?6d{+bYn2?JnKKuP%_ zVE8K|%sa=cEd2QfQi=WPSVxSj5E}#jGXO{hiUcemHSCSQ{k!|mJS$iaxc^81bzufH zs-;6KG5;Yz0riDxoa--Ie=(V-5^D%x5patBj|GLUfA)WarNDT=T3oA%Jj?$rVgcz2 z<=^#CKs6xn%{R{nTe4`ft?=oNr@k6xG~`v(i2I(CFv^99*z6uz?EXF=c{uW;>k~jB znuL|pW0_oDewtDd-FIrP)W~)CkFwues1M({DJaCKzG}71XV0BB_@YZVnw?&sHgawO zF5YyLH99(B!ZyA&zruHG0m3W7-{KqU(T;s7cD>Wq(4bBD^+`|fR25B~4x)xX@|?wC zo0*w4xg0MJe5JN_Y$DYKYDlcajOkW>4(SHFFXI&3kD(D<*UgyNBxa72z1Ez&@hqdG z1;TmuwR-R3NxpwS5r#=!&Lf-l-x|dl5kPQcBqUZX^0!v7B~R(GugL8%T8Ly5_LXWT z;sVOVv9I%9=OnWfJ$==16TW*}qg&a*YQQwq1&I;S!1;1d7O+*XSzoi}iF zKCFZ;8SQ_pGhU?d@A{gh*KHP&(vO5SMIWhKVO!J5AKbe0+DetkGX$`#Zc%WJkyo9w zgs_znR@cp}2(HRRn-FXemvC9C;wwPEf*k(cILl=ImGek?i(H7YP$;lcY!5H{wrAMW zJ~#b~DxyK{uF-D4%&qub1eR-k>7y7+!VWN?-eVxtG?u@E{g(uWe>RQXp&KkS$Hxxx zq3c6n0F`7`REE@bcj1C+v>P zMBn0)Vk2*DD;z+-HobRPULBcQomm;3AZ&++XCt4JV_QVOnoY|2xloReoI$H|SXHmr zvBP6TR*q!VaU^PH*SJYyX<^aY+NucqA^jiQisjJRZS_SL6%{o!G`u`NuJv|qJ|l^U zh%~^iZni}`o9lyp*F}uT@bIfoClr(C^4FS0UXc`Gro24I#OJTqi8yvI$k(tmnG}&J zP~T6!SCK6DSmWWg_Y{vY;oMLBm&+RU`22ioLV}vMHbZ;${OanhYJyOY|40}r|Su=5CxFFMW4oIcDL@`b9?{6VN*@ob5{jtD^(+iai~u>J4xb{jy< z6!Cr-V(VaLVZlX(1(;h~x4E5fuD#qeN`|7Xkc%`tAL}UVp*nv)_afLNddT397EHrptDN>ag`Q4vUD0SYG}V zE#r9cTh7Z;T3UMLu-*AU6MO^TiVPHe2_jn$R!Dx18wk~}*oqiE(9eE5Fsv%JvD;nv z9+UGHU%#=Oeuurr3<`C@Coe&3o0YcujLUMiJertyRXWX;3h7pale4zHy**MwM@MI8 zEa&yMktP-aGEO~=<|H2->m@>4f?&eM}UKKwUc2hax-t#6rqQ5C*129 zU8trD6y5e~IM+qbVz}@@d(I;Lxt~BHc({4a^*UR($Yt4WL1+?_i}=ZSM4Lq>O#@M^ zhLYST*dH3+!@~oOfE`f!F#TQ4bTqR@XVqn=-TQH8G|Th(!Fj1ypd~_|;&J8F2VMa- zyJmDy=@6)-miAQog zi=#k2?itqSq(`s@M&#E|K+Yf5!%F9o~g3+{PEa#N!L$5n7!qT$Kpqa zfVRQ#x27KZ4O4al)ok9hz{NUJK>?nHrj!l8K+I8lxV0}DWvMXD&6>wBHUDgtW&3ZQB;D2t2pe)9hA zpc!}+b{ZPkiZ`^hFNgZC>3sJ21ovGsz?D|WWt%1F%8AIz%DPAAfP{?v_3{GZKW-K+ zK}jhow=a*U-2n!@o12?>%vyeR>NRGtxEv%nZZG${qW8ZO?6>-ABJQ|}ksZcKGR^md z_6*j~!o;em$@i-|UOe{3^Qx6!E=6C}u1bY3hq=hT&ct0@ctUPgT-W?rzEo=efE#ja zaXAjC4-#*?92Km7FYkNoELD5q)-=uQo7w zN9m9DCxQY$(}CN4IQ$KeQL~%@j?!MyMu-Fx^J`SV;{<0c0P6yF$%DNL+HTv<*_PTyD>a!l^OE-i56g>%Q z9)Gf9XwEoNHMC*{`yE!U9!0XT#0cA`CJdeax+wF4GbFI8pLkqyGTatG2O|OrS%SX1 z=p{@xSoxt}^o7HEk-LO-r}1@H^c8XCvJ06l7mxPV#>Qr;(KZzAG3WK3oB-*x?Ut;L zsP6470!UY^Y-94&_tmpR(ra_l_x0A-cBw(>XcBS_QKHgJO-*&&?+}ZMcJxN#cbgk5 zs_%I8;Fm)YI+iZ7@ol(`@q3GR+z)OUzATgLz(9xZ{ z^ZY0?5j0{d8pT)?N|JoAs)3l9jZH`%;1NX<)yM(yFw`$l8e&5YO8&rjO28nDV7?rRZ@IU=ES*W%gE$(?Slgg!brW% zt2RvQ0=r=D=!S_H(Ik6+7MCg7 zG>@_Y*UQ@LGkF&~=5>VO0A{S8A0SyKGcuKd7Gwaz8GaGNLAflb-bM88-Z(r&cJxmQ zrADp{<}m654~nCqAnzH?mm(B)wtC&3tneAru=Gky?@biE$B!g>mnytWfFD4~PTw?8 zU3WwNdQJ`qP$RJ0Lm}wv>yzO05(NyT`wjNfgas?1k|SOYQecB($%G?FQf-Z;y#ACoR!N~OO=J<|MP|LPH4)3fpIQ<3@GaQn6WBti4PTm5CvvTco z^=%d~+DmM;cSez&ESSRb(_F=caIv#0l$Ohv+%6|uJ}o(GOlG?>orSiW_zA3)eIIU9 zay^vMPVzke<&=l|>rBF^3u(x2U#Nt8SbGDv|0rz+%QoBW>pGSb@if2MFg;uXRF2j5 z>c_7}JJAZM@ZB0>{^R4SwAeY!M*u|Hvl6uqr=@HbaNjadz)@MD+t~GBFjGShV(c%~s_`3;8ur)r+o`?`-DdYqAHbOP z)B2zo6cpt5#tO&FkPQPbXC!BTW;wr`43Q8Q-MDHiZae;H zZKUw+IHclL{+q|#h;K)51k2nbZ+5&~sKxrbCi{uP{Z>zfHrxsd9{Zu4p7;iA#ij7l zf!gXqPA;bI1LbsX#Dg5Y0AI2nD#V=H9AzBdCSC90bkZt}Q}sB7gJXh10`W{cQ_YAh zuntD*hK~yk3c#Iy;e03*ce@-)p<6*L24PS&j6g{sBVi4)8PSvzGfbFfONO5&AOtFa z2b2!pyPwK=fqCtq?>RUI|0c5(IBUtJ5+Zrm%?n6C#YQnCzfue@fAXTn;=kH82 zp(TDe`3eMaHRE+VR^KBy0cI8 z59yMczBteu-k;V0$G)we2_5x8M$#otTHt(TF$RD2)82O+6YkF^Q6-ZJED0^w2tAQ)(TWNU_V*0o95)!3v6_tH z6X!{j5y2rA*_b!&Wv9er>+~NBk|atG90Gb{pyCh^mLoAaF6G2QKSF!p!z;qH<^h{Y z43eSr^>QVh@r)QHSX3{TPRCo5Qxej0{{udG)+Zk<>!5ximdb z&v5|?vJF@Sc~8@d5PTst&Av&GNgPHm1OrbIkC~3*N?P_J`nWL0{zI1H4IV!GTtB18 z7YV)uI4-CObOfKCB6-C_1I>sSr>P>PsUqkv=}T9P3f*+E>xd{w;=%JL{$RyXQMAA|lcm%yYjNYCq@=qN8~A zmnIk}-DPzF&Z5^3LStQI(>Hfj{+1Hlrj zxsUH7M;b;fl(K~gmq@DF(dUF&#XUPc{LuR75@}GNNCx_G2;&!i;|?9zed~?_14lyn z`m5R>BAjt2t7$f3eV?e|0(8u9XnM0V-m+vzKom}V|1M0km!J2+uSi>j3YuNuTg@$& zw-{5kQS}fsA_)Q-n1=mJuyvR;kWT_*;(lrE1rKH&8l-*}9;VF49v=)1?Ym!?QcVeU zpLH(FG=GoyC|Aema~`P=(xt^lXh9WJm5LpjuQB?H9_VM^UD0`f7(g)YuHkbq{hgWO zV^H^nL5=n{xN?&2k560|rvUUb7PY6^baH}u1WM@km@~Wh#JDr&C4c7<&^Bw#BxoHe zV?8sQ{!%3QT&i`Qv2eoHGq}Sh*>xb8s#iRG@i0R^oZcTR8`cmU7>c$N(AH9U-HhW& zKAcZdN#n*6C`T8tRpi*f3-w{gry3&;jpoN3(@37pU6br}Y`6 zRNKUSuWj4m`;>8sx;H_9idh7*R6`Kl4IPgdUo4Y z%e_gOhRQj0!rd`F0hLS4XnR?sHj7c(0`iCeF$>O1iQ8omG7)s%!99=K^Jf|{g z5E%GnfPHDjP;*1tPYWTm-!LxNF`o&m1m%y}{&?_Ef57sRTX59&JMG~DGgkJhYU3Kg zF^*f$4Edf@DM7b;kT}pkv=;WsGJrXD=Rp3)u+InC8wax=UO&_jg0vve#8u$5iQV3R zh=(Qu_!D^Oy5=CdZS&~XulYk+i?P)LQrtG-CC|cgnhE@+gBn5v>_NP!9ckbN$LC%} z4*!T@)uxAqP>2@vmgyMe{|-L>!cQU5^YWsGSm>K>8BiIN26^dPY_J00^ds0eKb_Z^ zCF-2;)Mdpr=y_~b`JVR0&~7h{_TISdwjK}1r2YzjtXujo-QK#_O_TgjvwBbstB_~o z$f9`8`vr}*Jm%HGz$Mb9I@E*HMuVw>p~N)P9Kw+KzTMxBn6(tM7A<)d5x$riq!@jB zH(f$+FowejV3~!%1$IjzP;L6+Zxj*#i2DaKcYT-3bgH=*QsK7>>do6>JKZ#;sAl)) zW#~i@qg6g8(K}iZI%9qH!IJ&GJk7iD+*Lv3teYTnv1c^kFXw;!wIl{4(?cI7g81p+ zM7%-5HT=E%zofG;n;sjWEaei~if#ILS?cArQ0_?K|G>v?0lq99+x{bHi(8^RJFf^# zz|;5On*qVKYY4DTV>(Fr*Y1a8BAzfONflrZ=t$raLvK!c4;;K_!dgVnm||oL(}n_= ziQ;rw9(0_XoQy`ohjH4_Dop<|@*i*yfC+*jA|g5q?538DsYCtdX^D|syUq?lD50{U zgV;cp&|IV-5>OHlh;$}^LU7H!jGl~ZD+u4w8m@1_^Bi8WgeQ#)0eSv9i9*9LXOCX7 z!Z-6QzPT65*1@5K9MM_-Z~}LW`$2i=Rc_T z|Bo_5Tm>i+O^^B?b&5gi8o8!_?b5%jUo8z;k*?Do(SI9Ftf33~90dm#R~X|tR~h54 zLjl07rhu3Q7HjY?Rs7YchybAs6&U}=N&Pj*57uAAl4*}=bhfCn{MiC`ZqbnAU^UBr zXE<#ngIB-Br2-#y3vyxYIXXMno9EQ)uyEcUFKKFO-a;@!Na}xBq^bSTa@sEF@H@;{ z1_NE>;wGMtbeVvW_`C}uLG`j!CDe=hTl&ZSAy0Wseq-6KA`AKEn=Fw4<$m`u! zY|-S!#YJ3rCNe(j7h_`xZ2Zd8HaK~Ie{XDToP3`M0T%z*^EO&+tqymQdye?kdEDMf zOZ1mtNO_iq`Kr}q>TY9$)-P_hFWapZdD$)QQ-iQyR@tg#6ciL39k~v>A+k6NWNG_e zbr~dwPxbZ5BsLDq7Rea-hi$E+RO_sM2rwUoq=qXiD|vUl%9{rh1+vFSN7?Q>X^>>{ z>3+-?4G9UWY`MuEni@+*30p}?NrTNf+144S2#P`J@6|OR^3As|D^yuH+}N{>*u1Y= z^hBHd?X~uy%<1f+Q_BWtm+3Wgo$%5{@+N!7SM%!jEBdD^-Trk%-VEpZ96EEAojUWk z1BonJJA4jNo1!MoO1?9f+xmG_l|0!4$yH0pThO>=qFU?ML${DJkky@iipAk;r^epy z-qHCaG1(7%hv$cxV(<4Iu90(WDf&wn;kUjo=HL?hTQnmF2hJc*cXtRJ`x<~08y>#D z*6});C73tS-PMK1q7zhxi;H`9#)O09>G{}C?&~$0$qzxirC;tZcROAlEX$3Xnwo}F zIgI8i^&rsH!)4@(FC}v(ze}9v`P~1=on|`a?`S;@N0Mz$7I_dH87o&owLJ(ZoqW+<*s$C)` zFt8hvrI=czfG9F}tRmbsJA2SInu8KTrBmu;_M}ncEBtA_V4s-y=Zk{?_z; zuCr?#;{Axbj18ybzM-!v1kKCh~|fQ&3Q# z?|J-|8J=Qgb~Z%8+}vEXhMggqO&@LM5uy(X)Na4|2J5AQSdsL^#JVrPu!bM=hFad1 zoSoSvhO+t37>3Iw&~D%yM^sP;0GoXW6B#-lW~wmy!6AN}@4PO4(GhIb8V`X`6H`(O zL26w?-dn+brE(#5wE*3-xmmcb^X)#^`&vm zhj_}8gq_I3!h*fKZw4X(#ULdG1;8c{va$2nnNj$5^}VlW1_s_`K0G{BYSlm?mSa*l z0X(w4yO=FN5Zj}pqo0nuT_S#&3Ms64((_dG%N5Y0=vrhnG&I-O*AN)eF38Qz4P@Q* z5rH{XtysBp0gwZ{*cjt;Jt1N8v+4dUE^>fI%!3kxO(3%;dSPJNdcTt~tWA|9?|L-v zj}Z!lcDrLIg+nJpQR%xo-%=vZ=Z5$=h+}rj5+kp}UFQMc9cSuc*7`}k%92|Oq(P_n z84XB5;|qEwSG&3x*~8gP8Kx)UA5MKZd}$x`$sNnpuMjH_`~hMDbB0+H6Sm#t^Gp-s)Zug6uPWxqj;vLnMTDV3gJq<`hbHir ziwpbYd2vz4Om#;HbZPaawmBa|af(B>9|{J|1u>_ZpMvD!j{Nlwei?-xB?EdDVK!gu zC>hZW6I1|}_cISbYdz~iHf$+p9Y%Oltx6Svh5V__19vq5UF1%zH3-HE9|h?K$b}Qf zW!Qt@mCr7OZ5K_#X9qw-iSmG4JCNL$t3tv2@9TGu%D>%&Y1ztRnq(=q(?}YO<1cX8 z;-cGm6%ZF+1DTQ?gGfV5Vt9)*NsuI1cqpR-w z$kc_KC6Oa794apPAeTko`I0>O{P1K|iGFI^_V{?M2Mh*jY^Iph~LKK?2=eRKir z`T6bKf1MVcz~aHAi;Psd9ag z2zapVu(JHvBGdYYP-wc-aeQQlxV-YR$@H+nH=-V;m}BD%n-4B_j^u?-0^v9dlW%HD5V1Ea)5{P*}8ZSdl!^gs7fZE|2kr#e-+d{!emeil+mw& zfwS{-e^=lT#yjeOjjys~=QlSYmYvgchKuxt|G6E=c396sBB<7#W@F#Smqnu%tLN8F zXp`L({V>d}M6tNOxKlsZv4)hyhDsuA_rmFdJA_e%<8oC^a!t1PTSUVxF{?>_H{Mw zA10`r?{BwL^g}2O7fAjMt5^`Pu)SLwnHP7F&#L77Y@{$G8)Gtfbt@T;^_Cw|o4nP7 zDv&xmJ69|kbc5|vFp>O}V2bK7IKW;n13fk}M|Dq-f+!v9Q#X2NDR>dXvQt%zR<{^~ z>r@&_kPb80uloaEb94)gXYUb~K*)v35}&~~1=0s@zTwjGf3iiVU@`qmCMV)4 zd8Sm?fGHPwO)7NXBCLya8fe5T|83k{$n%}5ah6ZsrR*-EhK1xIP{UAKDDy&cpC3e= z1I^k0#H{`;kT*ZUEimyte}}J-T5bUhitgp(-kzD(e?cuc3yVT`LmBad_rF2BcLwC? z(9SKsxNq1E?^vPZzwPKukZ6DSRH)&1mar!t@!2rjIRD>X7?Q)s1CG;6ugoWe$8|_x-$=`FG?(CIWf2OUMDdP)u( zo%(l&0LEVLsdY~*u`|J-brvKHdOF|;AjB*HNdgAfUBj7u$vb6mmr~AjjF({d{(D0L zA0*Zh5D){dW=*Bnug5vcYza|0fF(i^ZhS&Fddm>;7*NEW|J#z1I24|FYlXfav9l zz{BDnbwDbmkn~2Ps!3^D?q72X%RrcuNvfb?|CQW8b_edC_2D*#3&{OrvfTbZ%#HTG z8~i&7BGm#?+a}L@x_`6AD}q1FQH0+r{yRw%1F}BNW!i%`|H?^54PhReR~+)+B&0v< z`~OBcc6&9+r}o`M(Qqv9K7D$lXY-DY#ET_7^4q0_N1II5Zm^4jTZ-pIH|!}XZ_Jb> zw-Dcwo2T2;ZQ1?O`f$Cddjr|{&4(5DyVJR*@1zj9J!t$z%$W9)g3FTMe3_|v+#pQ3 zlCx_1)XE=m6^mCnDnFmfp}T5>Mt?EMTmDE@HmC|8ELo7!&lVBi5_TOoj!-zMDDN)A zre8zPD8(FHZA4F{TZl|mm_E+r2C(h=l0l>R?@Ev^%)|GY0~>X>apXhXQziXWHu}ef zf{&I7AM$dNi;ltxY3QBQN0;|{n#Z>ZE%T$2185y*0^YojboX#@J|<#uAESel6jN)r z(D)R>=cW>at#Hq>@`E8H4LM>s7LV50{*#?WADw?6T#tO?*KsD!H4jr#e5}{)h=CSL zm7@R=#~Iy2d6^3BS09SQ2jR^=-V!-q+gXcctV?P`qdp|;z>z11HK9`;Q{}HeEezuC z_R>V$KYhB$*1GX?Ile#2cxV0*vWu5Jp}bi>i>Ec>>M&5*Z>8UroDIx(*edj-SPtUz zcjfz=+{%VKXX;-dO{lKtMy2JgL3QEOAUv?I^vpxw+KAM|k^$jL2ABPhBRvi{hTl zUNQ$a%`z?o0)`=Sd$I6FTUPReP@MqI*_fRCG*^`(l{hQ-|2$qtUDnksewbz z?V@Qqs2*tpc)WRezkZoV204IdAgnzI4)esVO^fZslicSGCCSIC(CeGW=r~J*-x;N~ z04Z2PT`Uk|AMB8?yDHfp3{+}RM+`85}`nj%{v$E?qkXgFo}d$7w$lQ#L4 zilMCXlks?y$i_J#VI+-4An6rRQiOh`>(_g&K2-uX2Ub?jDRq+jZ1(4!CitSxI+lixCU)3xI^Ra60C7|=-@JNzqxnK!#vN! zoX4}y?!8Z~)3s~=>sR&6qaBaPBUq>MUZNKze!%xLT?o`0+{!W7M87QV$9MW=J!gNe zXH9$U$3VB)lr~d7u*g~O@M43y8}(YTv3ULiTuM0HTSUs?#W3fyl|XA1b>KyGIi;iw zT}|s(St4KlPzBT|UC^e;F}c-*ehr87tb>D|@2_wvIt-H<77jCG?0%xGR#wsMzN{&e zSLY#qjR@s2kf`KPK1U-w3yHz4{nhRZFoWN1aMSzsl_o%#Qxx(pjoAse-@*y7UCin$ zr$n{6+VFuE2^DFp`U0ew=(l9od*|XH3Zn!-ZvKw&0w!SZ0PXgvavT@4x(@Alr2I}G4yS19XhR;eVaq{& zblw$XR<3h)Sv1ex<=_2NWfLRZv{q;5+vd2B7oh0TJKDmEI8--=)kkB)YEy;x7W-wm zWs|>7kXrbbp^-ni+rM^LM5W|@+KXal=3V4sDX(B{QzydT@7_H~YMHN49Al4889$Gb z*KcB8Zlw7p$8H2orBDf*oT5~f(QN#rEs4kHXFhko!Ie8?&`-hv9_A9o%1|Tjjjf~j z^*I8yX>G3u?>s*5YqxjOk7gC)MqWzV>`SGAKimdW3nK0TA@j$(npAOyrpIqXY$>xf zJJZN|eSSAXeJ`~3-@k4mZrR_Bu0g^RJX@4ClO46e7@WgN#DLqmYtio)siFp1*S$XS zG!>~Vs$+H-Qt|YS{g1Lp-eon_X{}_fQ)uKCTGMmLg*41tXmI0e;o<6Pxo@=DI8BYt z!fXx$LjrTx_(UA6B@JsS=D4dr;*WW&Q92`iE(mei2s4fs^)n9q^x;M&E;bf%2W57< zh}G9N3=C)bAuYR#9X&MA%IS;rhhH1Tijf9I!TX!kHnLJ0#c4i0DtbT18rH242{>x| zpW{c3d+sMulwel|D>uf?LnVvZ8QbLn+8bRM$U?CPyrx~{RGXAX0}Si5C}Gv?M(l4n zFBXAb&=4W7B|0-+$6M#LE>BAqTvWJ@y~YCPNvr{;7srs*f=8$lx7GNyHTSzz-@g6w zbW6Wpm=n*^dmCHj^o9KZ`lt^`g$FHNu_cHcl{D%#qj@mR&`TWCeyN-8iGgUg=>Zi zj=2sdsRv$&>>Fm!o@3#dvSRC{Pyi_!eV6V-)#G~4Lnx%_w_IgtkyQ|*l<-1(R_K(+ z=ov$mlqwWQHF`r4joK#%Ykm$!^^j^bOg@_rgFr^LxR`$5@C z-Rn6Qa0f-R8Lu`~8HKmS4mLl?8I~=3MItp77-#%wfvTz2xPeWWj+qvp!B#Bq6{}~8 zXE>NbiA>KLf9e>CYe9%ih;o4~Yd^FB5Wk zF=3eCj?fa!o=?8v)Wy)2WITc6(|bQ>7WvRsc4KtLiDH^qM$gKTUTv0>9ip)ghss+0 z<7PV-MQ3+6iOF2<97XV`(LP0&HPGOFloFE`>yC=73K9h@6Dh!Yf5;1xIGwnKgiqzD z@_x^~?i0f=Vl=q+vf*O9C2W*k+U-h6d2}R!pK2~r36mv>&{vR;cTt9b-&iTFbr(!p z)zlY>>i862kH=f?66t^9x$o}p{3f(J#c4UehM#95ha4tU~fQov%MtUe#7HBgIu_-S%B?M9l*z_jEEaAUUMPq=JecwlGt8h$xn|8kaz zK*|3t&mls`$w~8BE2s7HM!;BAVW%16r!K|q^u7`fKR6x(z@$&Xo;s4oqfh3WG#1-3 zrjozrqn%VV(eL5*^=vLOSFUWj^yf%iGTr&29{)ojTjprerGlkKmEo`k(ydVtLtNz5 zh~g$S4ORZjUPsy(TxDWee-RX{#Vo}fgi=Cdg|HRU7rY+2kA}vCM@t5j;8t932X^n^ z?n2jFDZ0Ge*0Ug@R_N(Q-@qOxo#OjPXm~5$qA`z!9k0=GfGQGH#Xy3TRr?xes`Oz) z`#!NuX<*}_kiN_iw~%o;zDkhAd417d?=(tNsy(tW_?jIhY4hi_B}v9*9=nvJX0^}U z)aP{?egXR!mF#yWiW7pF);8HUA|!sgP(vdPS)2GZ{A*=-W3lvdJ;Fu1=O7(^W;_r4 zHGARn8mXIoN903gpHv~W6&?q>D*Z#p-j40MX7{kzrP)Xj%f<0e!0$hFUW zm2ULxax!K_R6O5ob43-6t4TyD#|PMNKWy8v@>ocD4<31CD}&!eA#?eCDE*0zJt73o zCMo0cP&kVZZ)haBuJy@KfoNfo0$XLFpWTj3JhR7R>-M8xPYs_!#8>O_5>1#5V?p6pLsGyQQ^ky3 z)YSQ+DGkee>ZhvHnaORo%f7N;$DiYX;}4S~yep-VIb$m%H>_cZY>ir5$2<4f&A#Jl zAC}*f#>dACiR%6|s}_+SXrB#JNns5z%{8>~2Utc(X2tf2m`~6itwpbWtmbqb%9lM4 zO|x~BZ*R?ccBHQ*N_pL2kf62v&{#Cfpj zXilFlts(C+U(P;f?ATR@-9fCYZOHl}tO5|sbaksUfcXHYfPoP&f8%**#y-3hmTny(04wJr~D)SK{PviWiZs>;BqE7U=^d&BsevQG%E#LXgYpd_{AXOS~(8sB( zKB(}vb0U#%btz|{DDB*Y`Z+=_w4MZc0fiNE88H6y{Z8R``jyM)W6|&oEU+hqv=GoBc1mrcv6*4BY9-YGF{@)g zxHb!w8gy;ZP}bz5b#FB;^wouG)L;Ru`SZF^;gO98k}#u3N_+MIv~;!~ZhGUIut3T} zHf1&sK8Fs7v@JuaIH(KTM}txF%3u=u#cbjFQP_)<$xCZeoJZOhScH;(LTCOxw-7|B zhneFm(LE7dc1i)5h{5_2|I5#08EY5bvc9r8F7)3qcNb*CnoB(8jnh*%y3%$d`T-2W z5EB}^yw3|nO8IC@$Edwj*j&xGK4^i3JKT}j{7L7Kpjw)a@cr0Jv%F>ko*#x=1{ zANqBRVvwTVnX0OhhQ>yH^bZ*H1ktOVsN@FWb+ckE|3vUd>O`b8fRB zFPf_I%?h#XJYU5Z2O|zEp5u6jhslJnjhhK=ZC&+?Y7;7uJ>SX2fLj|6mxJqnQ*g3qc*SG&fnVam34Z2{+OUv2X$K|a zu@2@EMqBrdi){sl(tT&=uHvrfbc54($^$^yu^k{~)f+5}>MH6uFemIle@J>Lk4trx ziVrVq%-TI5F+TYxBO!8DZUlq1SxS^erGuZEGeygTubGnCeFFV5d;2vVf{%F1oo|}f zuYXjLoI}{Vx^Fu2FL&bk!&(KS*w>VQP>TZoYi3cMZeK zBYaVQ#N*!mZw2RN3;BOvPbi*!fBYeHV_;n|j=mq^t5R=^fsxmiUC`x?0_7tJ#dWyC z^{OjrPP?KbYIR`kyTpeQCSl)S3i#ZV0|sR>NL=rl4+57XpEl`57F6fTq^*irhBDex zi&$q}vEw-6x#(dV-L=nHcjmLiw3pX}EbQ*%JXdAb{Uj4BxUIg8l`yt?E;%Z1MI*iS zJ88*LTc#z3#qwfDgbH*>x+<9~Y5L`l;X1l%nk$)WlJxWN9i~H7M$0`OCbMmAv@(U_ z0lGn5qj$28fA74f^)Ynyf!9)Z@yP29bw0&bqs@hdvhE1gMu&s9FfFP^HiR6`7l`wB z3Hu9+6|)E4C6Rt66{~tS+U?xCpPd~v_?D)Sem3hVeEDNTG13eb&$Jmo9Tx^{3z|Lj zU{wIws??gNeO3U&0UwMb?Sn=$1CFrhRs)2YbH5ig&O~7w4#lEAj z4t#W~y-<|l*?mMjINOmbk^||_?lHUCHtQQL{W;j%IcDKXHEJjYfdHfSj}}3GE2s;{ z+m)^-?Ljx$Fa9affqpyMDQi-O1^P%fGxM^*lB_yGJ`yc@-5Jb&Epx zcj(o-`tE7^MkxI}M)THpN=C|Qyl#zuZQR|>UDNaJsv3SH%xw{d6>Wy_H7qotB}Z*e zl)M;F#qgVzqX}f1io9$ow%U{&eQnyNC;V4$u>lWHop%n_Au^JEQ(n?#mN1W3?Oc1= zkvdbKsmop|6Ry7M0Si!Qe^!5NaC9(N22|nbeCFbc9a&dwTZc|QV437L8);J>>-zWV zFP7|Lpg-tuMv!*-w4g#JzrB6T-0ZxPphq8f9K4P(Y>%}7A0NGYU7qaH#sSkcmc^_# z(?RXkM^Uw*y1iQEkL9X|EbbdbUu;21?t5fRou1;Dp{n)BD^6!*ta3P(e(d*h77Wr+ z1|!4jOr^H^q=wrr6y|vLb&}Scf|>d&ky)2$`CK-2Z3*dGA0qJ&-QlHKYzp!Ub7vt6 zVAkQ{(CT$Md6B{aPl{Vp3j}AG&Vg8Xnh}@JLpCyh0 zdWn$pvUavHvlU^720A5XB;SOo5K&6$t?YM)fk;wa*xWn2&8(_m%3_=EKA-F_;x7!G zRhfon&){zfzzxwRC0WS80pwh4Y5WtGgepazM?+!eQC~`KZe&qk~GsP;N5_U%s`KwHoESQG29c~#tH}YhFypEN2Ny6;lc;*NmN0CY>=?!!ntk7g8h(bB=$aJykY_$Cr|NR`BwFYPX)e(HHF6!_ zL4cZ{%a!5roXi4{qGLdNpupYsu>Z3rBCxnGPu#-L ztrDZYxwp^u;%P8M1HvY>zu4N$oPp2{4gNM!5h7z-6SQ~UUA9N^MjQ=R75R~osO|0m z=9BT~ZbJA?Mwr?*)(-gm&3>R1F^DD`0K5&?2^g%l$ub_ZQIVm^0Mh%np@G2X6ldyI z00A=ckoyEL!No-d_u{R{t@4k`sKP@2>(2o2`N3{q6AFs}IvLjvlB2Z@B;J(~z(c^v z(Kd$R~^$_80LW~L*H|Ux#ckfhy;Axpm zw&*D)v<5D!MST< zUr(YZMTe$>RxOi{7r*X|5?z`wLRy%B=}lik8+u9#!A_c}x_cNe-*8*ZoBNYf`?mU7 z6CqRi`aXa=Cp{AaLNW#MF=?A*pJXNEu2ahdAM@xi@KnBmzF!Po#qF{BqiX?tfhN+XeF#?j9^2vSi$Evg7_>BjLSj+NDF?n9ikL%S(E9N(U1ez~VFdu9rMrT1c zCM%^S<-5HDEAFKr9l)6XS)x;2q>aDu+}4*H?PKz=+&59(#=IU=t~f#PMkQdoxySt~ ztbv4~cU`j0u7=$JG#wKRwII6@UH{%bi;3{_0msdvnar5Q-s?eygsy0Rr*;(nF^c63 z<2jlybpGpa1mLW*9mguZ|IHDv%70Egdn4|8Mn<;pIDW3F5!KBeHP2X;xK1Eo#hr}8 zzduk?^B_=BY6x~#t*DamIu$;}1gfQAiBLD@3&2HO<;H^>kJfmWQOav;UC>q4Q_*@6 zt}O^Y*sK)FjuY+o3CN3lWmGkOco!UWdO0rU&fvMbGrGDp*MuH`3c2YFIJuF7A9mi^ zra%;u1@)^OP9SKnZgh_>qA`fXHFinM1ieyEsY&-n@IpTaW454C9c0Y8=Kk9)lk*}L3Y^j}ig(Q`$^rbn^)o5ZkzCsRnLzSfJd6LUd^MwdQ=gHkGS`)> z>sDQkes%5q3ERIXlYCJTR_;!wOI;i*J6^NscA>$zbVjkjxZ)G_xr<9zo&r5zfo85- zz>83Y5c7Tg{#4>{j_j(a07-Go&SMFAdz3j`PB!*@n>CviP%lrODrmv{?6**tUx%hI zp)Per?%mr??FLVl7)jw>?RkP>Ss(^kP!x zZ`>%~^aw-FVn(xVOVzT4Uv!Rpv~RF_Dnrv`Jy1S~Hj03^=mEGX-&V4yOAwKYCK&&m z(p~oA&OND5BhL3Jm@Kp%OgweIvgbC_cky7da+^^NKaZtxS#)=De+R0Dma8Vn;m_B4 z!#6wY(>}~eJ$yZs;J-OvXe4M}Bu+g0i|x1FdQetYKIM{czt0)ugx+E-SiiwzezN6< z;KCGj`^@iiYJHi%-bRpYa1)n&kb%~s>KrSTg?v>yD5eD?*Q$a0L~OvVXg|)u@Yw+I z2ygupl~eb!te9Anvso09Mp>G`qg)YA3qEPR|xBn`Y{ zE(vkga)v9ye%Sgn*s)vBN-;`)W@&`$;BFG-YG~x=!+Bo7@U?jY<=!qNWo(A?t)}R= zogP9rpduAGO%KFlOzJ~*RQiFJS2!`{+RkNk_OK<*(tvPWY{vin}eQ@3Suj^bU?M~~x>$qdU z887~-wtLgQeNyUhB;yogLn_j-BpYi{cde6kzBC71PLZl1w93V`E@oc-e zfm8k!oUh`#ZMUH3flB}^5oAR8@iB>9)W8o=-t2V5PK9>d`T*Z_bKAvTG9+T?3@D#2 zVM0bf9cN}A;^OUZy73lpi6OwCVAHgoAwb3`DzakIk7rmX2B8yZo$*v^lR`S4z3Orq z#q1mS&oWoMnyQ|8n#-gT-5kB^0<0A#Ft!J~&A5KrS0%gz4pw~MOXk7NRbh85jGXK#l4JEg?| z{Wg@D*H`>pb=vALGEJ2mTzb-qo zwVR=H;PwZ;s{!V)xcX-YQvmgYQ-Aw{t8$4pQ{+_vwX{Z~ZQx)b8$3r{bVnX#QNOQq6Sij8g@*?3o9=*h_2kT_)V2&{#gWTQ|&?>Y`!9Gm|dAqaShUe-gt! zi2(K$l((J#3_b*Q1z$fyt-z?EZ(Bsjj(pCf|273yo8p8n1Oywq|NaSBw-rDo3n+09 z>#jK7*vBEbWfn?(PNBcKEf;>+FU&|t+EpbLp~rQVp1!F5={Lz3s`qR>jy4;d`)lAB%`0P}@a1Cpi zGhSy>{A^AaE2H!4t!W&n%1ZKUpo#f!DFos_9wM8g|U2blVmPc3&GV%Lkv+#^+c*>8q0$AvsBNniH8NN>F_E%HWPj|@F z_arswz}C@ca-Py2*Be=+whY~T%y{kr7MfYT^IdastT_0%15xsi|Lp*@A%3Br>of~e z?gb+soi^&Izx^S>Mi-UvuV`vQsNX_fsCZhJ&~BP4 znDbU&lJY99SGw#I5)x4PzUs@IJTHA%UiO_<01xF4N{@k0;?Bn1Fh<}FgC`{LI-kEV z#k)?0AX#)~Aw3FQn*NBOad|PHRy@PLs6d$2UoQ;S zD?V-6B}o&r_l^I?b~Ib7A-nwq>oHK&%Bhj=@#|&+KNqFq3CARr_`4D|n+dFCmhcb% zA;+l!?`{>21$)ynwQnz^)*jjmT=aXkMUA{%(4D%2|MUc&ZJ&&yIr33&S6EgicrbnT zfVZT^;J&o#y+QsYv_CH}C`!*iEYyJKppRE57$yaO%9`8on=T@&HY9B#msj;hhb{%c zhmX|*b=)ay^9AenLD{6iJb@oVJow*njHw=2&f#QE*n3Xr!7JeBJIsF3FGCAnJzeb* z2(LtDKaNlZIjpS~e)@JcTshQwE0WL!Foo&RLVS@TVlWX~6>>uoh*!BgS&`Xre>4jy zfa2^|+<*F5E0lrhA-^kbQ*%vxWzMmmFJR1DBn{?TSds~F%qV(DllPJ_%ki)9>D_V4 zNx4k5)!g-2j$m3%!8gq?Q6E|K%j*kzbGyZ3Xv*tCJXOAs=%4Yz^|rH3Gx-s)q=H8% zIyrz;wY|Xkb;bUBT1>DKp-r>9CbOU#(Tj`<r69~+g;Bq8%G0g`kV6}$BPq<)`-uY+{4W{EgTl&m6$&1SAx>FUD< z-<-{n+s*`Ix6bY2=(FIHESk*B>>qO_^I>67k4}gy*|%|ju#p9#!XdJ2b0t|U0zmeu z_`E6xIDICk$(Zy-suHR7vm7r8QjYEo)Fn~o?ZrL9TG1A!JN#w5%`}t_>#mQet0}te zQp506E3FJ<(i2FpM|;?Sc3Y-pqt;k*QBF3Zj=`8%AL&kr*ud&wkPHFD0|y<a2?ne8pZtSBA) zAJu=Fukazm#SH7ql&=p4KwjZUh;w!^@ZWLXk*{#1OxEH{3g@4nnh<*B6NOH2{{9C? zs=dOIMFW~I?Cbwb=8f>mC-(d08UF`IGQ7fvxL<96{}Pp_uW;mPquPwpzmmAfOVwCN z7M0rZe}l+g*GG08;r$;RS@b%&=2nT(zk}L>Ug5}1Q4O}2f6qT}0mXftJW{w$>0da~ z^A(QtT&6#u{r5eyUK;I5s>K(1{5J^wb$zk-(ry2dqyHDAgd0*;K!`2YX_ literal 0 HcmV?d00001 diff --git a/duckduckhack/welcome/intro.md b/duckduckhack/welcome/intro.md index 25241e070..856ebc530 100755 --- a/duckduckhack/welcome/intro.md +++ b/duckduckhack/welcome/intro.md @@ -1,54 +1,72 @@ # Welcome to DuckDuckHack -Thanks for joining DuckDuckHack! These docs will show you how to build and contribute an Instant Answer to DuckDuckGo. +If you could hack your search engine to put the best information first, what would you do? **Instant Answers are an opportunity to create your own results.** We're an open source community with members [around the globe](http://duckduckgo.meetup.com/). Welcome! -## Quick Start Tutorials +**Get started right away with a [Tutorial](#).** -Learn to make an Instant Answer by starting with any of our quick tutorials. Pick a tutorial that's most similar to what you'd like to build: +*[Email us](mailto:open@duckduckgo.com) at any time with questions, or join us [over on Slack](mailto:QuackSlack@duckduckgo.com?subject=AddMe).* -**Create a Cheat Sheet:** +## Create Your Own Results -- [Programming Syntax](#) +Instant Answers allow you to improve search in an area you care about. Your Instant Answer will appear above ads and search results. They have the potential to show up on [millions of searches](https://duckduckgo.com/traffic.html) every day. - [Screenshot] +Instant Answers can do a lot of things. They can be quite dynamic... -- [Foreign Language Help](#) +![](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fparking_ny.png) - [Screenshot] +...or simply convenient: -- [Key Bindings](#) +![](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fsales_tax.png) - [Screenshot] +Some are just cool: -**Build a Utility:** +![](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fheads_tails.png) -- [Conversions](#) +Many are absolutely delightful and unexpected: - [Screenshot] +![](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fbpm_ms.png) -- [Calculations](#) +Many are super practical... - [Screenshot] +![](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fair_quality.png) -- [Transformations](#) +...in ways we never imagined: - [Screenshot] +![](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fblue_pill.png) -**Hack an API-Based Response:** +Some Instant Answers are built from pure code: -- [Forum Lookup](#) +![](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Furl_encode.png) + +Other Instant Answers channel external sources (API requests): + +![App search Instant Answer example](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fapp_search_example.png&f=1) + +The [possibilities are endless](https://duck.co/ideas). **Our community's mission is to cover every topic with a community-generated Instant Answer.** + +## Start Hacking + +Learn to make an Instant Answer by starting with any of our quick tutorials. All of these are self-contained and will get you up and running. Pick whatever looks most interesting! + +**Create a Cheat Sheet:** + +- [Programming Syntax](#) [Screenshot] -- [Transit Schedules](#) +**Build a Utility:** + +- [Conversions](#) [Screenshot] -- [Local Search](#) +**Hack an API-Based Response:** + +- [Forum Lookup](#) [Screenshot] -## Dive in and Improve a Live Instant Answer +## Improve an Already Live Instant Answer We welcome new contributors to dive in and improve live Instant Answers. It's a great, hands-on way to learn how things work. @@ -62,6 +80,8 @@ Spice Instant Answers can make external API calls: - [Spice Low Hanging Fruit](https://github.com/duckduckgo/zeroclickinfo-spice/issues?q=is%3Aopen+is%3Aissue+label%3A%22Low-Hanging+Fruit%22) +Have a [favorite Instant Answer](http://duck.co/ia) that you want to make even better? Feel free to dive in. + ## Talk to the Community Want help? Need to think out loud? [Join us over on Slack!](mailto:QuackSlack@duckduckgo.com?subject=AddMe). From cf31ce0ab6079c6aebe48fe2c2a2ef410dc76e77 Mon Sep 17 00:00:00 2001 From: talsraviv Date: Mon, 19 Oct 2015 15:30:39 -0400 Subject: [PATCH 09/20] Second pass on the forum lookup - add more references to docs --- duckduckhack/api-answers/forum-lookup.md | 78 +++++++++++-------- .../backend-reference/api-reference.md | 2 +- .../cheat-sheets/programming-syntax.md | 6 +- 3 files changed, 50 insertions(+), 36 deletions(-) diff --git a/duckduckhack/api-answers/forum-lookup.md b/duckduckhack/api-answers/forum-lookup.md index 719a1b39a..2f49f699a 100644 --- a/duckduckhack/api-answers/forum-lookup.md +++ b/duckduckhack/api-answers/forum-lookup.md @@ -6,19 +6,21 @@ Together we'll build an Instant Answer that directly displays Hacker News posts ![Hacker News Spice](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fia-screenshots.s3.amazonaws.com%2Fhacker_news_index.png%3Fnocache%3D4600&f=1) -It uses an external API (the Hacker News search API), which makes it a "Spice" type of Instant Answer. You can see it in action by searching for ["hn dropbox"](#) for example. +You can see it in action by searching for ["hn dropbox"](#), for example. ## How It Works -When a user searches anything containing words such as "hn", "hn search", or "hacker news", DuckDuckGo will trigger this Instant Answer. That means its front-end code will run on the search results page. +When a user searches anything containing words such as "hn", "hn search", or "hacker news" at certain locations in the query, DuckDuckGo will trigger this Instant Answer. -When the search results page loads, the Instant Answer will make an AJAX call to the Hacker News API. If any articles come back, the Instant Answer will parse, sort, and display each item to the user. +When the Instant Answer is triggered, DuckDuckGo executes its front-end code on the search results page. The page will make an AJAX call to the Hacker News API, and pass the response to the Instant Answer's callback. If any articles come back, the Instant Answer will parse, sort, and display each item to the user. Simple enough. So how do we make that work in code? ## Anatomy of an Instant Answer -The Hacker News Instant Answer is a combination of several backend and frontend code files, each covering a specific function. Because it calls an external API, it is a "Spice" Instant Answer, and all files will be located in the [Spice repository](#). +Because this Instant Answer calls an external API, it's called a "Spice" Instant Answer. All Spice Instant Answers are kept together in the [Spice repository](#) on Github. + +A Spice is a combination of several backend and frontend files, each handling a different aspect of the process. Backend files: @@ -41,11 +43,11 @@ That's it - these are all the files and functionality necessary to create this I Before we begin coding, we'll need to set up our development environment. There are three main steps: -1. Fork the [Spice Repository](#) on Github.com. ([Find out how](#)) -2. Fork the [DuckDuckGo environment](#) on Codio.com (our tools). ([Find out how](#)) -3. Clone your Github fork onto the Codio environment. ([Find out how](#)) +1. Fork the [Spice Repository](#) on Github.com. ([How?](#)) +2. Fork the [DuckDuckGo environment](#) on Codio.com (our tools). ([How?](#)) +3. Clone your Github fork onto the Codio environment. ([How?](#)) -If this is your first time setting up, fear not! Check out our [detailed, step-by-step guide](#) to setting up. +If this is your first time developing an Instant Answer, check out our [detailed, step-by-step guide](#) to getting your development environment set up. ## Create a New Instant Answer @@ -84,7 +86,7 @@ Navigate using the Codio file tree on the left, and double click on the file, in ### Settings and Metadata -Each Instant Answer is a Perl package, so we start by declaring the package namespace in CamelCase format. This has already been done for us: +Each Instant Answer is a Perl package, so we start by declaring the package namespace in CamelCase format. This was done automatically for us when we ran the `duckpan new` command: ```perl package DDG::Spice::HackerNewz; @@ -103,7 +105,7 @@ use strict; use DDG::Spice; ``` -On the next line, we'll leave caching on. By default, caching saves the results to individual API calls for an hour. Of course, this may not be right for some Instant Answers - so you can just replace `1` with `0`. Caching can get interesting - [learn more here](#). +On the next line, we'll leave caching on. By default, caching saves the results to individual API calls for an hour. Of course, this may not be right for some Instant Answers - so you can just replace `1` with `0`. There are several options when it comes to caching - [learn more in the API reference](#). ```perl spice is_cached => 1; @@ -111,7 +113,7 @@ spice is_cached => 1; Now for the Metadata. Because there's so many Instant Answers, metadata helps us organize, describe, and attribute your contribution. They are also used to automatically generate Instant Answer Pages - plus give you credit right on DuckDuckGo.com. -For example, these are the Metadata values used in the live HackerNews answer. You can learn more about each Metadata property [documented here](#). +For example, these are the Metadata values used in the live HackerNews answer. You can learn more in the [metadata reference](#). ```perl primary_example_queries "hn postgresql"; @@ -129,11 +131,15 @@ attribution github => ['https://github.com/adman','Adman'], With the formalities out of the way, let's define the most important element of our Instant Answer - the API call. This is a URL to which we'll make a GET request. +*How do we choose an API? Currently, the community can only accept JSON or JSONP APIs. Due to DuckDuckGo's [scale](https://duckduckgo.com/traffic.html), APIs must be [free, fast, credible, and reliable](#). If you have a particular API in mind, check out the [API requirements](#).* + +We're just hacking for now, so let's enter our URL for querying the Hacker News Search API: + ```perl spice to => 'https://hn.algolia.com/api/v1/search?query=$1&tags=story'; ``` -Notice the `$1` - that's a placeholder for a dynamic value our Instant Answer will provide. Many Instant Answers take advantage of this for search endpoints, but others might not need it at all. Feel free to leave it out of your URL. +Notice the `$1` - that's a placeholder for a dynamic value our Instant Answer will provide. Many Instant Answers take advantage of this for search endpoints, but others might not need it at all. Others may use [multiple placeholders](#). Feel free to leave it out of your URL. What fills the `$1`? Our *handle* function, which we'll talk about in a bit. @@ -145,31 +151,31 @@ In most cases, APIs allow for a "callback" parameter, which we'd usually include http://www.api.awesome.com/?q=&callback= ``` -This parameter is used to wrap the JSON object being returned in a JavaScript function call. This function is often named in the `callback` parameter - but that depends on the API. +By naming a callback, the JSON object returns neatly wrapped in a JavaScript function call. This function is often specified the `callback` parameter - but that depends on the API. -In this particular case, the API doesn't allow for this parameter to be specified, so we force this manually by using the **spice wrap\_jsonp\_callback** function. Enter this text on the next line to do this: +This particular API doesn't allow us to specify a callback. No worries - we'll account for this by setting the `wrap_jsonp_callback` attribute to `1`: ```perl spice wrap_jsonp_callback => 1; ``` -Now, when the JSON is returned by the API, it will be wrapped in a call to our Spice's JavaScript callback function, which lives in the frontend, and which we'll define in `hacker_newz.js`. +Now, when the JSON is returned by the API, DuckDuckGo will wrap our result in a call to our Spice's JavaScript callback function. We'll define this function in the frontend, in `hacker_newz.js`. ### Triggers -How will DuckDuckGo know to trigger our Instant Answer on a user's search? That's what triggers are for: +How will DuckDuckGo know to display our Instant Answer on a user's search? That's what *triggers* are for: ```perl triggers startend => "hn", "hackernews", "hacker news", "news.yc", "news.ycombinator.com", "hn search", "hnsearch", "hacker news search", "hackernews search"; ``` -This tells DuckDuckGo that if any of these strings occurs at the *start* or *end* of any user's search query, it should activate our Instant Answer and attempt calling the API. Triggers don't guarantee the API will return anything useful - just that they're worth trying. +This tells DuckDuckGo that if any of these strings occurs at the *start or end* of any user's search query, it should activate our Instant Answer and attempt calling the API. There are several types of triggers in addition to `startend` - [see them all here](#). -Aside from `startend`, there are more types of triggers - and you can even define several together. You can [learn more about triggers here](#). +Of course, simply matching a trigger doesn't guarantee the API will return anything useful - just that the API is worth trying. ### Handle Function -Remember our `$1` placeholder before? It receives whatever is returned by the `handle` function. +Remember our `$1` placeholder before? It's filled in by the `handle` function. This function acts as the last filter before we call the API. Whatever the handle function returns will be inserted into the API call. If it returns nothing, the API will not be called. ```perl handle remainder => sub { @@ -180,15 +186,21 @@ handle remainder => sub { This function is a simple case: it returns the *remainder* of the query, unless it's blank. The *remainder* is just the query minus the trigger. If a user searches 'hacker news meteor', the remainder would be 'meteor'. -There's fancier things that can be done with this function, including regular expressions - you can [read more about handle functions here](#). +While triggers specify when to trigger our Instant Answer, handle functions are used to limit those cases. Handle functions can get more complicated if necessary, by including regular expressions and returning *multiple* placeholders: [learn more about handle functions here](#). -Oh - one more thing. Because this is a Perl package, it must return `1` at the end to indicate successful loading: +There's one final line of code on our backend. Because this is a Perl package, it must return `1` at the end to indicate successful loading: ```perl 1; ``` -Our backend is complete. Now DuckDuckGo knows *when* to call the API, *where* to call the API, and *what* query to send it. Next, we'll tell DuckDuckGo how to display the results. +Our Spice backend is complete. Functionally, we've told DuckDuckGo: + +- *Where* to call the API (endpoint) +- *When* to call the API (triggers) +- *When not* to call the API (handle function) + +We're done with our backend. Next, we'll tell DuckDuckGo how to display any results we get back. ## `hacker_newz.js` @@ -313,7 +325,7 @@ normalize: function(item) { Let's specify what HTML templates we'll use to display each item. The vast majority of Instant Answers use the DuckDuckHack [built-in templates system](#). There are all sorts of specialized templates, from displaying places on a map, to displaying movie titles, to products, and lookup information. Each of these can be customized using [options and variants](#). -[Template groups](#) are convenient presets. They're specified in the `group` property. The other properties you see under templates customize the behavior of the group. For example, `detail: false` makes sure items will always be displayed as tiles. Learn more about these options [here](#). +[Template groups](#) are convenient presets. They're specified in the `group` property. The other properties you see under templates customize the behavior of the group. For example, `detail: false` makes sure items will always be displayed as tiles. Learn more about these options in the [templates reference](#). ```javascript templates: { @@ -346,7 +358,9 @@ sort_fields: { sort_default: 'score' ``` -That's it! We've told the DuckDuckGo search results page how to display our data. +As an aside, for those interested in doing more advanced things in the frontend, the Instant Answer framework also provides a JavaScript API with useful functions you can call. + +As far as our "Hacker Newz" Instant Answer is concerned, our frontend is complete. We've fully specified how DuckDuckGo should display our data. ## Handlebars Templates @@ -376,7 +390,7 @@ While any CSS files in the directory will be included automatically, **this is n Creating a test file for your Instant Answer is a critical requirement for [submitting](#) your Instant Answer. You can learn more in the [Test File Reference](#). -In this case, `duckpan new` created a test file for us, under [`t/HackerNews.t`](#). We'll test two queries to make sure they trigger our Instant Answer: +In this case, `duckpan new` created a test file for us, under [`t/HackerNewz.t`](#). We'll specify two test queries to make sure they trigger our Instant Answer: ```perl #!/usr/bin/env perl @@ -387,15 +401,15 @@ use Test::More; use DDG::Test::Spice; ddg_spice_test( - [qw( DDG::Spice::HackerNews )], + [qw( DDG::Spice::HackerNewz )], 'hn duckduckgo' => test_spice( - '/js/spice/hacker_news/duckduckgo', + '/js/spice/hacker_newz/duckduckgo', call_type => 'include', - caller => 'DDG::Spice::HackerNews' + caller => 'DDG::Spice::HackerNewz' ), 'hn postgresql' => test_spice( - '/js/spice/hacker_news/postgresql', - caller => 'DDG::Spice::HackerNews', + '/js/spice/hacker_newz/postgresql', + caller => 'DDG::Spice::HackerNewz', ), ); @@ -429,6 +443,6 @@ HTTP::Server::PSGI: Accepting connections at http://0:5000/ Click the "**DuckPAN Server**" button at the top of the screen. A new browser tab should open and you should see the DuckDuckGo Homepage. Type your query to see the results (actual search results will be placeholders.) -(Screenshot) +[Screenshot] -Need help? [Join us over on Slack!](mailto:QuackSlack@duckduckgo.com?subject=AddMe) \ No newline at end of file +Have questions? [Email us](mailto:open@duckduckgo.com) or [say hello on Slack!](mailto:QuackSlack@duckduckgo.com?subject=AddMe) \ No newline at end of file diff --git a/duckduckhack/backend-reference/api-reference.md b/duckduckhack/backend-reference/api-reference.md index be9f9ef61..b53716fd0 100644 --- a/duckduckhack/backend-reference/api-reference.md +++ b/duckduckhack/backend-reference/api-reference.md @@ -4,7 +4,7 @@ With millions of search queries triggering Instant Answers every day, it's important to choose APIs wisely. There are several criteria for APIs used in Spice Instant Answers. -### Technical constraints: +### Technical constraints - APIs called by Spice Instant Answers **must use the JSON or JSONP formats**. We do not support the use of XML (it's coming soon though!), HTML, or plain text responses. - APIs should respond to requests in **less than one second** (< 1s). diff --git a/duckduckhack/cheat-sheets/programming-syntax.md b/duckduckhack/cheat-sheets/programming-syntax.md index 397dd1641..28b5395e0 100644 --- a/duckduckhack/cheat-sheets/programming-syntax.md +++ b/duckduckhack/cheat-sheets/programming-syntax.md @@ -24,9 +24,9 @@ File | Purpose | Location Before we begin coding, we'll need to set up our development environment. There are three main steps: -1. Fork the [Spice Repository](#) on Github.com. ([Find out how](#)) -2. Fork the [DuckDuckGo environment](#) on Codio.com (our tools). ([Find out how](#)) -3. Clone your Github fork onto the Codio environment. ([Find out how](#)) +1. Fork the [Spice Repository](#) on Github.com. ([How?](#)) +2. Fork the [DuckDuckGo environment](#) on Codio.com (our tools). ([How?](#)) +3. Clone your Github fork onto the Codio environment. ([How?](#)) If this is your first time setting up, fear not! Check out our [detailed, step-by-step guide](#) to setting up. From 74b1042d9e660e4a80b155958fc2c05bb241855c Mon Sep 17 00:00:00 2001 From: talsraviv Date: Thu, 22 Oct 2015 11:57:54 -0400 Subject: [PATCH 10/20] First draft of new submission section + checklist --- duckduckhack/submitting/checklist.md | 109 ++++++++++++++---- duckduckhack/submitting/maintaining.md | 3 - duckduckhack/submitting/pull-request.md | 4 +- duckduckhack/submitting/quality.md | 7 -- .../submitting/submitting-overview.md | 34 ++++++ 5 files changed, 122 insertions(+), 35 deletions(-) delete mode 100644 duckduckhack/submitting/maintaining.md delete mode 100644 duckduckhack/submitting/quality.md create mode 100644 duckduckhack/submitting/submitting-overview.md diff --git a/duckduckhack/submitting/checklist.md b/duckduckhack/submitting/checklist.md index c7a242b32..f46b3a4ca 100644 --- a/duckduckhack/submitting/checklist.md +++ b/duckduckhack/submitting/checklist.md @@ -1,35 +1,96 @@ -# Submission Checklist +# Instant Answer Checklist -Is the below useful to salvage? +To be accepted by the community to appear on DuckDuckGo.com, Instant Answers must naturally meet certain standards. It's important that Instant Answers are: --------------- +- Maintainable +- Scalable +- ... -Checked everything off the list? Congratulations - you are now ready to [add metadata](https://duck.co/duckduckhack/metadata) to your Instant Answer which will help us to understand it a little better. +In order to be as transparent and simple as possible, we've collected these requirements into a checklist you can review when planning - and before submitting - your Instant Answer. We do our best to keep this list as quick and relevant as we can. --------------- +If you're not sure, or want help satisfying this checklist, we'd love to help! We have a great community [on Slack](mailto:QuackSlack@duckduckgo.com?subject=AddMe) where you can find someone to give detailed feedback. You can also [send an email](mailto:open@duckduckgo.com). +## What queries will your Instant Answer show up on? -Before proceeding, make sure you've done the following steps. +- **Instant Answers should answer more than a single query, and preferably more than ten.** -- [Contacted us](mailto:open@duckduckgo.com) to let us know what you're working on + For example, if your idea is to answer "What is the speed of light?" with a constant, that's only one query for an Instant Answer. Instead, consider a "Physics Constants Instant Answer" to cover many common constants (Speed of sound, Planck's constant, and so on...). Similarly, "When is Christmas?" would be better grouped under a "Holiday Dates Instant Answer." + + If a wider Instant Answer already exists that should encompass your queries, consider improving it. - By involving us, we can provide guidance and potentially save you a lot of time and effort. Email us at [open@duckduckgo.com](mailto:open@duckduckgo.com) with what idea you're working on and how you're thinking of going about it. +## Do you plan to use an external data source? -- Determined your Instant Answer type (we will have helped you determine this, in addition to this [helpful guide](https://duck.co/duckduckhack/determine_your_instant_answer_type)) -- Forked the [correct repository](https://duck.co/duckduckhack/setup_dev_environment) on Github -- Written and committed the code for your Instant Answer -- Make sure you comment your code well so that it's easier for other people to maintain. -- [Manually tested](https://duck.co/duckduckhack/testing_triggers) your Instant Answer -- Written a comprehensive automatic [test file](https://duck.co/duckduckhack/test_files) for your Instant Answer -- Manually verified that everything works. -- Make sure your [tab name](https://duck.co/duckduckhack/display_reference#codenamecode-emstringem-required) is well-chosen and consistent with the guidelines -- If you wrote custom CSS, did you namespace the CSS? Every Instant Answer should be contained in a `

` with a unique id. This id should be used to target your styles and avoid overwriting any global styles. -- Confirmed the Instant Answer adheres to the [code style guide](https://duck.co/duckduckhack/code_styleguide) -- Added yourself to the attribution (if updating an existing Instant Answer). -- Can this Instant Answer return unsafe content (bad words, etc.) - - Did you set `is_unsafe` to true? -- Can this Instant Answer return an HTML response? - - Have you guaranteed that the response does not contain unsanitized user-supplied strings (e.g., the query string) which could lead to [cross-site scripting attacks](https://duckduckgo.com/Cross-site_scripting?ia=about)? +- **API queries must be free.** + While paid APIs are not allowed, many APIs are happy to offer DuckDuckGo free access because of attribution and exposure. Consider reaching out and asking. + +- **APIs must return in JSON format.** --------------- \ No newline at end of file + Currently we can only support JSON responses. + +- **APIs must be accessible via GET requests, and authorized via URL parameters.** + + Currently we cannot support POST requests. We also cannot authorize requests via OAuth or HTTP Headers. + +- **APIs must respond in under 1 second, and with less than 200kb of data.** + + If you're not sure about this, we're happy to help. + +## Are you using static (hardcoded) information? + +- **All information should remain accurate in the long term.** + + Any information likely to change should come from an API, not a data file. For example, an Instant Answer that answers "Who is the president of the United States?" should not be hardcoded. + +## Anything you wouldn't show or say to your mother? + +- **Crude language is allowed.** + + For example, Urban Dictionary definitions are allowed. Just make sure to set the [`is_unsafe`](#) attribute. + +- **No adult content.** + + Adult content is not allowed, neither in handling of queries, or results returned. + +## How are you displaying your results? + +- **All new Instant Answers should use [built-in Template Groups](#).** + + For reasons of maintainability, we cannot accept submissions using the Base template unless they've received prior permission. There are many ways to customize the built-in templates, including [options](#), [variants](#), and [sub-templates](#). + +- **Tab names ([`name` display property](#)) should belong to the list of topics.** + + See our list of topics [topics and their guidelines](#). + +## What did you include in your code? + +- **All JavaScript methods should be supported on IE9+, Chrome, Firefox, and Safari.** + + You can check this [handy table for reference](http://kangax.github.io/compat-table/es5/). + +- **No external requests can be made in Perl.** + + Any CPAN modules that make web requests are not allowed. + +## How are you testing your code? + +- **All example queries should be covered in a [test file](#).** + +- **All test files should include negative cases - queries that *should not* trigger.** + +## User Experience + +- **All interactions should work on both desktop and mobile.** + + Avoid interactions that only work on desktop - e.g., hover. + +- **Instant Answers should look good across all platforms.** + + Test how your Instant Answer looks on Chrome, Safari, Firefox, IE 9, IE Edge, as well as Android, iOS, and the iPad. + +- **Instants Answers should look good across [DuckDuckGo Themes](#).** + + Test your Instant Answer with the Dark Theme in particular. + + If you normally use a theme, make sure to test it on the the default theme. + diff --git a/duckduckhack/submitting/maintaining.md b/duckduckhack/submitting/maintaining.md deleted file mode 100644 index c2e561122..000000000 --- a/duckduckhack/submitting/maintaining.md +++ /dev/null @@ -1,3 +0,0 @@ -# Maintaining your Instant Answer - -(This section should talk about regularly checking on their IA and IA page, prodding the community for feedback/improvements, and owning the query_space long term.) \ No newline at end of file diff --git a/duckduckhack/submitting/pull-request.md b/duckduckhack/submitting/pull-request.md index 2b4802739..fa0a5511c 100644 --- a/duckduckhack/submitting/pull-request.md +++ b/duckduckhack/submitting/pull-request.md @@ -2,9 +2,11 @@ The culmination of your contribution comes in the form of a pull request to the Github repository for your Instant Answer type. A pull request is a great, transparent way to review and discuss potential changes to a repository. +The following are step-by-step instructions for submitting your changes as a pull request. + ## Committing Your Changes -The first step is to commit your changes to your local repository. If you've already done this, you can skip to [submitting a pull request](#submitting-a-pull-request), below. +The first step is to commit your changes to your local repository. *If you've already done this, you can skip to [submitting a pull request](#submitting-a-pull-request), below.* Here is how to commit your code in the Codio environment: diff --git a/duckduckhack/submitting/quality.md b/duckduckhack/submitting/quality.md deleted file mode 100644 index 74ffb6c33..000000000 --- a/duckduckhack/submitting/quality.md +++ /dev/null @@ -1,7 +0,0 @@ -# Production Quality Instant Answers - -To get your Instant Answer live on DuckDuckGo.com, it must be accepted by staff or community leaders. - -(Talk about our process and standards from a high level. Set the expectation of submitting an IA, reviewing, getting feedback, and maintaining long term.) - -(Pass-fail nature. Get help at a meetup, community channel, and so on. Review process is simply an evaluation of the checklist.) diff --git a/duckduckhack/submitting/submitting-overview.md b/duckduckhack/submitting/submitting-overview.md new file mode 100644 index 000000000..f5e7d04f6 --- /dev/null +++ b/duckduckhack/submitting/submitting-overview.md @@ -0,0 +1,34 @@ +# Going Live + +The most exciting part of hacking on an Instant Answer is launching on DuckDuckGo.com for everyone to enjoy. The search engine serves millions of queries *a day* all around the world, across hundreds of types of devices. + +As you can imagine, the community has set a few requirements in place. In this section, we'll walk you through the process of going live on DuckDuckGo.com. + +Launching an Instant Answer isn't trivial, but it's very doable - and rewarding. For our part, we'll be as transparent as possible about everything you need to know. + +## The Process + +Once you've thought of and planned an idea that can meet the [Instant Answer Checklist](#), the steps for submission are as follows: + +1. Get your idea approved [by reaching out to the community](mailto:QuackSlack@duckduckgo.com?subject=AddMe) ([or email](mailto:open@duckduckgo.com)) +2. Build and test it, with the help of [walkthroughs](#) and [live examples](https://duck.co/ia) +3. [Submit a pull request](#) that meets the [Instant Answer Checklist](#) + +Get started by [letting us know](mailto:open@duckduckgo.com) what you're working on. By involving us, we can provide guidance and potentially save you a lot of time and effort. + +## Feedback and Support + +You don't have to figure it all out on your own. We have a great community [on Slack](mailto:QuackSlack@duckduckgo.com?subject=AddMe), as well as at [Meetups](http://duckduckgo.meetup.com) around the globe. If you need help, or want to think out loud, don't hesitate to join in - we're excited to help newcomers. You can always [send an email](mailto:open@duckduckgo.com) if you prefer. + +**Say hello long before your pull request.** The feedback on pull request submissions is mainly pass/fail based on the [Instant Answer Checklist](#), so it's best to have someone in the community help review your work ahead of time for detailed help and feedback. + +## Maintaining Your Contribution + +(Talk about our process and standards from a high level. Set the expectation of submitting an IA, reviewing, getting feedback, and maintaining long term.) + +(This section should talk about regularly checking on their IA and IA page, prodding the community for feedback/improvements, and owning the query_space long term.) + + + + + From 28f9a992067767aee0ccb7d7c4accc8d2e133fb4 Mon Sep 17 00:00:00 2001 From: talsraviv Date: Fri, 23 Oct 2015 12:19:41 -0400 Subject: [PATCH 11/20] Intro renamed so hopefully external links to docs work the same --- duckduckhack/welcome/{intro.md => ddh-intro.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename duckduckhack/welcome/{intro.md => ddh-intro.md} (100%) diff --git a/duckduckhack/welcome/intro.md b/duckduckhack/welcome/ddh-intro.md similarity index 100% rename from duckduckhack/welcome/intro.md rename to duckduckhack/welcome/ddh-intro.md From 8cbd94506342908390c11a2e2a75a36d98d5a429 Mon Sep 17 00:00:00 2001 From: talsraviv Date: Fri, 23 Oct 2015 12:19:56 -0400 Subject: [PATCH 12/20] First goodie walkthrough --- duckduckhack/function-hacks/calculation.md | 333 ++++++++++++++++++++- 1 file changed, 332 insertions(+), 1 deletion(-) diff --git a/duckduckhack/function-hacks/calculation.md b/duckduckhack/function-hacks/calculation.md index c85baa413..5e57d3a17 100644 --- a/duckduckhack/function-hacks/calculation.md +++ b/duckduckhack/function-hacks/calculation.md @@ -1 +1,332 @@ -# How to Make a Calculation Tool \ No newline at end of file +# How to Make a Quick Calculation Tool + +Some of the most delightful Instant Answers are easy calculation tools that work right from the search bar - such as [conversions](https://duckduckgo.com/?q=convert%205%20oz%20to%20grams&ia=answer), [permutations](https://duckduckgo.com/?q=16+permutation+3&ia=answer), or [aspect ratios](https://duckduckgo.com/?q=aspect+ratio+4%3A3+640%3A%3F&ia=answer). If you're thinking about building an Instant Answer that performs a quick calculation, this walkthrough is a great example. + +We're going to build the [Greatest Common Factor](https://duck.co/ia/view/greatest_common_factor) Instant Answer. See it in action by searching for ["12 76 greatest common factor"](https://duckduckgo.com/?q=12+76+greatest+common+factor&ia=answer): + +![](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fgcf.png) + +## How It Works + +When a user searches anything containing words such as "gcf", "greatest common factor", etc. in the query, DuckDuckGo will trigger this Instant Answer. + +When the Instant Answer is triggered, DuckDuckGo executes Perl code on the server to calculate the greatest common factor. First, it checks that there are two or more numbers present. Then, it performs the calculation. Finally, it returns the information to display to the user. + +Let's code it. + +## Anatomy of this Instant Answer + +Because this Instant Answer executes as Perl code on the server, and doesn't require an external source of data, it's called a "Goodie" Instant Answer. All Goodie Instant Answers are kept together in the [Goodie repository](#) on Github. + +A Goodie can be a combination of several backend and frontend files, each handling a different aspect of the process. In our case, however, we can get away with no frontend files, because we take advantage of the simple [structured answer display](#). + +Backend files: + +File | Purpose | Location +-----|---------|--------- +[`GreatestCommonFactor.pm`](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/GreatestCommonFactor.pm) | Specifies the query triggers, calculation, and the metadata (such as attribution, name, and so on). | Perl files are placed in the [`zeroclickinfo-spice/lib/DDG/Goodie`](https://github.com/duckduckgo/zeroclickinfo-goodies/tree/master/lib/DDG/Goodie) directory. +[`GreatestCommonFactor.t`](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/t/GreatestCommonFactor.t) | A test file; it asserts that specific search queries will trigger (or not trigger) this Instant Answer, and what responses to expect | Test files are placed in the [`zeroclickinfo-goodies/t`](https://github.com/duckduckgo/zeroclickinfo-goodies/tree/master/t) directory. + +Frontend files: none for this goodie - using [structured answers](#) + +That's it - just one code file and one test file is all we need. Next, we'll go line by line and build it together from scratch. + +## Set Up Your Development Environment + +Before we begin coding, we'll need to set up our development environment. There are three main steps: + +1. Fork the [Spice Repository](#) on Github.com. ([How?](#)) +2. Fork the [DuckDuckGo environment](#) on Codio.com (our tools). ([How?](#)) +3. Clone your Github fork onto the Codio environment. ([How?](#)) + +If this is your first time developing an Instant Answer, check out our [detailed, step-by-step guide](#) to getting your development environment set up. + +## Create a New Instant Answer + +In Codio, load the terminal, and change into the Goodie repository's home directory, `zeroclickinfo-goodies`: + +[Screenshot of clicking terminal] + +``` +[01:07 PM codio@border-carlo workspace ]$ cd zeroclickinfo-goodies +``` + +The `duckpan` tool helps make and test Instant Answers. To create new Goodie boilerplate, run **`duckpan new`**: + +``` +[01:08 PM codio@border-carlo zeroclickinfo-goodies {master}]$ duckpan new +Please enter a name for your Instant Answer : +``` + +Type `Greatest Common Factors` (since *Greatest Common Factor* already exists in the repository, we'll add an 's' for this tutorial). The tool will do the rest: + +``` +Please enter a name for your Instant Answer : Greatest Common Factors +Created file: lib/DDG/Goodie/GreatestCommonFactors.pm +Created file: t/GreatestCommonFactors.t +Successfully created Goodie: GreatestCommonFactors +``` + +That's convenient: The files have each been named - and located - according to the project's conventions. Internally, each file contains correct boilerplate to save us time. + +## `GreatestCommonFactors.pm` + +Let's open up `HackerNewz.pm`. + +Navigate using the Codio file tree on the left, and double click on the file, in the `lib/DDG/Spice/` directory. It'll be full of comments and sample code we can change as we please. + +### Settings and Metadata + +Each Instant Answer is a Perl package, so we start by declaring the package namespace in CamelCase format. This was done automatically for us when we ran the `duckpan new` command: + +```perl +package DDG::Goodie::GreatestCommonFactors; +``` + +Next, change the comments to contain a short abstract. Easy enough: + +```perl +# ABSTRACT: Returns the greatest common factor of the two numbers entered +``` + +Now we'll import the Goodie class (as well as tell the Perl compiler to be strict) - also already done for us: + +```perl +use DDG::Goodie; +use strict; +``` + +We'll specify the `answer_type` (filled in already), and caching. Since the same query will always return the same result, we'll leave caching on: + +```perl +zci answer_type => "greatest_common_factors"; +zci is_cached => 1; +``` + +Now for the Metadata. Because there's so many Instant Answers, metadata helps us organize, describe, and attribute your contribution. They are also used to automatically generate [Instant Answer Pages](https://duck.co/ia) - plus give you credit right on DuckDuckGo.com. + +For example, these are the Metadata values used in the live *GreatestCommonFactor* answer. You can learn more in the [metadata reference](#). + +```perl +primary_example_queries 'GCF 121 11'; +secondary_example_queries '99 9 greatest common factor'; +description 'returns the greatest common factor of the two entered numbers'; +name 'GreatestCommonFactor'; +topics 'math'; +category 'calculations'; +attribution github => [ 'https://github.com/austinheimark', 'Austin Heimark' ]; +``` + +### Triggers + +Triggers tell DuckDuckGo when to display our Instant Answer. Replace the boilerplate trigger code to the following: + +```perl +triggers startend => 'greatest common factor', 'gcf', 'greatest common divisor', 'gcd'; +``` + +This tells DuckDuckGo that if any of these strings occurs at the *start or end* of any user's search query, it should run this Instant Answer (specifically, the code in this Instant Answer's `handle` function). + +### Handle Function + +The `handle` function is the meat of our Goodie Instant Answer - where the functionality lives. It + +```perl +handle remainder => sub { + + # Everything else... + +}; +``` + +Our `handle` function accomplishes three things: + +1. Filter for queries that can be acted upon +2. Calculate the greatest common factors +3. Display the result + +Step 1 is to return immediately *unless* we have two or more numbers to calculate: + +```perl +handle remainder => sub { + + return unless /^\s*\d+(?:(?:\s|,)+\d+)*\s*$/; + + # Everything else... + +}; +``` + +Within our `handle` function, we have a [default variable](http://perlmaven.com/the-default-variable-of-perl) - which means it's implied in statements like the above regular expression match. + +In our `handle` function, our default variable takes on the value of `remainder`. The `remainder` refers to the rest of the query after removing our matched triggers (the remainder of 'greatest common factor 9, 81' would be '9, 81'). + +Let's split the numbers up into an array, and sort them in ascending order: + +```perl +handle remainder => sub { + + return unless /^\s*\d+(?:(?:\s|,)+\d+)*\s*$/; + + my @numbers = grep(/^\d/, split /(?:\s|,)+/); + @numbers = sort { $a <=> $b } @numbers; + + # Everything else... + +}; +``` + +Next we'll calculate the greatest common factor. Notice we'll place a subroutine outside the handle function: + +```perl +handle remainder => sub { + + return unless /^\s*\d+(?:(?:\s|,)+\d+)*\s*$/; + + my @numbers = grep(/^\d/, split /(?:\s|,)+/); + @numbers = sort { $a <=> $b } @numbers; + + my $result = shift @numbers; + foreach (@numbers) { + $result = gcf($result, $_) + } + + # Everything else... + +}; + +sub gcf { + my ($x, $y) = @_; + ($x, $y) = ($y, $x % $y) while $y; + return $x; +} +``` + +Finally let's display the result as a [structured answer](#). We'll format the numbers nicely, and specify what we got (`input`), what we did (`operation`), and what we got (`result`): + +```perl +handle remainder => sub { + + # Everything else... + + my $formatted_numbers = join(', ', @numbers); + $formatted_numbers =~ s/, ([^,]*)$/ and $1/; + + return "Greatest common factor of $formatted_numbers is $result.", + structured_answer => { + input => [$formatted_numbers], + operation => 'Greatest common factor', + result => $result + }; +}; +``` + +If you'd like to display your result using HTML templates and JS interactions, learn more about [displaying Goodie results](#). + +There's one final line of code on our backend. Because this is a Perl package, it must return `1` at the end to indicate successful loading: + +```perl +1; +``` + +## `GreatestCommonFactors.t` + +Creating a test file for your Instant Answer is a critical requirement for [submitting](#) your Instant Answer. You can learn more in the [Test File Reference](#). + +In this case, `duckpan new` created a test file for us, under `t/GreatestCommonFactors.t`. + +```perl +#!/usr/bin/env perl + +use strict; +use warnings; +use Test::More; +use DDG::Test::Goodie; + +zci answer_type => "greatest_common_factors"; +zci is_cached => 1; + +ddg_goodie_test( + + # Tests... + +); + +done_testing; +``` + +We'll specify several test queries to make sure they trigger our Instant Answer. You can see the full set used [on Github](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/t/GreatestCommonFactor.t): + +```perl +#!/usr/bin/env perl + +use strict; +use warnings; +use Test::More; +use DDG::Test::Goodie; + +zci answer_type => "greatest_common_factor"; +zci is_cached => 1; + +ddg_goodie_test( + [qw( DDG::Goodie::GreatestCommonFactor )], + 'gcf 9 81' => test_zci( + 'Greatest common factor of 9 and 81 is 9.', + structured_answer => { + input => ['9 and 81'], + operation => 'Greatest common factor', + result => 9 + } + ), + '1000 100 greatest common factor' => test_zci( + 'Greatest common factor of 100 and 1000 is 100.', + structured_answer => { + input => ['100 and 1000'], + operation => 'Greatest common factor', + result => 100 + } + ), + 'GCF 12 76' => test_zci( + 'Greatest common factor of 12 and 76 is 4.', + structured_answer => { + input => ['12 and 76'], + operation => 'Greatest common factor', + result => 4 + } + ), + # Etc... +); + +done_testing; +``` + +## Interactively Test Our Instant Answer + +Inside Codio, we can preview the behavior of all Instant Answers on a local test server. + +In Codio, load the terminal, and make sure you are in the `zeroclickinfo-goodies` main directory. If not, change into it. + +Enter the **`duckpan server`** command and press Enter. + +``` +[04:10 PM codio@border-carlo zeroclickinfo-goodies {master}]$ duckpan server + +``` + +The terminal should print some text and let you know that the server is listening on port 5000. + +``` +Starting up webserver... + +You can stop the webserver with Ctrl-C + +HTTP::Server::PSGI: Accepting connections at http://0:5000/ +``` + +Click the "**DuckPAN Server**" button at the top of the screen. A new browser tab should open and you should see the DuckDuckGo Homepage. Type your query to see the results (actual search results will be placeholders.) + +[Screenshot] + +That's it! Want to create an Instant Answer to go live on DuckDuckGo.com? Learn more about [submitting your idea](#). + +Have questions? [Email us](mailto:open@duckduckgo.com) or [say hello on Slack!](mailto:QuackSlack@duckduckgo.com?subject=AddMe) \ No newline at end of file From 4f7fce88ac0f2768db908fa6be88eef6e216cd44 Mon Sep 17 00:00:00 2001 From: talsraviv Date: Fri, 23 Oct 2015 12:20:10 -0400 Subject: [PATCH 13/20] Image for goodie walkthrough --- duckduckhack/assets/gcf.png | Bin 0 -> 24535 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 duckduckhack/assets/gcf.png diff --git a/duckduckhack/assets/gcf.png b/duckduckhack/assets/gcf.png new file mode 100644 index 0000000000000000000000000000000000000000..c81ac6b9a6ac5cf79ebbcb7500e3a87c05a24303 GIT binary patch literal 24535 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

T3#=am}@Sc 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 Date: Fri, 23 Oct 2015 12:20:33 -0400 Subject: [PATCH 14/20] Small improvements to spice walkthrough --- duckduckhack/api-answers/forum-lookup.md | 18 ++++++++++-------- .../cheat-sheets/programming-syntax.md | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/duckduckhack/api-answers/forum-lookup.md b/duckduckhack/api-answers/forum-lookup.md index 2f49f699a..d4645a345 100644 --- a/duckduckhack/api-answers/forum-lookup.md +++ b/duckduckhack/api-answers/forum-lookup.md @@ -16,7 +16,7 @@ When the Instant Answer is triggered, DuckDuckGo executes its front-end code on Simple enough. So how do we make that work in code? -## Anatomy of an Instant Answer +## Anatomy of this Instant Answer Because this Instant Answer calls an external API, it's called a "Spice" Instant Answer. All Spice Instant Answers are kept together in the [Spice repository](#) on Github. @@ -51,15 +51,14 @@ If this is your first time developing an Instant Answer, check out our [detailed ## Create a New Instant Answer -In Codio, load the terminal, and change into your repository home directory: - -(Screenshot of clicking terminal) +In Codio, load the terminal, and change into the Spice repository's home directory, `zeroclickinfo-spice`: +[Screenshot of clicking terminal] ``` [08:17 PM codio@border-carlo workspace ]$ cd zeroclickinfo-spice ``` -The `duckpan` tool helps make and test Instant Answers. To create a new Instant Answer template, run **`duckpan new`**: +The `duckpan` tool helps make and test Instant Answers. To create new Spice boilerplate, run **`duckpan new`**: ``` [08:18 PM codio@border-carlo zeroclickinfo-spice {master}]$ duckpan new @@ -69,6 +68,7 @@ Please enter a name for your Instant Answer : Type `Hacker Newz` (since *Hacker News* already exists in the repository, we'll change one letter for this tutorial). The tool will do the rest: ``` +Please enter a name for your Instant Answer : Hacker Newz Created file: lib/DDG/Spice/HackerNewz.pm Created file: share/spice/hacker_newz/hacker_newz.handlebars Created file: share/spice/hacker_newz/hacker_newz.js @@ -111,9 +111,9 @@ On the next line, we'll leave caching on. By default, caching saves the results spice is_cached => 1; ``` -Now for the Metadata. Because there's so many Instant Answers, metadata helps us organize, describe, and attribute your contribution. They are also used to automatically generate Instant Answer Pages - plus give you credit right on DuckDuckGo.com. +Now for the Metadata. Because there's so many Instant Answers, metadata helps us organize, describe, and attribute your contribution. They are also used to automatically generate [Instant Answer Pages](https://duck.co/ia) - plus give you credit right on DuckDuckGo.com. -For example, these are the Metadata values used in the live HackerNews answer. You can learn more in the [metadata reference](#). +For example, these are the Metadata values used in the live *HackerNews* answer. You can learn more in the [metadata reference](#). ```perl primary_example_queries "hn postgresql"; @@ -184,6 +184,8 @@ handle remainder => sub { }; ``` +Within our `handle` function, `$_` is a special variable that takes on the value of `remainder`. The `remainder` refers to the rest of the query after removing our matched triggers. + This function is a simple case: it returns the *remainder* of the query, unless it's blank. The *remainder* is just the query minus the trigger. If a user searches 'hacker news meteor', the remainder would be 'meteor'. While triggers specify when to trigger our Instant Answer, handle functions are used to limit those cases. Handle functions can get more complicated if necessary, by including regular expressions and returning *multiple* placeholders: [learn more about handle functions here](#). @@ -418,7 +420,7 @@ done_testing; A test file is required for submitting your Instant Answer. However, we don't need it to proceed with interactively testing our code, which we'll do next. -### Interactively Test Our Instant Answer +## Interactively Test Our Instant Answer Inside Codio, we can preview the behavior of all Instant Answers on a local test server. diff --git a/duckduckhack/cheat-sheets/programming-syntax.md b/duckduckhack/cheat-sheets/programming-syntax.md index 28b5395e0..9ed79d901 100644 --- a/duckduckhack/cheat-sheets/programming-syntax.md +++ b/duckduckhack/cheat-sheets/programming-syntax.md @@ -18,7 +18,7 @@ Cheat sheets only require you to add one file with the information to present. I File | Purpose | Location -----|---------|--------- -[`regex.json`](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/share/goodie/cheat_sheets/json/regex.json)|Specify cheat sheet info and display settings|Placed inside the Cheat Sheets Goodie directory: `zeroclickinfo-goodies/share/goodie/cheat_sheets/json/` +[`regex.json`](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/share/goodie/cheat_sheets/json/regex.json)|Specify cheat sheet info and display settings|Placed inside the Cheat Sheets Goodie directory: [`zeroclickinfo-goodies/share/goodie/cheat_sheets/json/`](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/share/goodie/cheat_sheets/json/) ## Set Up Your Development Environment From 1bc8501f03b9ade3720e5accbf8ce5246095dae2 Mon Sep 17 00:00:00 2001 From: talsraviv Date: Fri, 23 Oct 2015 12:20:51 -0400 Subject: [PATCH 15/20] Move structured responses to the top of goodie display --- .../setting-goodie-display.md | 126 +++++++++--------- 1 file changed, 65 insertions(+), 61 deletions(-) diff --git a/duckduckhack/frontend-reference/setting-goodie-display.md b/duckduckhack/frontend-reference/setting-goodie-display.md index 4bcc923cc..89effd479 100644 --- a/duckduckhack/frontend-reference/setting-goodie-display.md +++ b/duckduckhack/frontend-reference/setting-goodie-display.md @@ -6,6 +6,71 @@ The final step in every Instant Answer is displaying it to the user. All Instant [Screenshot of answerbar just like spice] +## Easy Structured Responses + +*If your answer requires html templates and special interactions, consider [setting display properties](#setting-display-properties-in-a-goodie).* + +Many Goodies are simple operations that return a string response. For example, the [Flip Text Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/FlipText.pm): + +![flip text goodie](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fflip_text_goodie.png&f=1) + +Displaying such Goodies is easy. Instead of setting display properties, simply return three properties: + +- Input (what the user typed in, perhaps highlighting how it was parsed) +- Operation (the term for what happened) +- Result (the final answer) + +For example, for the Flip Text Goodie: + +![flip text goodie diagram](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fdiagrams%2Fflip_text_goodie_diagram.png&f=1) + +### Passing Structured Responses + +Here is the return statement of the [Flip Text Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/FlipText.pm): + +```perl +my $result = upside_down($input); + +return $result, # text-only Goodie result, for the API + structured_answer => { + input => [html_enc($input)], + operation => 'Flip text', + result => html_enc($result), + }; +``` + +The following properties are returned in the `structured_answer` hash: + +#### `input` [required, but can be empty] *array* + +- Make sure to `html_enc()` any user input to prevent [XSS](https://en.wikipedia.org/wiki/Cross-site_scripting) +- To avoid displaying an input, pass an empty array: `[]` (see the [GUID Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/GUID.pm#L49)) + +#### `operation` [required] *string* + +- Stated as a command, e.g. "Calculate", "Flip text", "URL decode", etc. + +#### `result` [required] *string* + +- Make sure to `html_enc()` input to display characters properly +- **Do not pass custom HTML in this string**; instead [specify](#setting-goodie-display-properties-in-the-frontend) a [template](https://duck.co/duckduckhack/templates_overview). + +### Further Examples + +Here are some more Goodies that make use of simple, structured responses: + +- [URLDecode](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/URLDecode.pm#L49-L55) + + ![goodie urldecode](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fgoodie_url_decode.png&f=1) + +- [GUID](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/GUID.pm#L46-L52) + + ![goodie guid](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fgoodie_guid.png&f=1) + +- [Calculator](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Calculator.pm) + + ![goodie calculator](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fgoodie_calculator.png&f=1) + ## Setting Display Properties in a Goodie *If your Goodie is very simple, consider passing a [structured response](#easy-structured-responses) instead.* @@ -266,66 +331,5 @@ You might use Goodie JavaScript to create an in-browser game related to certain Feel free to reach out and ask us any questions, over at [open@duckduckgo.com](mailto:open@duckduckgo.com) -## Easy Structured Responses - -Many Goodies are simple operations that return a string response. For example, the [Flip Text Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/FlipText.pm): - -![flip text goodie](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fflip_text_goodie.png&f=1) - -Displaying such Goodies is easy. Instead of setting display properties, simply return three properties: - -- Input (what the user typed in, perhaps highlighting how it was parsed) -- Operation (the term for what happened) -- Result (the final answer) - -For example, for the Flip Text Goodie: - -![flip text goodie diagram](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fdiagrams%2Fflip_text_goodie_diagram.png&f=1) - -### Passing Structured Responses - -Here is the return statement of the [Flip Text Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/FlipText.pm): - -```perl -my $result = upside_down($input); - -return $result, # text-only Goodie result, for the API - structured_answer => { - input => [html_enc($input)], - operation => 'Flip text', - result => html_enc($result), - }; -``` - -The following properties are returned in the `structured_answer` hash: - -#### `input` [required, but can be empty] *array* - -- Make sure to `html_enc()` any user input to prevent [XSS](https://en.wikipedia.org/wiki/Cross-site_scripting) -- To avoid displaying an input, pass an empty array: `[]` (see the [GUID Goodie](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/GUID.pm#L49)) - -#### `operation` [required] *string* - -- Stated as a command, e.g. "Calculate", "Flip text", "URL decode", etc. - -#### `result` [required] *string* - -- Make sure to `html_enc()` input to display characters properly -- **Do not pass custom HTML in this string**; instead [specify](#setting-goodie-display-properties-in-the-frontend) a [template](https://duck.co/duckduckhack/templates_overview). -### Further Examples - -Here are some more Goodies that make use of simple, structured responses: - -- [URLDecode](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/URLDecode.pm#L49-L55) - - ![goodie urldecode](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fgoodie_url_decode.png&f=1) - -- [GUID](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/GUID.pm#L46-L52) - - ![goodie guid](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fgoodie_guid.png&f=1) - -- [Calculator](https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Calculator.pm) - - ![goodie calculator](https://images.duckduckgo.com/iu/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fduckduckgo%2Fduckduckgo-documentation%2Fmaster%2Fduckduckhack%2Fassets%2Fgoodie_calculator.png&f=1) From 7d6510767add86adaa31f899bd9a065ca867d1e3 Mon Sep 17 00:00:00 2001 From: Tal Raviv Date: Mon, 26 Oct 2015 19:50:52 -0400 Subject: [PATCH 16/20] Create SUMMARY.md --- SUMMARY.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 SUMMARY.md diff --git a/SUMMARY.md b/SUMMARY.md new file mode 100644 index 000000000..5af47cd80 --- /dev/null +++ b/SUMMARY.md @@ -0,0 +1,4 @@ +# Summary + +* Test + From 1f1f4ef5af537d7be670abf3b54ab991a8401aba Mon Sep 17 00:00:00 2001 From: talsraviv Date: Mon, 26 Oct 2015 19:56:16 -0400 Subject: [PATCH 17/20] Testing summary.md for gitbooks --- SUMMARY.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 SUMMARY.md diff --git a/SUMMARY.md b/SUMMARY.md new file mode 100644 index 000000000..4746b471c --- /dev/null +++ b/SUMMARY.md @@ -0,0 +1,4 @@ +# Summary + +* [Welcome](duckduckhack/welcome/ddh-intro.md) + * [Setting up your development environment](duckduckhack/welcome/setup-dev-environment.md) From 479452e989ae04b55681e36924a43b34813cd3fa Mon Sep 17 00:00:00 2001 From: talsraviv Date: Mon, 26 Oct 2015 19:56:45 -0400 Subject: [PATCH 18/20] Fixing typos --- duckduckhack/frontend-reference/js-api-reference.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/duckduckhack/frontend-reference/js-api-reference.md b/duckduckhack/frontend-reference/js-api-reference.md index e22659122..19ac4e6a4 100644 --- a/duckduckhack/frontend-reference/js-api-reference.md +++ b/duckduckhack/frontend-reference/js-api-reference.md @@ -250,11 +250,11 @@ Example: ## commifyNumber(value) -Returns the comma seperated string representation of a number +Returns the comma separated string representation of a number **Parameters** -**value**: *number*, the number to comma seperate +**value**: *number*, the number to comma separate Example: From 89e901f79bb30adde53920cae02ddaaf46b790b7 Mon Sep 17 00:00:00 2001 From: talsraviv Date: Mon, 26 Oct 2015 19:57:01 -0400 Subject: [PATCH 19/20] Quickly noting zac feedback from call --- duckduckhack/submitting/checklist.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/duckduckhack/submitting/checklist.md b/duckduckhack/submitting/checklist.md index f46b3a4ca..0aa1eb186 100644 --- a/duckduckhack/submitting/checklist.md +++ b/duckduckhack/submitting/checklist.md @@ -1,13 +1,11 @@ # Instant Answer Checklist -To be accepted by the community to appear on DuckDuckGo.com, Instant Answers must naturally meet certain standards. It's important that Instant Answers are: - -- Maintainable -- Scalable -- ... +All Instant Answers currently live on DDG adhere to x... we've tried to outline what we believe make for the best experience. These are below... In order to be as transparent and simple as possible, we've collected these requirements into a checklist you can review when planning - and before submitting - your Instant Answer. We do our best to keep this list as quick and relevant as we can. +We'd love your help in evolving these standards! Have an opinion or suggestion on how to make these better? Definitely let us know. + If you're not sure, or want help satisfying this checklist, we'd love to help! We have a great community [on Slack](mailto:QuackSlack@duckduckgo.com?subject=AddMe) where you can find someone to give detailed feedback. You can also [send an email](mailto:open@duckduckgo.com). ## What queries will your Instant Answer show up on? From f247792afebc670ceccf9bc8fcc51a9337ddfdee Mon Sep 17 00:00:00 2001 From: Tal Raviv Date: Tue, 27 Oct 2015 09:26:33 -0400 Subject: [PATCH 20/20] Update SUMMARY.md --- SUMMARY.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/SUMMARY.md b/SUMMARY.md index 4746b471c..b65806aa8 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -1,4 +1,6 @@ # Summary +* [Introduction](README.md) * [Welcome](duckduckhack/welcome/ddh-intro.md) - * [Setting up your development environment](duckduckhack/welcome/setup-dev-environment.md) + * [Setting up your development environment](duckduckhack/welcome/setup-dev-environment.md) +

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]PbEA$ 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Ä{RiP^0dX<&Wc6l1DH8`I$x?4S!+z_4Rkf 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%0AN3l0NIWD{|eCQVjKeF1~ybuZ= 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