708 karma · joined December 6, 2013
Not to get too into the weeds, but it sounds like you would fall onto the side of the spectrum where Ron Paul is also seen as an "apologist" of sorts. I know several libertarians who also fall into this camp, and would view Ron Paul as "better-than-Rand-but-no-Rothbard" type.
For what it's worth I respect the libertarian point of view and find it fascinating, despite disagreeing with some of the basic premises (but that's where the fun debates are).
Obviously, this only works in cases where enforcing a contract is actually worthwhile (think $100k/yr service, not $5/mo service).
> Format in [lon, lat], note, the order of lon/lat here in order to conform with GeoJSON.
.. the data example below is not actually geojson. See the spec:
Is this actually illegal in any state, and is it actually enforced in any state? I would bet that 99% of people who have the title "Software Engineer" have not taken those exams, and most have a CS degree.
1. super easy publishing 2. A package for practically everything you can think of and if not, see #1 3. Most of the market share for its particular language so that you can be reasonably sure a particular module maintainer has an up to date package
Pretty hilarious reading this now, considering his contributions to version control in the past several years. I am not too familiar with all of the backstory, but Linus' creation of git seems like one of the most extreme cases of "Not Invented Here Syndrome" since... well Linux itself (half-joking).
I certainly won't complain when someone gets so frustrated with the current tool-o-the-week that they go out an build something superior.
1. You want to add optional results. See underscore's each function that returns an object for the current iteration, then an optional iterator value in addition, which you sometimes need.
2. There are many functional patterns that utilize callbacks where you want to pass functions in as parameters (which could do anything, including accessing the file system or waiting on an external call). Underscore also has loads of examples where this is the case, despite being a sync library.
3. This is probably the least valid reason, but sometimes you do not know going in whether or not a function you are writing will be async. If you create a sync interface, it will need to be changed if the function needs to be async in the future, or if it needs to pass additional results. In my experience the latter is not terribly uncommon. The former is pretty unlikely in library code, but I could see it happening in application code regularly. Breaking apis is not fun for anyone.
2) Same question as above, but for processing times. Some algos are aimed at operating on the fly and might take ~1 second or less. Others (many that I deal with quite often), might run for days, or even weeks. What sort of processes are you optimizing for, and are long running procs on the radar?
It is an interesting idea, but there is a high bar when competing against my language's package manager, and the 10s of thousands of "algorithms" already out there. Best of luck!
It is always a red flag for me when someone starts arguing for less choice, more monolithic frameworks, and the inevitable lock in that comes along with having only one or two options.
My library is definitely not a topology library. I tend to describe it as a geospatial processing engine. My first comment was really only meant to speak to some overlap I noticed with the topology described in the article, and to convey my deep respect for the people who have a more full understanding of the low level mathematics involved (which it sounds like you might possess).
- basic topology like detecting whether or not a point lies within a complex polygon
- topological morphology, such as smoothing a line or polygon while maintaining boundaries (this is probably the most common definition in the GIS world)
- topological interpolation, such as estimating z values over a 3d mesh[1][2] (there are a number of methodologies here, and this represents probably the most interesting intersection of topology and statistics)
Also note that turf is geared towards GIS, but most of the underlying operations are not GIS specific and apply to geometry more generally. You will find many of the same algorithms in applications like game engines, for example.
[1] http://en.wikipedia.org/wiki/Kriging [2] http://en.wikipedia.org/wiki/Contour_line
Node is a general purpose language that can be used for all kinds of things. I switched from Python to node.js about a year ago for exactly the sort of tasks you are describing and could not be happier. Right off the bat I had huge speed improvements.
Also, io is one of the biggest issues with web based data analysis, so it really should not be underestimated. I can do more with less with node than I could with Python. This is especially true with long running tasks where a 1 minute processing time vs a 20 minute processing time might mean you need 1/20th the number of servers in a cluster ($$$).
Of course, this could be a pretty good argument for something even faster/lower level, but for me, node.js struck a good balance between performance and ease of development/ecosystem. As usual, YMMV.
One last point. The language you choose cannot always be the best language for every task you need. Typically you choose a stack based on the most common/important tasks in your infrastructure, then for less common tasks you just make it work with what the chosen language provides. In this case node.js does not need to be the best solution for ML, it just needs to check the box for being possible, so that devs who needed node.js for other reasons now have the ability to add ML to their toolbox.
For starters, node.js, which makes most of the arguments regarding server/client moot.
Secondly, there are many client side applications for these types of algorithms as well. K-means clustering, for example, is already used by many mapping libraries to group together large numbers of points[1].
I personally use neural networks and affinity propagation in many of my applications for predictive analysis. This does not have to only be educational, or of a 'toy' nature.
[1] http://danzel.github.io/Leaflet.markercluster/example/marker...
I would say that the most stable codebase would be a static one with lots of tests, but I would also guess that this would be the slowest to develop, and would be the most difficult to implement in a real world team of developers.
I know most of us would balk at a huge codebase with zero tests, but it happens all the time. I would definitely prefer a dynamic code base in which I could get my team to write decent tests, but give up type safety, than to have type safety at the cost of decent tests.
I use trello extensively. I always have an "In Progress" list and an "On Bat" list. "On Bat" maxes at 5 items, "In Progress" always has two items per person on the board (and it should usually only be one item).