duckduckgo / p5-app-duckpan Goto Github PK
View Code? Open in Web Editor NEWDuckDuckHack OpenSource Development Application
Home Page: http://metacpan.org/module/App::DuckPAN
License: Other
DuckDuckHack OpenSource Development Application
Home Page: http://metacpan.org/module/App::DuckPAN
License: Other
I suspect that I have missed some step or set some environment variable incorrectly. I was successfully able to install duckpan. When I try to run duckpan server, I receive two kinds of errors.
With this I have hit a dead end. Would like to know what I might be doing wrong?
Seems that many users have older versions of WWW::DuckDuckGo. Its imperative that the latest version is installed and so DuckPAN should enforce that the latest is installed on the client machine.
This should solve Issue #11
The following get reported when installing:
Unparsable version 'v3.0.0' for prerequisite Text::Xslate
The Makefile.PL is not in the repo so I'm not able to remove the "v" from the two lines it occurs on.
@mwmiller @jbarrett your Perl foo is strong. I'm unsure of how to proceed with fixing this, any ideas?
From what I can tell, groff isn't explicitly required by DuckPAN as it's a system package, but the machine clearly needs a "new enough" version to handle the POD conversion (again, from what I can tell that's what groff is for, right?).
Here's the output from the test, copied from the email I received.
Output from '/usr/bin/make test':
Skip blib/lib/auto/share/dist/App-DuckPAN/duckpan.js (unchanged)
PERL_DL_NONLAZY=1 /usr/perl5.18.4/bin/perl5.18.4 "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/app_duckpan.t ......... ok
t/load.t ................ ok
t/release-pod-syntax.t .. skipped: these tests are for release candidate testing
# Failed test 'DuckPAN gives out nothing on STDERR'
# at t/system_duckpan.t line 21.
# got: 'You have an old groff. Update to version 1.20.1 for good Unicode support.
# If you don't upgrade, wide characters may come out oddly.
#
# at /usr/perl5.18.4/lib/5.18.4/Pod/Perldoc.pm line 1346.
# You have an old groff. Update to version 1.20.1 for good Unicode support.
# If you don't upgrade, wide characters may come out oddly.
#
# at /usr/perl5.18.4/lib/5.18.4/Pod/Perldoc.pm line 1346.
# '
# expected: ''
# Looks like you failed 1 test of 11.
t/system_duckpan.t ......
Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/11 subtests
Test Summary Report
-------------------
t/system_duckpan.t (Wstat: 256 Tests: 11 Failed: 1)
Failed test: 2
Non-zero exit status: 1
Files=4, Tests=44, 7 wallclock secs ( 0.05 usr 0.01 sys + 5.07 cusr 0.95 csys = 6.09 CPU)
Result: FAIL
Failed 1/4 test programs. 1/44 subtests failed.
*** Error code 1
Stop.
make: stopped in /home/cpansand/.cpan/build/App-DuckPAN-0.156-VJlxB2
------------------------------
PREREQUISITES
------------------------------
Prerequisite modules loaded:
requires:
Module Need Have
------------------------------------ -------- --------
App::cpanminus 1.5007 1.7014
autodie 2.25 2.25
Class::Load 0.18 0.22
Config::INI 0.019 0.024
CPAN::Repository 0.007 0.008
Crypt::SSLeay 0.58 0.72
Data::Printer 0.3 0.35
Dist::Zilla 4.300007 5.020
Dist::Zilla::Plugin::UploadToDuckPAN 0.006 0.007
Email::Valid 0.187 1.195
File::ShareDir::ProjectDistDir 0.003002 1.000004
File::Temp 0.22 0.2304
File::Which 1.09 1.09
HTML::Parser 3.71 3.71
HTML::TreeBuilder 0 5.03
IO::All 0 0.79
JSON 2.59 2.90
List::Util 0 1.41
LWP::Protocol::https 0 6.06
LWP::Simple 6.00 6.00
Module::Data 0.006 0.007
Module::Pluggable 4.8 5.1
Moo 1.002000 1.006000
MooX 0.101 0.101
MooX::Cmd 0.001 0.009
MooX::HasEnv 0.003 0.004
MooX::Options 3.71 4.012
Parse::CPAN::Packages::Fast 0.04 0.08
Path::Class 0.26 0.35
Plack 1.0029 1.0032
Pod::Usage 1.63 1.64
POE 1.354 1.365
Starman 0 0.4010
Term::UI 0.30 0.42
Text::Xslate v3.0.0 3.3.3
URI 1.60 1.64
version 0.96 0.9909
WWW::DuckDuckGo 0.015 0.016
build_requires:
Module Need Have
------------------------------------ -------- --------
Dir::Self 0.10 0.11
ExtUtils::MakeMaker 0 6.98
File::chdir 0.1008 0.1009
File::FindLib 0.001001 0.001004
File::HomeDir 1.00 1.00
File::Temp 0.22 0.2304
Test::LoadAllModules 0.021 0.022
Test::More 0.98 1.001006
Test::Script::Run 0.05 0.08
configure_requires:
Module Need Have
------------------------------------ -------- --------
ExtUtils::MakeMaker 0 6.98
File::ShareDir::Install 0.06 0.09
------------------------------
ENVIRONMENT AND OTHER CONTEXT
------------------------------
Environment variables:
DBIC_NO_WARN_BAD_PERL = 1
LC_ALL = de_DE.ISO8859-1
PATH = /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/cpansand/bin/freebsd10.0:/home/cpansand/bin/sh:/home/cpansand/bin:/usr/games:/home/cpansand/devel:/home/eserte/src/srezic-misc/scripts
PERL5LIB =
PERL5OPT =
PERL5_CPANPLUS_IS_RUNNING = 64559
PERL5_CPAN_IS_RUNNING = 64559
PERL5_CPAN_IS_RUNNING_IN_RECURSION = 9614,64559
PERLDOC = -MPod::Perldoc::ToTextOverstrike
PERL_BATCH = yes
PERL_CPAN_REPORTER_CONFIG = /var/tmp/cpansmoker-1023/QPlWGPT3Rt_config.ini
PERL_EXTUTILS_AUTOINSTALL = --defaultdeps
PERL_HTML_DISPLAY_CLASS = HTML::Display::Mozilla
SHELL = /usr/local/bin/zsh
TERM = screen
TMPDIR = /var/tmp/cpansmoker-1023
Perl special variables (and OS-specific diagnostics, for MSWin32):
$^X = /usr/perl5.18.4/bin/perl5.18.4
$UID/$EUID = 1023 / 1023
$GID = 1023 1023
$EGID = 1023 1023
Perl module toolchain versions installed:
Module Have
------------------- --------
CPAN 2.00
CPAN::Meta 2.142690
Cwd 3.40
ExtUtils::CBuilder 0.280210
ExtUtils::Command 1.17
ExtUtils::Install 1.59
ExtUtils::MakeMaker 6.98
ExtUtils::Manifest 1.63
ExtUtils::ParseXS 3.24
File::Spec 3.40
JSON 2.90
JSON::PP 2.27203
Module::Build 0.4210
Module::Signature 0.73
Parse::CPAN::Meta 1.4414
Test::Harness 3.33
Test::More 1.001006
YAML 1.12
YAML::Syck 1.27
version 0.9909
--
Summary of my perl5 (revision 5 version 18 subversion 4) configuration:
Platform:
osname=freebsd, osvers=10.0-release-p1, archname=amd64-freebsd
uname='freebsd cvrsnica-freebsd-10-64bit.herceg.de 10.0-release-p1 freebsd 10.0-release-p1 #0: tue apr 8 06:45:06 utc 2014 [email protected]:usrobjusrsrcsysgeneric amd64 '
config_args='-ds -e -Dprefix=/usr/perl5.18.4'
hint=recommended, useposix=true, d_sigaction=define
useithreads=undef, usemultiplicity=undef
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=define, use64bitall=define, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='cc', ccflags ='-DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include',
optimize='-O',
cppflags='-DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
ccversion='', gccversion='4.2.1 Compatible FreeBSD Clang 3.3 (tags/RELEASE_33/final 183502)', gccosandvers=''
intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='cc', ldflags ='-Wl,-E -fstack-protector -L/usr/local/lib'
libpth=/usr/lib /usr/local/lib
libs=-lgdbm -lm -lcrypt -lutil -lc
perllibs=-lm -lcrypt -lutil -lc
libc=, so=so, useshrplib=false, libperl=libperl.a
gnulibc_version=''
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' '
cccdlflags='-DPIC -fPIC', lddlflags='-shared -L/usr/local/lib -fstack-protector'
Characteristics of this binary (from libperl):
Compile-time options: HAS_TIMES PERLIO_LAYERS PERL_DONT_CREATE_GVSV
PERL_HASH_FUNC_ONE_AT_A_TIME_HARD PERL_MALLOC_WRAP
PERL_PRESERVE_IVUV PERL_SAWAMPERSAND USE_64_BIT_ALL
USE_64_BIT_INT USE_LARGE_FILES USE_LOCALE
USE_LOCALE_COLLATE USE_LOCALE_CTYPE
USE_LOCALE_NUMERIC USE_PERLIO USE_PERL_ATOF
Built under freebsd
Compiled at Oct 2 2014 08:49:56
%ENV:
PERL5LIB=""
PERL5OPT=""
PERL5_CPANPLUS_IS_RUNNING="64559"
PERL5_CPAN_IS_RUNNING="64559"
PERL5_CPAN_IS_RUNNING_IN_RECURSION="9614,64559"
PERLDOC="-MPod::Perldoc::ToTextOverstrike"
PERL_BATCH="yes"
PERL_CPAN_REPORTER_CONFIG="/var/tmp/cpansmoker-1023/QPlWGPT3Rt_config.ini"
PERL_EXTUTILS_AUTOINSTALL="--defaultdeps"
PERL_HTML_DISPLAY_CLASS="HTML::Display::Mozilla"
@INC:
/usr/perl5.18.4/lib/site_perl/5.18.4/amd64-freebsd
/usr/perl5.18.4/lib/site_perl/5.18.4
/usr/perl5.18.4/lib/5.18.4/amd64-freebsd
/usr/perl5.18.4/lib/5.18.4
.
Currently if you try executing duckpan query
in a Fathead repo an error message is displayed.
Really we should suppress this and warn the developer that currently DuckPAN only supports testing of Spice and Goodies
As I understand, when I type in a query, say 2+2 the instant answer platform will go through each Goodie & Spice one-by-one to determine if it's a match and then stop when it finds one that matches (in this case it stops at the Calculator.pm). I see two potential problems:
Could you please change the colors of 'duckpan query' answer?
In my terminal, I use the 'Black on white' scheme which makes yellow text very difficult to read.
Thanks.
But it works fine on https://duckduckgo.com/?q=movies
But the production servers do so developers add
$_ =~ s/^\s*//g; # remove front whitespace
$_ =~ s/\s*$//g; # remove back whitespace.
to compensate for it.
Today I decided to investigate what I can do with DuckDuckHack and there is something I really don't understand. I had an impression of DuckDuckGo being closer to free and open source world than many other alternatives, but now I see how README suggests to download DuckDuckHack Development Virtual Machine (https://github.com/duckduckgo/p5-app-duckpan#duckduckhack-development-virtual-machine) which is packed into such an ugly proprietary format as RAR which requires downloading non-free software to extract it. That's a bit disappointing. Why not to use just ZIP or 7Z for this?
When using DuckPAN Query the following is output to the screen before each input request:
ignoring "\e[B", since function 'history-search-forward' is not known
Exiting subroutine via next at /home/zaahir/perl5/lib/perl5/POE/Wheel/ReadLine.pm line 3026.
ignoring "\e[A", since function 'history-search-backward' is not known
Exiting subroutine via next at /home/zaahir/perl5/lib/perl5/POE/Wheel/ReadLine.pm line 3026.
Clearly related to POE Readline...
In light of recent changes (#39), App::DuckPAN::Help
really doesn't serve much purpose and can likely be removed. DuckPAN's help
output can be more easily controlled by pod2usage as demonstrated by the pod2usage Recommended Use. Rather than dispatching the help docs from Duckpan.pm
we can then print the output from duckpan help
to STDOUT
or STDERR
. And let man duckpan
print to the user's pager.
More things to consider:
--help
flag or -h
. Unfortunately for Duckpan, the help flag displays some information which is largely unhelpful. It should really display the various commands/syntax that DuckPAN supports.duckpan env --help
should explain how to use DuckPAN's env
command.duckpan --version
is also broken and doesn't display anything useful. This should definitely be fixed.git: 'foobar' is not a git command. See 'git --help'.
bin/duckpan
. This is because through Dist::Zilla
we are also leveraging PodWeaver which is wrapping the POD in a few canonical sections (ie. Name, Version, License, etc)Currently DuckPAN does not listen for changes in the Spice or Goodie packages it has loaded. Adding this ability would greatly benefit developers as they currently are required to restart the DuckPAN Server after making any modifications to .pm
files in order for them to take effect.
"App::DuckPAN for more informations." should be "See App::DuckPAN for more information."
When utf8 is being returned, at least in html for a goodie as in duckduckgo/zeroclickinfo-goodies#208, it is being encoded incorrectly.
I verified by uri encoding the return string and decoded it independently to verify it was encoded correctly, so it gets messed up somewhere after that.
Since there is Poupload.pm which pushes populated po files to community platform. Why not have Podownload command which can pull incomplete po files for download?
A call to $ duckpan
with no arguments shows the various commands supported by DuckPAN:
However, the command $ duckpan --help
shows different output, mostly about the various command line flags.
Furthemore, the man pages are also different:
All of these should be updated to reflect the current state of DuckPAN. Furthermore, I don't believe they should all show different information. They should probably all display the same information.
Currently the most up to date information regarding the various DuckPAN commands is documented in the (DuckPAN Readme)[https://github.com/duckduckgo/p5-app-duckpan/#using-duckpan]
Error message: https://gist.github.com/2778508
Code: https://gist.github.com/2778519
API Call: https://www.googleapis.com/plus/v1/people/105409238756204175774?key=AIzaSyD_aE2kPIhGFPiQWFLcNsldSFKfjTkA3nM (see utf8 chars in aboutMe)
Currently there a few IA's which are dependant on native libraries, (e.g. Chinese Zodiac requires libmpfr).
In most cases this is okay, however it creates problems when running duckpan installdeps
if either:
a) the dependency is broken or has an error you can't get around
b) the dependency simply cannot be installed (Codio doesn't allow sudo
or apt-get
, making it difficult because you would need to manually compile the lib --- ew.)
c) you don't want to install a native lib for a Goodie you're not interested in testing
We should be able to skip over dependencies that are unable to be installed, especially the ones that fail because right now I'm unable to finish installing other Goodies' dependencies on Codio (which we're been recommending as the best way to use DuckPAN).
I'm not sure the best approach, but Jag's recent fix to loading the IA Modules by doing so in an eval
sounds like one way to handle the dependency installations in DuckPAN.
Any thoughts on this? @jagtalon @russellholt @mwmiller @yegg
The implementation of tempnam uses mkstemp in perl. But tempnam can possibly have race condition where another application can insert data into the temporary file.
https://github.com/duckduckgo/p5-app-duckpan/blob/master/lib/App/DuckPAN.pm#L269
Just want to check if the implementation is security wise sound.
When the API is not found by DuckPAN, it goes to our endpoint. The problem is that if the Spice has spice wrap_jsonp_callback => 1;
enabled, it will double wrap it:
API key not found. Using DuckDuckGo's endpoint:
"https://duckduckgo.com/js/spice/bitcoin_balance/17x23dNjXJLzGMev6R63uyRhMWP1VHawKc"
ddg_spice_bitcoin_balance(ddg_spice_bitcoin_balance(
{"hash":"17x23dNjXJLzGMev6R63uyRhMWP1VHawKc","balance":5000000000,"received":5000000000,"sent":0,"unconfirmed_received":0,"unconfirmed_sent":0,"unconfirmed_balance":0});
);
When I install duckpan with aim of testing plugin on spice platform, I found dependency issue due to which default install fails.
autodie is one of the dependencies which due to (maybe failures of some tests) is not built thus install fails.
I installed using cpanm App::DuckPAN --force. Oh and I am using Ubuntu 12.04.
I would be happy to package duckpan for Fedora, so users can "yum install duckpan".
This would allow users to delegate updating duckpan to the operating system while they concentrate on developing, as well as increasing the number of distributions that you can have confidence that duckpan can be installed cleanly on (all test suites passed/etc).
However, every time App-DuckPAN (or a dependant module) updates, it will probably take roughly 2 weeks for the update to become available.
Assuming that this timeframe is acceptable, i would need to be able to configure duckpan to not disable itself every time a new version appears on CPAN/github.
Also, if possible, could DDG be released on CPAN?
Thoughts?
This would mean that users wouldn't have to run duckpan installdeps
every so often.
Use something like D::Z::Plugin::ReadmeAnyFromPod to create the readme from some POD rather than writing the documentation twice. The complication here: there is a lot of extra stuff in the README which doesn't belong in bin/duckpan's POD. Maybe patch the plugin to allow combining two source files?
Currently, in order to test modifications to the https://github.com/duckduckgo/duckduckgo repository, you need to execute the following command:
perl -I../duckduckgo/lib/ -I../duckpan/lib ../duckpan/bin/duckpan server
Which loads both the DuckDuckGo lib as well as DuckPAN's.
You should rather be able to run:
duckpan server -I../duckduckgo/lib
Notes:
DuckPAN uses MooX::Cmd
and MooX::Options
https://github.com/duckduckgo/p5-app-duckpan/blob/master/lib/App/DuckPAN.pm#L6
https://github.com/duckduckgo/p5-app-duckpan/blob/master/lib/App/DuckPAN.pm#L7
As a starting point, it might be best to modify @ARGV
in here:
https://github.com/duckduckgo/p5-app-duckpan/blob/master/bin/duckpan
I forked the spice repo and used the install script to install DuckPAN locally on OS X Mavericks. I can't get any of the instant answers to render in Chrome when connecting to DuckPAN server.
Browsing to http://localhost:5000/?q=xkcd+102 shows no output for the xkcd spice (i.e. there are no search results, and no instant answer box displaying).
Output from javascript console (no errors)
Compiling Spice Templates
Compiled template: xkcd_display_xkcd_display
Finished compiling templates
Now Spice obj: Object
Output from the server (with --verbose)
Checking for latest App::DuckPAN ... 0.142
Checking for latest DDG Perl package... 0.123
Using the following DDG instant answers:
- DDG::Spice::Airlines (Regexp)
- DDG::Spice::AlternativeTo (Words)
- DDG::Spice::Amazon (Words)
- DDG::Spice::Aur (Words)
- DDG::Spice::Automeme (Words)
- DDG::Spice::BBC (Words)
- DDG::Spice::Betterific (Words)
- DDG::Spice::Bible (Words)
- DDG::Spice::Bitcoin (Words)
- DDG::Spice::Book (Words)
- DDG::Spice::Bootic (Words)
- DDG::Spice::BrainyQuote (Words)
- DDG::Spice::Canistreamit (Words)
- DDG::Spice::ChuckNorris (Words)
- DDG::Spice::CodeSearch (Words)
- DDG::Spice::Congress (Words)
- DDG::Spice::CouponMountain (Words)
- DDG::Spice::DNS (Words)
- DDG::Spice::DetectLang (Words)
- DDG::Spice::Dictionary::Audio (Words)
- DDG::Spice::Dictionary::Definition (Words)
- DDG::Spice::Dictionary::Hyphenation (Words)
- DDG::Spice::Dictionary::Pronunciation (Words)
- DDG::Spice::Dictionary::Reference (Words)
- DDG::Spice::Drinks (Words)
- DDG::Spice::ESPN::Baseball (Words)
- DDG::Spice::ESPN::Basketball (Words)
- DDG::Spice::ESPN::Football (Words)
- DDG::Spice::ESPN::Golf (Words)
- DDG::Spice::ESPN::Hockey (Words)
- DDG::Spice::ESPN::Racing (Words)
- DDG::Spice::ESPN::Soccer (Words)
- DDG::Spice::ESPN::Tennis (Words)
- DDG::Spice::Editor (Words)
- DDG::Spice::ExpandURL (Words)
- DDG::Spice::Expatistan (Words)
- DDG::Spice::FlashVersion (Words)
- DDG::Spice::Forecast (Words)
- DDG::Spice::Forvo (Words)
- DDG::Spice::GameInfo (Words)
- DDG::Spice::Github (Words)
- DDG::Spice::GithubJobs (Words)
- DDG::Spice::GooglePlus (Words)
- DDG::Spice::Gravatar (Words)
- DDG::Spice::Guidebox::Getid (Words)
- DDG::Spice::Guidebox::Lastshows (Words)
- DDG::Spice::Hackage::PackageDetails (Words)
- DDG::Spice::Hackage::Packages (Words)
- DDG::Spice::HackerNews (Words)
- DDG::Spice::Haxelib (Words)
- DDG::Spice::Hayoo (Words)
- DDG::Spice::HqTemp (Words)
- DDG::Spice::Imdb (Words)
- DDG::Spice::InTheaters (Words)
- DDG::Spice::IsItUp (Regexp)
- DDG::Spice::KhanAcademy (Words)
- DDG::Spice::Kwixer (Words)
- DDG::Spice::Lastfm::Album (Regexp)
- DDG::Spice::Lastfm::Artist (Words)
- DDG::Spice::Lastfm::ArtistAlbum (Regexp)
- DDG::Spice::Lastfm::ArtistTracks (Regexp)
- DDG::Spice::Lastfm::Song (Regexp)
- DDG::Spice::Lastfm::TopTracks (Regexp)
- DDG::Spice::LeakDB (Words)
- DDG::Spice::Local (Words)
- DDG::Spice::MassOnTime (Words)
- DDG::Spice::Maven (Words)
- DDG::Spice::MetaCPAN (Words)
- DDG::Spice::Movie (Words)
- DDG::Spice::News (Words)
- DDG::Spice::Npm (Words)
- DDG::Spice::Octopart (Words)
- DDG::Spice::OpenSNP (Regexp)
- DDG::Spice::Plos (Words)
- DDG::Spice::Quixey (Words)
- DDG::Spice::RandNums (Regexp)
- DDG::Spice::RandWord (Words)
- DDG::Spice::RedditSearch (Words)
- DDG::Spice::RedditSubSearch (Regexp)
- DDG::Spice::Rhymes (Words)
- DDG::Spice::RubyGems (Words)
- DDG::Spice::SEPTA (Words)
- DDG::Spice::SearchCode (Words)
- DDG::Spice::Shorten (Words)
- DDG::Spice::Smbc (Words)
- DDG::Spice::Snow (Words)
- DDG::Spice::Songkick::Artists (Words)
- DDG::Spice::Songkick::Events (Words)
- DDG::Spice::Songkick::Getartistid (Words)
- DDG::Spice::Songkick::Geteventid (Words)
- DDG::Spice::SoundCloud (Words)
- DDG::Spice::SteamDB (Words)
- DDG::Spice::Stopwatch (Words)
- DDG::Spice::Thesaurus (Words)
- DDG::Spice::TodayInHistory (Words)
- DDG::Spice::Translate::Detect (Words)
- DDG::Spice::Translate::DetectPhrase (Words)
- DDG::Spice::Translate::FromTo (Words)
- DDG::Spice::Translate::FromToPhrase (Words)
- DDG::Spice::Tumblr (Words)
- DDG::Spice::Twitter (Regexp)
- DDG::Spice::UrbanDictionary (Words)
- DDG::Spice::Video (Words)
- DDG::Spice::WordMap (Words)
- DDG::Spice::Xkcd::Display (Words)
- DDG::Spice::Xkcd::Latest (Words)
- DDG::Spice::Zanran (Words)
- DDG::Spice::Zipcode (Regexp)
Hostname is: http://duckduckgo.com
Checking for newest assets from: http://duckduckgo.com
Requesting: http://duckduckgo.com/...success!
Wrote "page_root.html" into cache.
Requesting: http://duckduckgo.com/?q=duckduckhack-template-for-spice2...success!
dpan1612.js already exists in cache -- no request made.
g1112.js already exists in cache -- no request made.
s814.css already exists in cache -- no request made.
Wrote "page_spice.html" into cache.
Starting up webserver...
You can stop the webserver with Ctrl-C
HTTP::Server::PSGI: Accepting connections at http://0:5000/
DDG::ZeroClickInfo::Spice {
Parents Moo::Object
public methods (9) : call, call_data, call_path, call_type, caller, has_call, has_call_data, has_call_type, new
private methods (0)
internals: {
call "/js/spice/xkcd/display/102",
call_type "include",
caller "DDG::Spice::Xkcd::Display",
is_cached 1,
is_unsafe 0
}
}
127.0.0.1 - - [03/Jun/2014:18:57:06 +0100] "GET /?q=xkcd+102 HTTP/1.1" 200 8712 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36"
127.0.0.1 - - [03/Jun/2014:18:57:06 +0100] "GET /?duckduckhack_css=1 HTTP/1.1" 200 230861 "http://localhost:5000/?q=xkcd+102" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36"
127.0.0.1 - - [03/Jun/2014:18:57:06 +0100] "GET /?duckduckhack_js=1 HTTP/1.1" 200 368379 "http://localhost:5000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36"
127.0.0.1 - - [03/Jun/2014:18:57:06 +0100] "GET /?duckduckhack_templates=1 HTTP/1.1" 200 112080 "http://localhost:5000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36"
127.0.0.1 - - [03/Jun/2014:18:57:06 +0100] "GET /share/spice/xkcd/display/xkcd_display.js HTTP/1.1" 200 1225 "http://localhost:5000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36"
127.0.0.1 - - [03/Jun/2014:18:57:06 +0100] "GET /font/ProximaNova-Reg-webfont.woff HTTP/1.1" 200 23776 "http://localhost:5000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36"
127.0.0.1 - - [03/Jun/2014:18:57:07 +0100] "GET /font/ddg-serp-icons.svg?v=102 HTTP/1.1" 200 11944 "http://localhost:5000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36"
127.0.0.1 - - [03/Jun/2014:18:57:07 +0100] "GET /font/ProximaNova-Sbold-webfont.woff HTTP/1.1" 200 23900 "http://localhost:5000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36"
127.0.0.1 - - [03/Jun/2014:18:57:07 +0100] "GET /?duckduckhack_ignore=1& HTTP/1.1" 204 0 "http://localhost:5000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36"
127.0.0.1 - - [03/Jun/2014:18:57:07 +0100] "GET /share/spice/xkcd/display/xkcd_display.css HTTP/1.1" 200 55 "http://localhost:5000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36"
"http://xkcd.com/102/info.0.json"
127.0.0.1 - - [03/Jun/2014:18:57:07 +0100] "GET /js/spice/xkcd/display/102 HTTP/1.1" 200 913 "http://localhost:5000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36"
"http://xkcd.com/info.0.json"
127.0.0.1 - - [03/Jun/2014:18:57:07 +0100] "GET /js/spice/xkcd/latest/ HTTP/1.1" 200 270 "http://localhost:5000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36"
(My first few hours familiarizing myself with this project; may have missed something obvious...)
Just forked/cloned zeroclickinfo-goodies and followed the directions at https://duck.co/duckduckhack/goodie_testing_triggers to set up testing on a VMWare image of DuckDuckGo's development virtual machine (the virtual machine came from "ddh-vmw.rar" and has MD5 checksum 95ad9acfacadb4b0cb0cf23ffaa3516e).
Step 3 of the instructions, run the command "duckpan installdeps" inside the repository root, fails because of a missing file named "mpfr.h". I've included the build log below. I also tried rerunning the command without success both before and after updating duckpan. However, forking/cloning zeroclickinfo-spice and running "duckpan installdeps" inside that repository succeeds without problems.
Here's the build log:
cpanm (App::cpanminus) 1.6937 on perl 5.016003 built for x86_64-linux
Work directory is /home/dax/.cpanm/work/1411270596.18832
You have make /usr/bin/make
You have LWP 6.05
You have /bin/tar: tar (GNU tar) 1.26
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by John Gilmore and Jay Fenlason.
Searching DateTime::Calendar::Chinese on cpanmetadb ...
--> Working on DateTime::Calendar::Chinese
Fetching http://www.cpan.org/authors/id/D/DM/DMAKI/DateTime-Calendar-Chinese-1.00.tar.gz
-> OK
Unpacking DateTime-Calendar-Chinese-1.00.tar.gz
Entering DateTime-Calendar-Chinese-1.00
Checking configure dependencies from META.yml
Checking if you have ExtUtils::MakeMaker 6.42 ... Yes (6.72)
Configuring DateTime-Calendar-Chinese-1.00
Running Makefile.PL
Warning: prerequisite DateTime::Event::Chinese 1.00 not found.
Checking if your kit is complete...
Looks good
Writing Makefile for DateTime::Calendar::Chinese
Writing MYMETA.yml and MYMETA.json
-> OK
Checking dependencies from MYMETA.json ...
Checking if you have ExtUtils::MakeMaker 6.42 ... Yes (6.72)
Checking if you have DateTime::Event::Chinese 1.00 ... No
==> Found dependencies: DateTime::Event::Chinese
Searching DateTime::Event::Chinese on cpanmetadb ...
--> Working on DateTime::Event::Chinese
Fetching http://www.cpan.org/authors/id/D/DM/DMAKI/DateTime-Event-Chinese-1.00.tar.gz
-> OK
Unpacking DateTime-Event-Chinese-1.00.tar.gz
Entering DateTime-Event-Chinese-1.00
Checking configure dependencies from META.yml
Checking if you have ExtUtils::MakeMaker 6.42 ... Yes (6.72)
Configuring DateTime-Event-Chinese-1.00
Running Makefile.PL
Cannot determine perl version info from lib/DateTime/Event/Chinese.pm
Warning: prerequisite DateTime::Astro 0 not found.
Checking if your kit is complete...
Looks good
Writing Makefile for DateTime::Event::Chinese
Writing MYMETA.yml and MYMETA.json
-> OK
Checking dependencies from MYMETA.json ...
Checking if you have DateTime::Astro 0 ... No
Checking if you have ExtUtils::MakeMaker 6.42 ... Yes (6.72)
Checking if you have Math::Round 0 ... Yes (0.06)
==> Found dependencies: DateTime::Astro
Searching DateTime::Astro on cpanmetadb ...
--> Working on DateTime::Astro
Fetching http://www.cpan.org/authors/id/D/DM/DMAKI/DateTime-Astro-1.00.tar.gz
-> OK
Unpacking DateTime-Astro-1.00.tar.gz
Entering DateTime-Astro-1.00
Checking configure dependencies from META.yml
Checking if you have ExtUtils::MakeMaker 6.36 ... Yes (6.72)
Checking if you have ExtUtils::ParseXS 2.21 ... Yes (3.24)
Checking if you have Devel::PPPort 3.19 ... Yes (3.20)
Configuring DateTime-Astro-1.00
Running Makefile.PL
Cannot determine perl version info from lib/DateTime/Astro.pm
Writing ppport.h
Checking if your kit is complete...
Looks good
Writing Makefile for DateTime::Astro
Writing MYMETA.yml and MYMETA.json
-> OK
Checking dependencies from MYMETA.json ...
Checking if you have DateTime 0 ... Yes (1.03)
Checking if you have DateTime::Set 0 ... Yes (0.3400)
Checking if you have XSLoader 0.02 ... Yes (0.16)
Checking if you have ExtUtils::MakeMaker 6.36 ... Yes (6.72)
Checking if you have ExtUtils::ParseXS 2.21 ... Yes (3.24)
Checking if you have Devel::PPPort 3.19 ... Yes (3.20)
Checking if you have Exporter 5.57 ... Yes (5.66)
Building and testing DateTime-Astro-1.00
cp lib/DateTime/AstroXS.pm blib/lib/DateTime/AstroXS.pm
cp lib/DateTime/Event/SolarTerm.pm blib/lib/DateTime/Event/SolarTerm.pm
cp lib/DateTime/AstroPP.pm blib/lib/DateTime/AstroPP.pm
cp lib/DateTime/Astro.pm blib/lib/DateTime/Astro.pm
/home/dax/perl5/perlbrew/perls/perl-5.16.3/bin/perl "-Iinc" /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/site_perl/5.16.3/ExtUtils/xsubpp -typemap /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/ExtUtils/typemap xs/dt_astro.xs > xs/dt_astro.xsc && mv xs/dt_astro.xsc xs/dt_astro.c
cc -c "-I." "-I." -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -W -Wno-comment -O2 -DVERSION="1.00" -DXS_VERSION="1.00" -o xs/dt_astro.o -fPIC "-I/home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/x86_64-linux/CORE" -DUSE_PPPORT xs/dt_astro.c
In file included from xs/dt_astro.xs:1:0:
xs/dt_astro.h:9:18: fatal error: mpfr.h: No such file or directory
compilation terminated.
make: *** [xs/dt_astro.o] Error 1
-> FAIL Installing DateTime::Astro failed. See /home/dax/.cpanm/work/1411270596.18832/build.log for details. Retry with --force to force install it.
-> FAIL Installing the dependencies failed: Module 'DateTime::Astro' is not installed
-> FAIL Bailing out the installation for DateTime-Event-Chinese-1.00.
-> FAIL Installing the dependencies failed: Module 'DateTime::Event::Chinese' is not installed
-> FAIL Bailing out the installation for DateTime-Calendar-Chinese-1.00.
Already tried DateTime::Event::Chinese. Skipping.
I have triggers startend => "idreambooks", "book reviews", "book review";
, but somehow "the book of joe reviews" triggers. Is it splitting the strings?
I'm getting this as my output:
Query: the book of joe reviews
You entered: the book of joe reviews
DDG::ZeroClickInfo::Spice {
Parents Moo::Object
public methods (9) : call, call_data, caller, call_path, call_type, has_call, has_call_data, has_call_type, new
private methods (0)
internals: {
call "/js/spice/book/the",
caller "DDG::Spice::Book",
call_type "include",
is_cached 1,
is_unsafe 0
}
}
Since duckpan has dependencies on internal code, it can break without us realizing it (like it did the past day or so). We could use an automated testing script that we can run periodically to check if it is in a functional state or not. I imagine this would run independently of duckpan, spin up duckpan server and then run some tests against it.
Part of the issue here, however, is that the error could be in JavaScript and that is hard to detect without something like Selenium. So maybe we do it that way, or maybe we treat those separately and for now we just run a script that tests more basic functioning, which could get most of the cases easily.
Whenever I run duckpan server
I recieve the following errors:
Starting up webserver...
You can stop the webserver with Ctrl-C
keys on reference is experimental at /home/user/perl5/lib/perl5/App/DuckPAN/Web.pm line 360.
Compilation failed in require at /home/user/perl5/lib/perl5/App/DuckPAN/Cmd/Server.pm line 167.
Although I have the most up to date version available of App::DuckPAN from cpanm my local files are very slightly different to those here on github.
Line 360 of Web.pm refers to:
} keys $calls_template{$spice_name});
which is line 357 of the current github version (44c1aac)
Line 167 of Web.pm refers to:
require App::DuckPAN::Web;
which is line 164 of the current github version (e1378ec)
I'm running Arch linux
When DuckPAN makes an API request, we should better indicate when the request fails (and maybe when it's successful) but mostly DuckPAN should probably stop execution and let the developer know.
For example after purposely breaking the URL for the NPM Spice, the DuckPAN server doesn't display anything on the page but if you look very closely in the terminal output you'll see that the request returned a 500 Error:
I think when the request isn't a success, the DuckPAN Server should stop (or at the very least make it obvious what went wrong) and notify the user clearly that the request failed. Here's the code the would need to be updated: https://github.com/duckduckgo/p5-app-duckpan/blob/master/lib/App/DuckPAN/Web.pm#L146-166
I have started with the initial configuration of duckpan test application,but Im getting these strange errors which i have mentioned below on Ubuntu 12.04 .I tried running this command multiple times "curl http://duckpan.org/install.pl | perl",but command fails to complete its operation with the below exception. due to this i`m not able to go ahead with my app development. any quick resolution to this would be much appreciated.
Fetching http://www.cpan.org/authors/id/P/PJ/PJF/autodie-2.20.tar.gz ... OK Configuring autodie-2.20 ... OK Building and testing autodie-2.20 ... FAIL ! Installing autodie::exception failed. See /home/dreamweiver/.cpanm/work/1378646321.3315/build.log for details. Retry with --force to force install it. ! Installing the dependencies failed: Installed version (2.1001) of autodie::exception is not in range '2.14' ! Bailing out the installation for Path-Tiny-0.032. ! Installing the dependencies failed: Module 'Path::Tiny' is not installed ! Bailing out the installation for Test-File-ShareDir-0.3.3. ! Installing the dependencies failed: Module 'Test::File::ShareDir' is not installed ! Bailing out the installation for Dist-Zilla-4.300037. ! Installing the dependencies failed: Module 'Dist::Zilla' is not installed ! Bailing out the installation for Dist-Zilla-Plugin-UploadToDuckPAN-0.004. --> Working on POE Fetching http://www.cpan.org/authors/id/R/RC/RCAPUTO/POE-1.356.tar.gz ... OK Configuring POE-1.356 ... OK ==> Found dependencies: IO::Tty --> Working on IO::Tty Fetching http://www.cpan.org/authors/id/T/TO/TODDR/IO-Tty-1.10.tar.gz ... OK Configuring IO-Tty-1.10 ... FAIL ! Timed out (> 60s). Use --verbose to retry. Terminated dreamweiver@dreamweiver-VirtualBox:~$ ! Configure failed for IO-Tty-1.10. See /home/dreamweiver/.cpanm/work/1378646321.3315/build.log for details. ! Installing the dependencies failed: Module 'IO::Tty' is not installed ! Bailing out the installation for POE-1.356. ! Installing the dependencies failed: Module 'Dist::Zilla::Plugin::UploadToDuckPAN' is not installed, Module 'POE' is not installed, Module 'Dist::Zilla' is not installed ! Bailing out the installation for App-DuckPAN-0.115.
Thanks
installdeps is referenced readme docs but not in the pod
I just downloaded the latest VMWare image to set up a testing environment on a different machine and ran into a problem running duckpan installdeps
inside both Goodie and Spice repositories. I included the build log below, but the main problem seems to be that the current version of PromptIfStale (0.27) does not complete its tests properly and stops duckpan installdeps
from installing anything else. I was able to use cpanm Dist::Zilla::Plugin::PromptifStale --force
to force the install of PromptIfStale and then run duckpan installdeps
successfully. Oddly, when I initially tried to fix this by running duckpan installdeps --force
, the failed PromptIfStale module just caused the install script to immediately quit.
Here's the build log from my failed attempt before manually forcing the install of PromptIfStale:
cpanm (App::cpanminus) 1.6937 on perl 5.016003 built for x86_64-linux
Work directory is /home/dax/.cpanm/work/1413002470.7956
You have make /usr/bin/make
You have LWP 6.05
You have /bin/tar: tar (GNU tar) 1.26
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by John Gilmore and Jay Fenlason.
Searching Dist::Zilla::Plugin::PromptIfStale on cpanmetadb ...
--> Working on Dist::Zilla::Plugin::PromptIfStale
Fetching http://www.cpan.org/authors/id/E/ET/ETHER/Dist-Zilla-Plugin-PromptIfStale-0.027.tar.gz
-> OK
Unpacking Dist-Zilla-Plugin-PromptIfStale-0.027.tar.gz
Entering Dist-Zilla-Plugin-PromptIfStale-0.027
Checking configure dependencies from META.json
Checking if you have ExtUtils::MakeMaker 0 ... Yes (6.72)
Configuring Dist-Zilla-Plugin-PromptIfStale-0.027
Running Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for Dist::Zilla::Plugin::PromptIfStale
Writing MYMETA.yml and MYMETA.json
-> OK
Checking dependencies from MYMETA.json ...
Checking if you have if 0 ... Yes (0.0602)
Checking if you have List::Util 1.33 ... Yes (1.41)
Checking if you have HTTP::Tiny 0 ... Yes (0.034)
Checking if you have List::MoreUtils 0 ... Yes (0.33)
Checking if you have Dist::Zilla::Plugin::MetaResources 4.300039 ... Yes (5.020)
Checking if you have Test::Deep 0 ... Yes (0.110)
Checking if you have JSON::MaybeXS 0 ... Yes (1.002003)
Checking if you have Try::Tiny 0 ... Yes (0.18)
Checking if you have warnings 0 ... Yes (1.13)
Checking if you have Dist::Zilla::App 0 ... Yes (5.020)
Checking if you have File::pushd 0 ... Yes (1.005)
Checking if you have ExtUtils::MakeMaker 0 ... Yes (6.72)
Checking if you have Dist::Zilla::Role::BeforeBuild 0 ... Yes (5.020)
Checking if you have strict 0 ... Yes (1.07)
Checking if you have Moose::Util 0 ... Yes (2.1005)
Checking if you have Test::More 0 ... Yes (1.001006)
Checking if you have Test::DZil 0 ... Yes (5.020)
Checking if you have Dist::Zilla::Role::BeforeRelease 0 ... Yes (5.020)
Checking if you have Path::Class 0 ... Yes (0.32)
Checking if you have Module::CoreList 3.10 ... Yes (5.20141002)
Checking if you have Module::Metadata 0 ... Yes (1.000014)
Checking if you have MooseX::Types::Moose 0 ... Yes (0.36)
Checking if you have File::Spec 0 ... Yes (3.40)
Checking if you have Test::Fatal 0 ... Yes (0.010)
Checking if you have Module::Path 0 ... Yes (0.09)
Checking if you have Moose::Util::TypeConstraints 0 ... Yes (2.1005)
Checking if you have Module::Runtime 0 ... Yes (0.013)
Checking if you have Dist::Zilla::Role::AfterBuild 0 ... Yes (5.020)
Checking if you have lib 0 ... Yes (0.63)
Checking if you have Parse::CPAN::Packages::Fast 0 ... Yes (0.06)
Checking if you have Moose 0 ... Yes (2.1005)
Checking if you have Path::Tiny 0 ... Yes (0.029)
Checking if you have namespace::autoclean 0 ... Yes (0.13)
Checking if you have version 0 ... Yes (0.99)
Checking if you have Dist::Zilla::App::Tester 0 ... Yes (5.020)
Checking if you have IO::Pty 0 ... Yes (1.10)
Checking if you have Cwd 0 ... Yes (3.40)
Checking if you have Dist::Zilla::Util::AuthorDeps 0 ... Yes (5.020)
Building and testing Dist-Zilla-Plugin-PromptIfStale-0.027
cp lib/Dist/Zilla/Plugin/PromptIfStale.pm blib/lib/Dist/Zilla/Plugin/PromptIfStale.pm
cp lib/Dist/Zilla/App/Command/stale.pm blib/lib/Dist/Zilla/App/Command/stale.pm
cp lib/Dist/Zilla/Plugin/EnsureNotStale.pm blib/lib/Dist/Zilla/Plugin/EnsureNotStale.pm
Manifying blib/man3/Dist::Zilla::Plugin::PromptIfStale.3
Manifying blib/man3/Dist::Zilla::App::Command::stale.3
Manifying blib/man3/Dist::Zilla::Plugin::EnsureNotStale.3
PERL_DL_NONLAZY=1 /home/dax/perl5/perlbrew/perls/perl-5.16.3/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
#
# Versions for all modules listed in MYMETA.json (including optional ones):
#
# === Configure Requires ===
#
# Module Want Have
# ------------------- ---- ----
# ExtUtils::MakeMaker any 6.72
#
# === Build Requires ===
#
# Module Want Have
# ------------------- ---- ----
# ExtUtils::MakeMaker any 6.72
#
# === Test Requires ===
#
# Module Want Have
# ------------------------ ---- --------
# Dist::Zilla::App::Tester any 5.020
# ExtUtils::MakeMaker any 6.72
# File::Spec any 3.40
# File::pushd any 1.005
# IO::Pty any 1.10
# Module::Runtime any 0.013
# Moose::Util any 2.1005
# Test::DZil any 5.020
# Test::Deep any 0.110
# Test::Fatal any 0.010
# Test::More any 1.001006
# if any 0.0602
# lib any 0.63
#
# === Test Recommends ===
#
# Module Want Have
# ---------- -------- --------
# CPAN::Meta 2.120900 2.142690
#
# === Runtime Requires ===
#
# Module Want Have
# ---------------------------------- -------- ----------
# Cwd any 3.40
# Dist::Zilla::App any 5.020
# Dist::Zilla::Plugin::MetaResources 4.300039 5.020
# Dist::Zilla::Role::AfterBuild any 5.020
# Dist::Zilla::Role::BeforeBuild any 5.020
# Dist::Zilla::Role::BeforeRelease any 5.020
# Dist::Zilla::Util::AuthorDeps any 5.020
# HTTP::Tiny any 0.034
# JSON::MaybeXS any 1.002003
# List::MoreUtils any 0.33
# List::Util 1.33 1.41
# Module::CoreList 3.10 5.20141002
# Module::Metadata any 1.000014
# Module::Path any 0.09
# Moose any 2.1005
# Moose::Util::TypeConstraints any 2.1005
# MooseX::Types::Moose any 0.36
# Parse::CPAN::Packages::Fast any 0.06
# Path::Class any 0.32
# Path::Tiny any 0.029
# Try::Tiny any 0.18
# namespace::autoclean any 0.13
# strict any 1.07
# version any 0.99
# warnings any 1.13
#
# === Other Modules ===
#
# Module Want Have
# --------------------- ---- --------
# CPAN::Meta::Validator any 2.142690
#
t/00-report-prereqs.t ........... ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
t/01-basic.t .................... ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
t/02-not-installed.t ............ ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
t/03-bunk-module.t .............. ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
t/04-two-configs.t .............. ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49, line 37.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49, line 37.
t/05-check-all-prereqs.t ........ ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49, line 10.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49, line 10.
t/06-duplicates.t ............... ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
t/07-two-stale.t ................ ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
t/08-many-modules.t ............. ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49, line 37.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49, line 37.
t/10-release-prompt.t ........... ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49, line 10.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49, line 10.
t/11-local-module.t ............. ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
t/12-skip.t ..................... ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
t/13-fatal.t .................... ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
t/14-index-base-url.t ........... ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
t/15-command.t .................. ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
t/16-command-all.t .............. ok
t/17-command-missing-plugins.t .. ok
t/18-command-old-plugins.t ...... ok
# Failed test 'dzil authordeps ran to get prereq that causes a full build to explode'
# at t/19-build-failure.t line 50.
# got: 'Not::Installed
# Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
# Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
# '
# expected: 'Not::Installed
# '
# got resultbless( {
# 'app' => bless( {
# 'Dist::Zilla::App' => {
# 'zilla' => bless( {
# '_copyright_holder' => 'E. Xavier Ample',
# '_global_stashes' => {},
# '_license_class' => 'Perl_5',
# '_version_override' => '0.001',
# 'abstract' => 'Sample DZ Dist',
# 'authors' => [
# 'E. Xavier Ample '
# ],
# 'chrome' => bless( {
# 'logger' => bless( {
# 'config_id' => 'Dist::Zilla',
# 'debug' => 0,
# 'dispatcher' => bless( {
# 'callbacks' => [
# sub { "DUMMY" }
# ],
# 'outputs' => {
# 'self' => bless( {
# 'array' => [
# {
# 'level' => 'info',
# 'message' => 'Not::Installed',
# 'name' => 'self'
# }
# ],
# 'level_names' => [
# 'debug',
# 'info',
# 'notice',
# 'warning',
# 'error',
# 'critical',
# 'alert',
# 'emergency'
# ],
# 'level_numbers' => {
# 'alert' => 6,
# 'crit' => 5,
# 'critical' => 5,
# 'debug' => 0,
# 'emerg' => 7,
# 'emergency' => 7,
# 'err' => 4,
# 'error' => 4,
# 'info' => 1,
# 'notice' => 2,
# 'warn' => 3,
# 'warning' => 3
# },
# 'max_level' => 7,
# 'min_level' => 0,
# 'name' => 'self'
# }, 'Log::Dispatch::Array' ),
# 'stdout' => bless( {
# 'callbacks' => [
# sub { "DUMMY" }
# ],
# 'level_names' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}{'chrome'}{'logger'}{'dispatcher'}{'outputs'}{'self'}{'level_names'},
# 'level_numbers' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}{'chrome'}{'logger'}{'dispatcher'}{'outputs'}{'self'}{'level_numbers'},
# 'max_level' => 1,
# 'min_level' => 0,
# 'name' => 'stdout',
# 'stderr' => 0
# }, 'Log::Dispatch::Screen' )
# }
# }, 'Log::Dispatch' ),
# 'events' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}{'chrome'}{'logger'}{'dispatcher'}{'outputs'}{'self'}{'array'},
# 'fail_fatal' => 1,
# 'ident' => 'Dist::Zilla',
# 'muted' => 0,
# 'prefix' => undef
# }, 'Log::Dispatchouli' ),
# 'term_enc' => 'utf-8'
# }, 'Dist::Zilla::Chrome::Term' ),
# 'is_trial' => 0,
# 'logger' => bless( {
# 'debug' => 0,
# 'logger' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}{'chrome'}{'logger'},
# 'parent' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}{'chrome'}{'logger'},
# 'proxy_prefix' => '[DZ] '
# }, 'Log::Dispatchouli::Proxy' ),
# 'name' => 'DZT-Sample',
# 'plugins' => [
# bless( {
# 'exclude_filename' => [],
# 'exclude_match' => [],
# 'follow_symlinks' => 0,
# 'include_dotfiles' => 0,
# 'logger' => bless( {
# 'debug' => undef,
# 'logger' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}{'chrome'}{'logger'},
# 'parent' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}{'chrome'}{'logger'},
# 'proxy_prefix' => '[GatherDir] '
# }, 'Log::Dispatchouli::Proxy' ),
# 'plugin_name' => 'GatherDir',
# 'prefix' => '',
# 'zilla' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}
# }, 'Dist::Zilla::Plugin::GatherDir' ),
# bless( {
# 'logger' => bless( {
# 'debug' => undef,
# 'logger' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}{'chrome'}{'logger'},
# 'parent' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}{'chrome'}{'logger'},
# 'proxy_prefix' => '[=inc::Funky] '
# }, 'Log::Dispatchouli::Proxy' ),
# 'plugin_name' => '=inc::Funky',
# 'zilla' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}
# }, 'inc::Funky' ),
# bless( {
# 'code' => sub { "DUMMY" },
# 'plugin_name' => ':InstallModules',
# 'style' => 'grep',
# 'zilla' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}
# }, 'Dist::Zilla::Plugin::FinderCode' ),
# bless( {
# 'code' => sub { "DUMMY" },
# 'plugin_name' => ':IncModules',
# 'style' => 'grep',
# 'zilla' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}
# }, 'Dist::Zilla::Plugin::FinderCode' ),
# bless( {
# 'code' => sub { "DUMMY" },
# 'plugin_name' => ':TestFiles',
# 'style' => 'grep',
# 'zilla' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}
# }, 'Dist::Zilla::Plugin::FinderCode' ),
# bless( {
# 'code' => sub { "DUMMY" },
# 'plugin_name' => ':ExecFiles',
# 'style' => 'list',
# 'zilla' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}
# }, 'Dist::Zilla::Plugin::FinderCode' ),
# bless( {
# 'code' => sub { "DUMMY" },
# 'plugin_name' => ':ShareFiles',
# 'style' => 'list',
# 'zilla' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}
# }, 'Dist::Zilla::Plugin::FinderCode' ),
# bless( {
# 'code' => sub { "DUMMY" },
# 'plugin_name' => ':MainModule',
# 'style' => 'grep',
# 'zilla' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}
# }, 'Dist::Zilla::Plugin::FinderCode' ),
# bless( {
# 'code' => sub { "DUMMY" },
# 'plugin_name' => ':AllFiles',
# 'style' => 'grep',
# 'zilla' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}
# }, 'Dist::Zilla::Plugin::FinderCode' ),
# bless( {
# 'code' => sub { "DUMMY" },
# 'plugin_name' => ':NoFiles',
# 'style' => 'list',
# 'zilla' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}
# }, 'Dist::Zilla::Plugin::FinderCode' )
# ],
# 'prereqs' => bless( {
# 'cpan_meta_prereqs' => bless( {}, 'CPAN::Meta::Prereqs' ),
# 'merged_requires' => bless( {
# 'bad_version_hook' => undef
# }, 'CPAN::Meta::Requirements' )
# }, 'Dist::Zilla::Prereqs' ),
# 'root' => bless( {
# 'dirs' => [
# '.'
# ],
# 'file_spec_class' => undef,
# 'volume' => ''
# }, 'Path::Class::Dir' )
# }, 'Dist::Zilla::Dist::Builder' )
# },
# '__chrome__' => $VAR1->{'app'}{'Dist::Zilla::App'}{'zilla'}{'chrome'},
# 'arg0' => '19-build-failure.t',
# 'command' => {
# '--help' => 'App::Cmd::Command::help',
# '--version' => 'Dist::Zilla::App::Command::version',
# '-?' => 'App::Cmd::Command::help',
# '-h' => 'App::Cmd::Command::help',
# 'add' => 'Dist::Zilla::App::Command::add',
# 'authordeps' => 'Dist::Zilla::App::Command::authordeps',
# 'build' => 'Dist::Zilla::App::Command::build',
# 'clean' => 'Dist::Zilla::App::Command::clean',
# 'commands' => 'App::Cmd::Command::commands',
# 'help' => 'App::Cmd::Command::help',
# 'install' => 'Dist::Zilla::App::Command::install',
# 'listdeps' => 'Dist::Zilla::App::Command::listdeps',
# 'new' => 'Dist::Zilla::App::Command::new',
# 'nop' => 'Dist::Zilla::App::Command::nop',
# 'release' => 'Dist::Zilla::App::Command::release',
# 'run' => 'Dist::Zilla::App::Command::run',
# 'setup' => 'Dist::Zilla::App::Command::setup',
# 'smoke' => 'Dist::Zilla::App::Command::smoke',
# 'stale' => 'Dist::Zilla::App::Command::stale',
# 'test' => 'Dist::Zilla::App::Command::test',
# 'version' => 'Dist::Zilla::App::Command::version'
# },
# 'full_arg0' => 't/19-build-failure.t',
# 'global_options' => bless( {}, 'Getopt::Long::Descriptive::Opts::__OPT__::1' ),
# 'usage' => bless( {
# 'leader_text' => '19-build-failure.t [-Iv] [long options...]',
# 'options' => [
# {
# 'constraint' => {},
# 'desc' => 'log additional output',
# 'name' => 'verbose',
# 'spec' => 'verbose|v:s@'
# },
# {
# 'constraint' => {
# 'callbacks' => {
# 'always fine' => sub { "DUMMY" }
# }
# },
# 'desc' => 'additional @INC dirs',
# 'name' => 'lib_inc',
# 'spec' => 'lib-inc|I=s@'
# }
# ]
# }, 'Getopt::Long::Descriptive::Usage' )
# }, 'Dist::Zilla::App' ),
# 'error' => undef,
# 'exit_code' => 0,
# 'output' => 'Not::Installed
# Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
# Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
# ',
# 'run_rv' => undef,
# 'stderr' => 'Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
# Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
# ',
# 'stdout' => 'Not::Installed
# ',
# 'tempdir' => '/tmp/9CMdhK9fMa'
# }, 'Dist::Zilla::App::Tester::Result' )
# Looks like you failed 1 test of 3.
t/19-build-failure.t ............
Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/3 subtests
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
t/20-ensure-not-stale.t ......... ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
t/21-authordeps.t ............... ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
t/22-perl.t ..................... ok
Subroutine JSON::XS::Boolean::("" redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
Subroutine JSON::XS::Boolean::(eq redefined at /home/dax/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/overload.pm line 49.
t/23-noninteractive.t ........... ok
Test Summary Report
-------------------
t/19-build-failure.t (Wstat: 256 Tests: 3 Failed: 1)
Failed test: 3
Non-zero exit status: 1
Files=23, Tests=92, 29 wallclock secs ( 0.09 usr 0.20 sys + 25.57 cusr 2.76 csys = 28.62 CPU)
Result: FAIL
Failed 1/23 test programs. 1/92 subtests failed.
make: *** [test_dynamic] Error 255
-> FAIL Installing Dist::Zilla::Plugin::PromptIfStale failed. See /home/dax/.cpanm/work/1413002470.7956/build.log for details. Retry with --force to force install it.
Currently DuckPAN doesn't verify you have a properly named handlebars template that matches the directory structure.
Eg.DDG::Spice::Foo::Bar
must have a foo_bar.handlebars
template. If this is not the case DuckPAN should throw an error.
The same goes for JS and CSS files, although CSS is not required for each Spice Instant Answer
/cc @yegg
@nospampleasemam after merging and testing your other UTF-8 fix everything seemed to be good, "g+ duckduckgo" worked for me, as well as "flip testing".
However, after testing your other PR's I noticed that when testing Quixey I received the same UTF-8 error as before:
Body must be bytes and should not contain wide characters (UTF-8 strings) at /home/zaahir/perl5/lib/perl5/Plack/Middleware/Lint.pm line 156
But this time it's non-fatal, as the plugin comes through and everything looks fine on the frontend:
Quixey also gets a lot of complaints from DuckPAN about tons of utf8 characters.
This however has always been there, but I'm assuming its related to the problem:
I have something like:
DDG.get_asset_path('currency', 'assets/' + (DDG.is3x ? '96' : DDG.is2x ? '64' : '32') + '/' + symbol + '.png');
But it doesn't work on DuckPAN.
Hi,
I ran the script according to https://github.com/duckduckgo/p5-app-duckpan/blob/master/README.md but neither duckpan nor cpnam can be found. I ran the script twice (actually four times, or so), still no luck.
uname -a
Linux hive 3.2.0-58-generic #88-Ubuntu SMP Tue Dec 3 17:37:58 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
less build.log
cpanm (App::cpanminus) 1.6108 on perl 5.014002 built for x86_64-linux-gnu-thread-multi
Work directory is /home/greg/.cpanm/work/1393785283.1578
You have make /usr/bin/make
You have LWP 6.05
You have /bin/tar: tar (GNU tar) 1.26
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by John Gilmore and Jay Fenlason.
You have /usr/bin/unzip
Searching local::lib on cpanmetadb ...
Checking if you have ExtUtils::MakeMaker 6.31 ... Yes (6.90)
Checking if you have ExtUtils::Install 1.46 ... Yes (1.56)
local::lib is up to date. (2.000004)
Searching App::cpanminus on cpanmetadb ...
App::cpanminus is up to date. (1.7001)
I have a folder named .cpanm in my home folder and a perl5 folder, too. I am using zsh instead of bash, if that matters (and it's actually Elementary OS, which is build upon Ubuntu). Just to be sure, this is the scripts output after i ran it:
Installing local::lib and App::cpanminus to /home/greg/perl5...
Fetching cpanminus from http://duckpan.org/cpanm ...
local::lib is up to date. (2.000004)
App::cpanminus is up to date. (1.7001)
You don't use bash, so we assume that you know what you're doing -- please add
this line to the startup script of your shell:
eval $(perl -I${HOME}/perl5/lib/perl5 -Mlocal::lib)
so that local::lib is active after you relogin.
Please wait 5 sec.: .....
============================================================
local::lib (or perlbrew) is not active. If you ran this script for the first
time, please re-login to your user account or reload your shell configuration
and run it again!
Like I said above, cpanm and duckpan cannot be found. I can run cpanm if I invoke it via ./perl5/bin/cpanm
from my home folder.
Kind regards
Greg
$ duckpan check
Checking your environment for the DuckPAN requirements
Checking for latest DDG Perl package...
At this point, the perl process consumes 100% of CPU and makes no syscalls. I must ^C to cancel it.
Currently if a new version of the DDG package has been released, or a new version of DuckPAN has been released, DuckPAN becomes unusable as it prevents you from carrying out any other actions until the appropriate package has been updated.
I was thinking we should either prompt the dev in that moment to run the upgrade for them, which leads to a slightly nicer and a hopefully quicker experience. Or alternatively, DuckPAN could simply run the script to update DuckPAN itself rather than making the dev take any action.
Any thoughts?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.