-
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 (!) => that is too late, as module would already be deployed
-
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 (?)
-
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
-
Deploy a webhook server to aggregate 3rd party tools notifications (?)
- Travis CI
- AppVeyor
- Codecov
- Code Climate
- Circle CI
- GitHub
-
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
-
css linting and stylefmt
-
list of style guidelines
-
-
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
-
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
-
link gitter to slack (prob requires a hook server)
-
investigate xonsh
-
list-modulesMakefile recipe- can be used in conjunction with dep analysis to see which modules are not required by a file, etc; e.g., which modules are not included in a namespace.
-
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
- st
-
cross-platform open browser
-
ability to run examples in a browser => Makefile target
examples-browser- can use
simple-http-server(or evendisposable-http-server) - packify
- option to stream to multiple browsers (tabs) in parallel (akin to parallel builds)
- 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
-
bring
globin-house -
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
- 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, as margin notes)
- 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.sh(build.sh?) file 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
- 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
- crypto
- [-] datasets
- fs
- math/base/blas
- math/base/dist
- math/base/random
- math/base/special
- math/base/tools
- math/base/utils
- math/constants
- math/generics/statistics
- math/generics/utils
- math/ml
- namespace
- net
- plot
- regexp
- repl
- [-] streams
- [-] string
- [-] tools
- utils
-
profiling
- v8-profiler
- node-inspector
- node-webkit-agent
- node-stackvis
- devtool (blog post)
- --prof-process
- v8-profiling
- chrome://tracing/
- v8 profiler docs
- v8 perf
- v8 performance profiling
- node-tick
- node-tick-processor
- v8 profiling
makerecipe- bring the V8 log processor in-house (tools, wiki, outfile, node-tick)
-
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
package.jsonfield =>"stdlib":{"stability":"experimental"}
-
makie(andmake) target to initialize a module (copy files from snippets to a destination directory) -
use signed commits
-
string similarity measures?
-
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? -
licenses utilities
- licensee.js
- license-checker
- .licenserc
- licenserc.js
- licensing
- licenses
- licensecheck
- nlf
- license-list
- 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 - recipe to plot license distribution as a bar plot (?) => could be part of public facing docs
-
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? =>isArray.isEmptyArray?
- is-empty-array => should this just be a method off of
-
include a creditcard validation module?
-
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. (note: this means that themasterbranch should never run the dep check to ensure up-to-date dependencies; otherwise,mastercould fail for non-test related reasons)- for dep check, build script which acts similar to greenkeeper => creates/updates branch, if check deps fails, auto-installs, runs full build (tests, examples, etc), and checks if fails.
-
plot svg components should have factory methods
-
investigate nfty for sending desktop notifications for long-running commands (e.g.,
Makefilerecipes => would need to check if CI environment) -
Annotations overlay,
xvalues with text
-
Evaluate check-build
-
Evaluate rewind
-
when browserifying
@stdlib/plotshould ignoreelectron!!!!- 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 stem 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
-
create separate discrete and continuous distribution namespaces (at same level as general
distnamespace) -
Investigate hyperterm
-
math-input and mathquill
-
For Nightingale's rose dataset, generate an SVG figure with code, rather than use a static image
-
bats: bash automated testing; could also be useful for testing CLI scripts
-
investigate using now for deploying demos requiring a Node.js server
-
Google trends data => note, this needs to be under an appropriate license before being used (currently unlicensed)
-
investigate iron-node
-
files containing
new Buffershouldvar Buffer = require( 'buffer' ).Buffer. Note that this will prob require overruling a lint rule against redefining globals. -
See casual for dataset inspiration
-
GitHub issues Gantt diagrams
-
gh-board - kaban board using GitHub issues
-
investigate docstrings: useful or not?
-
For running electron tests, see atom-test-runner
-
Add dev guide for developing on windows
-
add a Makefile (and
makie) recipe to show disk usage for a given directory -
see ava.js for supporting docs (e.g., github templates, build scripts, etc) inspiration
-
create a bot which tails NPM for math related modules
-
bot which tails RSS feeds of select math repos and each day retrieves
- number of stars/watchers
- number of issues (total, open, closed)
- number of commits
- number of contributors
-
investigate pkgfiles as a dev tool to determine which files will be published to npm
-
investigate slow-deps as a dev tool to analyze dependency install times
-
consider including governance docs
-
investigate jailed for running JS code in sandbox
-
Non-node platform detection?
-
may be worth investigating klipse for live code editing
-
update tools/scripts to latest
remark-lintAPI for linting Markdown files -
utils, e.g.,
is-string, need more rigorous testing, especially for things likeisPrimitiveStringArray -
processas astdlibutil (or some other namespaced) module (or maybe, likecwd, the individual props as mods) -
Add tool to detect whether a function can be optimized => note that this is Node.js specific
-
GNU parallel for distributed tasks
-
investigate vm2 for sandboxing
-
For
master,develop, and PRs intomasteranddevelop, run full build sequence; for all other branches, is it necessary to run full sequence or just, say, tests? or maybe for other branches, only run tests, examples, benchmarks for files which changed (similar togitpush hook)? -
Linter for dirnames (akin to filenames)?
-
convert filename linter to use plugin architecture?
-
generate random strings based on a regular expression
-
timed tape tests...useful?
-
Consider setting up jenkins for CI (notably Windows)
-
investigate mancy
-
semver regex
-
Could this tutorial (and associated tutorials) be made interactive?
-
Image datasets
-
Consider replacing
testlingwith tape-run -
ccount but generalized to array-like objects
-
print-object-as-tree utility
-
Consider something likes credits
-
NLP data (note: ambiguous licensing)
-
Fix SOTU raw text where
\&mash;was converted to a single hyphen-
-
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.,
-
workshop Moby Dick corpus
-
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
-
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
-
sort methods, both numeric and general
-
units
-
Interesting mod => potrace
- Square root without division
- Reciproot Algorithm: correctly rounded?
- reciproot implementation
- glibc sqrt
- IPython: A System for Interactive Scientific Computing
- IPython: Sloan Grant
- Why not use core streams
- Why JAVA floating-point implementation is bad for everyone
-
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