-
once
stdlibis live (merged tomasterand published), make the default branch bedevelop- all PRs, etc, should be made against
develop
- all PRs, etc, should be made against
-
replace
jshintwitheslint- add to test command
- support reformatting ala
go fmt - move
eslintconfig files/modules to this repo (will need to do audit to ensure up-to-date)
-
add NPM style guide with versioning info
-
determine how to handle internal
@stdliblinks in READMEs- e.g.,
@stdlib/math/constants/float64-two-pi - replace internal module references
- e.g.,
-
create an
docs/install.mdfor developers- julia
- R
- python
- golang
- boost
-
determine a browser testing strategy
- could run into memory issues if all numeric tests are run for all functions, etc.
- one possibility is to loop through all files and run each individually (browserify, testling, and repeat)
- may have to punt browser testing to individual repos (!)
-
std polyfills?
- object-keys
- typed-array
- ...
-
how to handle modules with CLIs?
- will want some sort of CLI test framework to test
stdin,stdout, args, etc.
- will want some sort of CLI test framework to test
-
how to handle browser tests for non-browser fcns
- e.g.,
fsfunctions likefs/exists, orcwd
- e.g.,
-
migrate JSDoc; use one of
-
debug eval sources
-
add CONTRIBUTING.md
-
determine strategy for generic validation fcns
-
lint filenames
-
consider changing
isNumbertoisNumeric -
prngs
- pcg
- sfmt
- randamu
- gsl
- collection of lcgs
- Lehmer LCG
- lcgs
- better rngs for JavaScript
- d3-random
- gauss-random
- lcg-random
- randy
- randgen
- random.js
- seed-random
- random-js
- seedrandom
- modulo bias
- diehard tests
- dieharder
- RNGTest.jl
- ziggurat
- Matlab's randn
- Gaussian random number generators
- V8's previously poor implementation
- xorshift+
- chrome thread
- thenextweb
- hackaday
- betable post
- estimating pi
- xorshift scratch
- randint
- rc4 encryption
-
Makefiletarget to run test fixtures-
detect script type; e.g.,
R,python,Julia,Golang,C,C++, orJS- can be as simple as filename extension
- of course, may also want to use a shell script to run tests (
.sh) - for files without an extension, assume executable
-
run the script
- may want to
chmodthe script, so do not need to know the system alias for the runner environment (e.g., Julia =>julia) and can leverage internal shebang
- may want to
-
if part of CI, would allow continuous testing against an updated fixture space and would also allow continuous testing that fixture runners work
-
-
should
utils/function-namesupport generator functions?- a separate function?
-
replace
requirestatements of external compute modules -
tests for top-level
tools; e.g., JSDoc templates, etc -
deploy
platocomplexity report to gh-pages- similar to JSDoc source docs
-
clean-up cpp test runners
powm1riemann-zeta
-
type-ofshould check fortoStringTagsupport -
update
utils/tools -
generic
is-finiteutil should include note about how differs from globalisFinite -
create better examples for constants
- e.g., how and why and in what contexts a constant may be used
- e.g.,
float64-max-exponent=> useful for randomly generating numbers across the entire range of possible numbers (sort of, as only 16 decimals => logspace)
-
investigate textlint
-
project stats
-
use ndu to visualize dependency size
-
use disc to visualize browserify output
-
could do something akin to issue stats but locally and/or only including project modules/repos
-
later project stats can be displayed in a separate webpage
- see visualcinnamon.com for inspiration
-
-
FIX: security vulnerability when using
rm -rfin Makefile rules -
Makefiledoes not list top-levelexamples; is this intentional? -
move test fixture runners into sub-directories based on language
- e.g.,
./fixtures/julia/*
- e.g.,
-
add Saucelabs with zuul (?)
-
possible issue for float64-set-high-word
- attempted to debug, but was able to get the right return value; so not sure what happened and why
- NOTE: this seems to be a recurring bug; builds continue to occasionally fail on Windows
- may be useful: browser-repl
-
module to identify equations in README files
- parse
- generate svg
- generate html
- commit
- insert into readme (replace anything already existing)
- similar to Makefile test targets, include a target to filter and selectively update README equations
-
jsdoc HTML template
-
needs a total refactor
-
browserify pipeline
-
see documentation.js and turf
-
-
tailor Mathjax config
-
a project reference manager?
- something akin to bibtex; i.e., a centralized list of references which can be globally referenced (e.g., IEEE754, as the Wikipedia reference, etc)
- an individual module, when created, would get the global link included in the README
- an individual module could override a reference by including a different link, but having the same "tag" in its README
- academic markdown and citations
- scholdoc
- scholarly markdown
- scholarly markdown guide
- R markdown
- Citeproc JSON
- citeproc-js
- bibjson
- multimarkdown
- tidying Markdown reference links
- ...
- separate bib doc(s), which can be readily converted to JSON (e.g., TOML or YAML), thus allowing comments (or maybe even a JSDoc like syntax and something akin to typedefs)
- in Markdown, use citation markup strategy similar to scholarly markdown
- given a Markdown file, create a list of two things: the unique citation identifiers used throughout the text and any citations included in the
linkssection - ignore internal links to other Markdown sections
- if an id is found in bib docs, use that reference
- will want canonical way to reference project modules, which may be tricky, as modules may move, etc; this is important for automating "see also" type sections
- otherwise, leave the existing ref as is
- as part of this, should be able to lint (although
remarkdoes this already) - once finished, save to disk
- does require a separate build step, but can be automated
pre-pushor viawatch - how would we distinguish (in markup) between just wanting a link and wanting a full-blown reference citation? => maybe if within a
referencessection, similar tolinks
-
consider standard-version
-
add to contribution guidelines
-
in all tests (and examples), replace
Math.randomwith a seededlcg- for tests, be sure to record the seed so that failed tests can be debugged
- could have seed be an environment variable, so could be set in CI environment
- module to get a seed; one method used could be to check env var
-
investigate nbind
- could be useful for, say, Boost bindings
-
check if
codecovwill accept multiple coverage reports- would like the ability to distinguish Linux, Windows, and browser coverage reports
- temporary
gittags?
-
make Travis and Appveyor build badges the same dimensions
- currently, Appveyor includes a logo
- could use shields.io
-
consider using svgo to minimize eqn svgs
-
*.cppvs*.ccfor C++ files?- use
*.cppand*.hpp
- use
-
find inspiration for the JS style guide from C++ core guidelines
- include ESLint rules for each (where applicable) guideline
- include references (e.g., perf, fast elements, etc)
-
add code climate badge
-
consider using things like shellcheck for linting files other than JavaScript
-
markdown linting
-
- uses eslint
-
js code in markdown linting
-
-
on src doc build for
gh-pages, also do the same fordevelop; e.g.,/docs/src/develop, which could map tohttp://a.b.c/docs/src/develop- would allow a "preview" alongside current prod
-
investigate whether bit operators would be better for
is-evenandis-odd -
browserify transform to load all "man" pages (e.g., readmes or actual
manpages)- allow help docs to be loaded into a browser for interactive environments
- store in local storage (?) or in-memory
-
load modules into a REPL
-
man pages can be READMES (or not; may require separate
usage.txttailored to REPL env)-
can these be dynamically compiled/transformed at runtime, or will startup time be too slow
-
dynamic would be nice, as then would not need to maintain a separate collection of
mandocs- need some way of determining which modules are exposed in the REPL (could possibly parse the context files a la browserify, find
requirestatements, and build), finding their READMEs, transforming, and then building a hash table for printing in the REPL
- need some way of determining which modules are exposed in the REPL (could possibly parse the context files a la browserify, find
-
-
-
help(blas.copy)(orhelp("blas.dcopy")or? blas.dcopy(like Julia))- with
maps, should be able to use function reference (symbol) as key
- with
-
refs
-
ASCII charts
- should be able to create an isomorphic API with browser charts
- ability to open chart in browser
- sparkly
- jstrace/chart
- bashplotlib
- node-cli-graph
- ASCIIPlots.jl
- asciiplot
- node-clear
- ansi-escapes
- node-charm
- gvz
-
ASCII tables
-
should be able to load a REPL context in a browser
- meaning, should be able to fairly seamlessly have a session in a terminal which is "transferred" to a browser context, including shell history and, say, charts (ASCII to an SVG equivalent)
-
black-screen terminal emulator
-
-
README to man doc (see above)
- cannot directly print a raw README, as will contain markup
- will need to transform into plain text
- writing manual pages
- formatted man page
- ubuntu
- linux
- man-n
-
utility which scans the project for
package.jsonfiles and validates the file using a defined schema- can be used as part of a build step to ensure
package.jsonfiles are properly formatted, valid, and have requisite information
- can be used as part of a build step to ensure
-
build utility to scan all project dirs for camelcase file names
- add to build step, but first requires some modification (e.g., JSDoc generated HTML files)
-
refactor module CLIs to match CLI snippet
-
add the
enginesfield to modulepackage.jsonfiles -
consider adding a license prefix to each file
-
intro how-tos
-
evaluate using inch for src code documentation evaluation
-
gitter
-
investigate xonsh
-
list-modulesMakefile recipe- can be used in conjunction with dep analysis to see which modules are not required by a file, etc.
-
should
etcconfig files be placed in subdirectories?- would require updating Makefile targets
-
list-required-modulesMakefile recipe- should analyze
requiregraph (alabrowserify) to determine dependencies - should work for a single file or a directory
- for directory, may want to dedupe (flat array), a tree result which states which modules require which modules (similar to a node dependency graph), or, for every found module, the deps for that module (array of arrays)
- see automation/package.json item below
- should analyze
-
investigate npm-publish-please and
np(Sindre)- not sure a separate tool is necessary, but may find inspiration
-
REPL startup file, similar to
startup.m- either command-line option or via a REPL config file
- could possibly use
configstore, or something similar, to cache the config
-
to browser (see tools/simple-http-server)
- bpipe
- bcat
- hcat => could be inspiration for piping data to a chart
- scat
- browser-run
- budo
- simple-html-index
- http-server
- ecstatic
- glance
- wzrd
- serve-static
-
cross-platform open browser
-
ability to run examples in a browser => Makefile target
examples-browser- can use
simple-http-server - packify
- can use
-
build step which runs examples in browsers and catches any errors
- could possibly listen on
window.onerrorto trap uncaught exceptions - setup similar to
testling, but without needingTAPoutput; basically, do any errors occur or not - will probably need source maps, otherwise will be difficult to debug
- as a half-way measure, could intercept
consolemethod calls, pipe back to server, and then keep a rolling log cache; when an error is received, could stop running examples and print the cache
- could possibly listen on
-
drop
optionsrequirement fortools/http-server- make the function polymorphic where it may accept just an
optionsarg, arequestListenerarg, or both args
- make the function polymorphic where it may accept just an
-
review CoC for more community oriented policies
- add note about right to delete offending comments, etc; e.g., Chakra core
-
add JSDoc style guide to JavaScript style guide
-
include annotations
// Strict equality: // returns 3.141592653589793 // Approximate equality (use roundn(x) and then strict equal): // returns ~3.14 // Deep equal: // returns {'a':[1,2,3]} // Deep equal (mutation): // x => [ 1, 2, 3, 4, 5 ] // Deep equal: /* returns { "a": [1,2,3], "b": {"beep":"boop"} } */ // Deep approximately equal: /* returns { "a": [~1,~2,~3], "b": {"beep":"boop"} } */ // Wild card continuation: /* returns [ "beep", "boop", ... ] */ // Deep equal (matrices): /* returns x[':'] = [ 0 0 0 0 ] */ // Deep approximately equal (matrices): /* returns mat[':'] = [ ~3.14 0 0 ~3.14 ] */ // Wildcard (matrices): /* returns A[':'] = [...] */ // Deep equal (ndarrays): /* returns x[':,:,0'] = [ 0 0 0 0 ] x[':,0,:'] = [ 0 0 0 0 ] x['0,:,:'] = [ 0 0 0 0 ] */ // Type equality: // returns <boolean> // Type equality: // returns <string[]> // Type equality (instanceof): // returns <RegExp> // Type equality (instanceof): // returns <RangeError> // Type equality instanceof): // returns <Foo> // Wildcard (string): // returns '...' // Wildcard (array): // returns [1,...,10] // Wildcard (object): // returns { "a": ... } // Options: // returns true || false // Options: // returns <Error> || null // Formatted (string) (?): // returns => printf('%f', ?) // Wildcard: // returns ... // Throws: // throws <TypeError> // Output to terminal: // => 'beep' // Insert figure: // => <figure data=?> // Insert figure: // => plot(x, y)var fs = require( 'fs' ); fs.readFile( '/path/to/beep.js', onRead ); function onRead( error, data ) { if ( error ) { throw error; } console.log( data.toString() ); // returns '...' }
$ node ./bin/cli # => '...' # => '...'
$ node ./bin/cli # => e.g., 2016-05-24 08:42.34 Beep boop blah blah. -
examples of modules, functions, constants, regexps, etc.
-
need a convention for client-side and server-side only examples
- could use
@browseronlyand@nodejsonlyspecial annotations, akin to@privateand@public
- could use
-
-
@stdlib/regexp/extname,*/dirnameexport circular references; prob best to clone the regexp and bind to exported object- requires porting
utils-copy
- requires porting
-
for browser REPL, use a virtual filesystem
fsand other filesystem methods should remain the same- difference is that files are not written to disk, but to, say, IndexedDB
- would allow for an "isomorphic" REPL and the ability to run all tests and examples on both the server and client
- filer
- os.js
- filesystem API
- emscripten
- idb.filesystem.js
- filer.js
- browserFS
- browser-sync-stream
-
Add Markdown style guide, including notes about comment annotations, equations, etc.
-
Add note about ES2015 features in JS style guide
- Backwards compatibility is important
- Only use if can polyfill
- Must provide a polyfill
- No compile steps
-
Function matrix across different environments (equivalents)
- matlab
- python
- julia
- go
- r
-
Add type specs to
@stdlib/types/folderabstract-ndarrayabstract-complex- etc.
-
Add git hooks to Makefile
- on pull, check deps to see if any missing, removed, or out-of-date; if so, clear and reinstall (?)
- will prob want a way to undo setting of hooks (i.e., a reset)
- intro to git hooks
- git pre-push
-
Python linting
- pylint
- pycodestyle
- pyflakes
- prob combo of
pylintandpycodestyle
-
R linting
- lintr: no apparent CLI
-
Julia linting
- lint.jl: no apparent CLI
-
doc viewer
- modify
SimpleHTTPServerto only serve READMEs converted to HTML - for equations, instead of SVG, use MathJax
- could also insert live figures (main, margin)
- an extension would be to make the code samples interactive
- gateway to running benchmarks, tests, and examples in-browser
- how would we annotate for reactive documents? inline comments? spans?
- how would we annotate asides/notes? maybe not necessary for standard module READMEs. Possibly via spans.
- modify
-
remark-insert-svg-equation plugin
-
remark-insert-svg-figure plugin
- requires codifying a comment markup syntax, which can take inspiration from how equations are documented in Markdown
-
make inittarget- can setup
makie - if have
make list-cli-modules, can usenpm linkto install cli utils - setup git hooks
- install deps
- run tests, test-coverage, benchmarks, lint, etc
- can setup
-
add a
run.shfile intest/fixtures, which would provide a common entry point for running test fixture runners. Currently, need to know the lang to run. And while the name is the samerunner.*, the procedure for running the scripts is not. A common entry point would abstract away the differences. -
JS style guide
- update rule re: parentheses in arithmetic ops
- add note about ordering vars based on character length
- declare functions using function declarations; also include another note about anon functions
- use strict section should add notes re: node vs browser
- use self section should include note about dynamic scoping of
thisvariable - status code example has a bug (send should be status)
- examples should use native built-ins, rather than implicitly rely on modules such as
requestandexpress - comments: "compared to multi-line"
- all style guide code should be runnable
- add note about module order (external before internal, etc)
- add note about not using
/**unless JSDoc - add note that module description should propose action (e.g., "Test ..."), while function descriptions should be in active tense (e.g., "Tests ...")
- add note about file naming conventions (no uppercase, use of snake-case) => need to put in separate style-guide, as not JS specific
- see #79
- add rule to JavaScript style guide about not using built-in functions, especially math functions, linking to various accuracy issues and highlighting that browsers often sacrifice accuracy for speed
- add rules about not using
Number,String, andBooleanconstructors - add rule about using source URL directives in eval'd code
- add rule about including decimals when working with numbers; e.g.,
3.0 - principal of least abstraction => part of "The Stdlib Way" (inspired by The Unix Way)
-
README link to "live" (e.g., gh-pages) docs (badge)
- may also apply in reverse, going from "live" to source
-
check that JSDoc annotations include
@throws -
include READMEs in namespace dirs
-
need a convention for defining README examples which are for illustration purposes only and not meant to be run
- e.g., an example which is path dependent and cannot be known ahead of time, as it depends on user environment, etc.
-
proposal: add
stdlibfield topackage.json- allowing setting whether a module is browser-only, nodejs-only, etc and whether a module is suitable for a REPL context, etc.
-
proposal: add
@syncand@asyncJSDoc annotations to document synchronous and asynchronous functions, respectively -
investigate
bpkgas a package manager forbashscripts- could be useful for test runners, etc.
-
investigate starscope
-
review
- datasets
- math/base/blas
- math/base/random
- math/base/special
- math/base/tools
- math/base/utils
- math/constants
- math/generics/statistics
- math/generics/utils
- namespace
- plot
- regexp
- repl
- streams
- tools
- utils
-
analyzing the dependency network => should be able to perform a similar analysis internally
-
sine browser example
- could do something similar for other trigonometric functions
-
benchmarking
- chuhai
- benchmark.js
- substack benchmark module
- matcha
-
stability badges
- may be good to have stability badges for methods / modules in order to indicate if a particular API is experimental, stable, locked, or otherwise
-
makie(andmake) target to initialize a module (copy files from snippets to a destination directory) -
Add a
FAQ.mdand link to it in the issues template- e.g., => Promise support? No.
-
rename
docsdirectory todoc? -
more datasets => some are not that interesting; others possibly
-
write own
deep-equalalgo- when complete, replace any use of
chaifor testing
- when complete, replace any use of
-
evaluate bithound
-
utils/copy
- should
preventExtensions,seal, andfreezebe extended toobjectsbeyondObject,Array, and class instances? WeakMapsupport (?) => not convinced this is viable due to weakly held references; i.e., getting a list ofkeysrequires maintaining a separate list.WeakSetsupport (?) => seeWeakMapaboveSymbolsupport => requires the ability to get primitive value- structured-clone-algorithm
ArrayBuffersupportBlobsupportFileListsupportImageDatasupportImageBitmapsupportFilesupport
- should
-
research pull-streams
-
see makefile for the frontend for possible inspiration for frontend tasks
-
should
float64-signbitreturn aboolean(like Julia) or a1or0? -
makerecipe for checking dep licenses- read-package-tree
- licensee.js
- make part of
pre-pushgit hook - as part of public docs, can generate a list of deps and their licenses; can do the same for
stdlib/lib/**modules, so that all licenses for the individual mods/deps can be viewed together
-
investigate test-all-versions
-
rr: record and replay framework
-
Investigate the concept of markembed for embedding content in Markdown files
-
Use cases for
remarkplugins:- reference management
- conversion to RST
- conversion to HTML
- figure (static) insertion (similar to equations)
- appending/removing sections en masse
-
GitHub issues as a blog
-
reviews
- is-empty-array => should this just be a method off of
isArray?
- is-empty-array => should this just be a method off of
-
update the
test-istanbultarget to run each test individually, outputlcov.infoto areportsdir, concatenate alllcovresults, and then generate a HTML report. See istanbul.- for CI, push concatenated
lcovto coverage service
- for CI, push concatenated
-
adventures / workshoppers
-
build script which reruns the latest commit on
developeach day => helps ensure, even in the absence of fresh commits, that we are testing the environment, etc. Would need to be a cron job triggered from a remotely hosted service. -
plot svg components should have factory methods
-
Annotations overlay,
xvalues with text
-
Evaluate check-build
-
Evaluate rewind
-
when browserifying
@stdlib/plotshould ignoreelectron-prebuilt!!!!- may want to have a separate
viewmethod entirely; one that is catered to browser context
- may want to have a separate
-
see webtorrent-desktop for electron inspiration
-
constant function? similar to identity function but as a factory?
-
svg components: move
methods/render.jstorender/index.js -
sparkline rug plot
-
review steam and leaf unicode plot
-
add unicode sparklines to namespace => requires abstract interface
-
refactor plot electron renderer
-
ability to "plot" tables?
-
Should plot
autoRenderbe "opt-in", rather than "opt-out"? -
remarkjs for Markdown slide shows for workshop slides?
-
Visual intro to machine learning
-
Refactor
makeworkshops recipes -
mbtaviz and Github org
-
add FAQ with answers to things like, "Why JavaScript?"
-
Investigate hyperterm
-
math-input and mathquill
-
For Nightingale's rose dataset, generate an SVG figure with code, rather than use a static image
-
randn
-
abstract-ndarray
-
terminal sparklines
-
toJSON => needs chart spec
-
colors
- ansi-256-colors
- would require escaping to work in the browser
- ansi_up
- ansi-to-html
- but could also detect env and use ansi escape when in terminal mode and use HTML elsewhere (?) => no, too brittle.
- maybe this should just be a user concern
-
support ndarrays
- dimension, only 1d?
-
-
basic stream utilities
- make
utils/debuga standard stream (clinameoption; does this module need split and join?) - split => tests
- join => example
- map!!!!!!
- cat
- rand
- from-array
- duplex-json-stream
- related => into-stream
- concat-stream => this is essentially an end sink stream
- pump (?)
- end-of-stream
- something akin to stream-combiner2
- duplexer2
- mississippi
to-consoleor maybeto-log(provide own logger, with default being console using util-inspect) => write stream which writes each chunk to console (either normal or object mode); if object mode, use util-inspect and allow setting of depthdebugas a transform stream => could provide name and then toggle debugging based on name!- tap-stream and inspect-stream; see also sculpt#tap
- guide to node streams
- vstream => instrumented streams
- through2-concurrent
- log
- ndjson
- make
-
kmeans/dbscan
-
blas routines
-
all built-in
Mathmethods -
kde
-
hist
-
csv/tsv/dsv
- d3-dsv
- node-csv
- csv-parse
- csv-spectrum
- csv-parser
- paratext
- read-csv (file) vs from-csv (stream) vs parse-csv (string or buffer) => some overlap between these
-
simple server
- plot cli (requires
split) - rects
- x
- y
- orientation: vert, horz
- width calc'd via
x[i+1]-x[i]
- xAxis, yAxis -> true/false; whether to create or not
- validation; instead of a sep validator folder, when providing an object, just set the props to validate; also allows moving etc files to prop folders
- line -> area
- readme
- xExtendedTicks?
- include links to survey in main README
- as a REPL exercise, simulation (randn, hist, plot normal pdf)
-
is-finite (generic)
- may need to describe how different from built-in
-
is-infinite (generic)
-
is-nan (generic)
-
is-even (generic)
-
is-odd (generic)
-
incrspace
-
linspace, logspace, incrspace as generators (?)
- should support option to return data of a specified type; e.g.,
float32, etc. - returned value should be compliant with
abstract-ndarray
- should support option to return data of a specified type; e.g.,
-
is-browser
-
is-node
-
is-worker
-
blas routines
-
is-plain-object (?)
-
is-object
-
svg2png without promises and cleaner
-
utils-deep-get
-
utils-deep-set
-
stream module (e.g., flow-split, flow-join, flow-mean) => /utils /math etc
-
number theory fcns (see starred repo)
-
str manip utils
-
Avogadro's number
-
round to number of sig figs
-
testing for
sinlnexpsqrttan
-
- lookup
-
- cppreference
- how would the
FLOAT_RADIXbe supplied?
-
int32-to-uint32
-
fast pow
- may need to research
-
port
upsearchtofs- requires
is-*modules
- requires
-
is-electron
-
global var detection
-
feature detection utils
-
port
https-server -
pipe viewer
-
downloads-folder along with
tmpdir,homedir, etc -
next-tick
-
linux utility equivalents
- cat, mv, rm, ls, touch, etc.
- allow for swapping out when using browser virtual filesystem, allowing isomorphic apps (although, filesystem data would prob not be copied to browser)
-
- break into separate mods
is-pdf-file, etc.
- break into separate mods
-
move
is-urimain regex to separate module? Would allow for capturing parts of the scheme. Needs evaluating. -
kmeansas anEventEmitter -
bring
debugin-house -
utility to convert R
DESCRIPTIONfiles to JSON => would streamline getting test fixture R dependencies -
accumulators
-
incrmkurtosis (windowed)
-
incrmskewness (windowed)
-
buffer-indexof and buffer-split => see issues
-
base math
swap(assume array-like) and genericsswap(check for array-like) -
escape-regexp -
hex to ascii
-
arc4 cipher as a stream
-
float64-to-hex -
object inspector; also, Node.js
utils.inspect -
random/uuid; various versions -
custom error classes
-
units
-
Interesting mod => potrace
-
Bugs in the built-in
Mathobject:- V8 sin/cos
- V8 trig fcns
- V8 not obeying IEEE 754-2008
- Mozilla discussion on V8 sin/cos
- V8 replaced a trig lookup table and then computes
tanassin/cos - Browser math accuracy issues
- ES6 accuracy of special functions
- V8
expaccuracy - spreadsheet showing trig results across browsers
- V8
powaccuracy - Mozilla
powaccumulation of errors - V8 hyperbolic trig accuracy
- TC39 testing of Math built-ins
- ES6 shim accuracy issues
- V8 Math.random
- V8 fixes Math.random
- V8 finally returns pseudorandom numbers
- Webkit switched to weak PRNG for speed
- V8 deopts if Math.floor provided -0
- V8 deopts if Math.ceil provided 0
- V8 Math.round returns wrong results
- Square root without division
- Reciproot Algorithm: correctly rounded?
- reciproot implementation
- glibc sqrt
- IPython: A System for Interactive Scientific Computing
- IPython: Sloan Grant
-
when testing numeric code, would be interesting to test against multiple platforms (ala test fixtures); e.g., Julia, Python, R, Go, Boost, etc.
-
ability to run against multiple versions of alternative platforms
-
compare results for each alternative platform version
- would allow flagging regressions or improvements in the implementations of other platforms
-
would be part of a comprehensive CI before publishing
- suppose could also be done at the individual module level during separation
-
generate plots showing results across all platforms
-
-
a tool which reports which paths are not imported by a file
- use case is ensuring that modules which should be exported by an aggregate file are exported
-
for JSDoc docs, ability to run benchmarks for any given method
-
UI button to run benchmark
-
per method/module/etc (similar to having a button to view source)
-
would allow users to test the relatively speed of pathways within a function; e.g., for
erf, how fast do particular input values compare to other input values?- note: naive benchmarks would only provide a single value =>
erf(10); but this approach is flawed. Need to cover a range of values; otherwise, you could be testing a special case! - would allow another avenue for crowdsourcing benchmarks
- note: naive benchmarks would only provide a single value =>
-
-
if every module wrapped as a stream, then, via linking, terminal becomes a REPL
-
ability to invoke with arg
$ erf 5 # => <number> $ erf 5 19 13 1 # => <number>\n<number>\n... (could have option to specify delimiter)
-
ability to pipe
$ cat x.txt | erf # => ...
-
may want to prefix with
stdlib-<fcn>to avoid conflicts with built-ins- tools script could crawl the project and auto create aliases and links
-
-
for modules like generic stats functions which may accept a variety of inputs requiring tailored implementations, instead of dynamic code generation, another possibility is to dynamically compile static code and write to disk
- would allow static analysis
- easier debugging, as can set breakpoints, etc. => some inspectors support using a pragma to allow debugging
eval'd code, thus debugging is possible as is; nevertheless, visual inspection is easier if non-compiled - would allow for the use of JSDoc annotations, not possible when using dynamic code generation => can, but akin to documenting a "virtual" function
- would lead, however, to a much larger codebase
- in
make init, could configure to "watch" and dynamically recompile generated files - to discover and identify compile targets, could add a "stdlib" field to a module's
package.jsonwith a configuration setting relevant to the type of compilation to perform (could lead to a proliferation of tailored settings, which is not necessarily a good thing)
Will need a tools directory in individual repositories to
-
house
Makefiledependencies -
include CI scripts
-
house doc tools
- JSDoc templates
- JSDoc typedefs
-
Populate individual module contributors automatically by extracting author info from
gitcommits?-
main author could be populated based on highest number of commits? most changes? responsible for most lines of code?
- most lines of code may be best heuristic as likely that the author is thus most knowledgeable/owns the most code
- over time the main author could change...is this a problem? => prob not, as the new author should be most familiar with the relevant code
-
-
populate scripts similarly for all modules
-
augment
keywordswith universal projectkeywords -
can add
testlingconfig, if needed -
populate git urls based on destination repo
-
should be able to scan module code to determine dev and main deps and add them to the
package.jsonbased on what is installed in the main repo-
- uses
node-detective
- uses
-
- apparently relies on outdated mods, but may still work
-
- uses more recent
acornversion
- uses more recent
-
if a dependency is already included in the
package.json, keep that dependency, thus allowing local override of a dependency- how will that work in terms of dep install within the context of the larger project?
- module-deps
-
-
can updating the version be automated?
- Read
licensefield inpackage.jsonand generate the appropriate license
-
Ideal vs reality
-
@stdmath/base/special/erf
- @stdmath/base-special-erf
-
@stdmath/generics/special/erf
- @stdmath/generics-special-erf
-
-
Under the @stdlib scope...
- @stdlib/math-base-special-erf
- @stdlib/math-base-core-float64-to-binary-string
-
References on root
global
Sample project structure.
|-stdlib |---lib |-----datasets |-------anscombes-quartet |-----math |-------base |---------blas |-----------scal |---------complex |-----------acos |-----------sin |---------dist |-----------norm |-------------cdf |-------------pdf |-----------poisson |---------random |-----------lcg |---------special |-----------erf |-----------erfc |-----------sin |---------tools |-----------evalpoly |-----------evalrational |---------utils |-----------is-even |-----------is-integer |-----------is-number |-----------is-odd |-------constants |---------e |---------pi |---------two-pi |-------fastmath |---------special |-----------cos |-----------sin |-------generics |---------core |-----------add |-----------mult |-----------subtract |-----------sum |---------dist |-----------norm |-----------poisson |---------linalg |---------random |-----------lcg |---------special |-----------erf |-----------erfc |---------statistics |-----------mean |-----------stdev |-----------variance |-----namespace |-----regexp |-------eol |-------regexp |-----repl |-----streams |-------math |---------mean |---------stdev |-------utils |---------split |---------join |-----tools |-----types |-------array |-------complex |-------dataframe |-------matrix |-------ndarray |-----utils |-------copy |-------deep-get |-------deep-set |-------error-reviver |-------error-to-json |-------is-array-like |-------is-function |-------left-pad-string |-------merge |-------pad-string |-------pluck |-------repeat-string |-------right-pad-string