"The BMW 5 Series will reach dealerships February 11, 2017. The M550i xDrive and 530e variants will go on sale in the spring."
- Dieter Zetsche
Board of Directors of Daimler AG and Head of Mercedes-Benz Cars
BMW released pricing details for the all-new 2017 BMW 5 Series. With the entry fee now starting at a little more than $50,000, you can now call it the 50K Series if so inclined.
A standard 2017 BMW 530i sedan in your choice of Alpine White or Jet Black will sell for $51,200. The 530i xDrive model starts at $53,500, the BMW 540i sedan at $56,450, and the BMW 540i xDrive will set you back $58,750.
BMW's $995 destination and handling fee is not included in the price, but there are a few goodies thrown in as standard, the highlight being an anthracite (coal) headliner.
Other standard equipment for the sport sedan includes adaptive LED headlights, fatigue and focus alert, a moonroof and a set of 18-inch double-spoke wheels with all-season run-flat tires.
Standard sport seats are 16-way adjustable and upholstery choices are Sensa Tec, Black Sensa Tec, or Canberra Beige with Black Sensa Tec. Leather upholstery adds $1,450 to $2,450 to the base price.
BMW’s seventh-generation 5 Series sheds up to 137 pounds by using a combination of aluminum, magnesium, and high-strength steel. Performance has been notched up a bit as well, with the 540i’s twin-turbo 3.0-liter six-cylinder engine receiving a 35 horsepower bump, bringing the total up to 335 hp.
BMW's $995 destination and handling fee is not included in the price, but there are a few goodies thrown in as standard, the highlight being an anthracite (coal) headliner.
Other standard equipment for the sport sedan includes adaptive LED headlights, fatigue and focus alert, a moonroof and a set of 18-inch double-spoke wheels with all-season run-flat tires.
Standard sport seats are 16-way adjustable and upholstery choices are Sensa Tec, Black Sensa Tec, or Canberra Beige with Black Sensa Tec. Leather upholstery adds $1,450 to $2,450 to the base price.
BMW’s seventh-generation 5 Series sheds up to 137 pounds by using a combination of aluminum, magnesium, and high-strength steel. Performance has been notched up a bit as well, with the 540i’s twin-turbo 3.0-liter six-cylinder engine receiving a 35 horsepower bump, bringing the total up to 335 hp.
November 2016’s U.S. auto sales were beating Wall Street analysts’ expectations as the numbers flowed in Thursday. Black Friday deals mean this may come at the cost of net profit, with Ford Motor Company, for example, reporting that per-unit incentives were up $570 compared with November 2015. Anecdotally, I saw a local dealer advertise a new Chevrolet Trax for just $57 per month, yesterday.
Such deals will affect bottom lines, though there’s no need to worry about Detroit Three or import profitability so long as they keep moving parking lots-full of well-equipped pickup trucks and premium crossovers.
Bob Carter, senior vice president for Toyota Motor Sales’ automotive operations (Toyota and Lexus) prognosticated at the automaker’s annual media holiday party in Detroit. Point is, he said, while calendar 2016 sales may be a bit lower, or possibly even a bit higher than CY15’s record of 17.5 million, it’s best to maintain a high, steady level for a few years. Carter predicted CY16 will end close to CY15’s level.
Meanwhile, just as in the previous November, Toyota Motor Sales edged Ford Motor Company by 71 vehicles for second-place last month, though Ford had a greater increase.
BMW’s seventh-generation 5 Series sheds up to 137 pounds by using a combination of aluminum, magnesium, and high-strength steel.
Performance has been notched up a bit as well, with the 540i’s twin-turbo 3.0-liter six-cylinder engine receiving a 35 horsepower bump, bringing the total up to 335 hp.
BMW’s seventh-generation 5 Series sheds up to 137 pounds by using a combination of aluminum, magnesium, and high-strength steel.
Performance has been notched up a bit as well, with the 540i’s twin-turbo 3.0-liter six-cylinder engine receiving a 35 horsepower bump, bringing the total up to 335 hp.
Such deals will affect bottom lines, though there’s no need to worry about Detroit Three or import profitability so long as they keep moving parking lots-full of well-equipped pickup trucks and premium crossovers.
Bob Carter, senior vice president for Toyota Motor Sales’ automotive operations (Toyota and Lexus) prognosticated at the automaker’s annual media holiday party in Detroit. Point is, he said, while calendar 2016 sales may be a bit lower, or possibly even a bit higher than CY15’s record of 17.5 million, it’s best to maintain a high, steady level for a few years. Carter predicted CY16 will end close to CY15’s level.
Meanwhile, just as in the previous November, Toyota Motor Sales edged Ford Motor Company by 71 vehicles for second-place last month, though Ford had a greater increase.
BMW’s seventh-generation 5 Series sheds up to 137 pounds by using a combination of aluminum, magnesium, and high-strength steel.
Performance has been notched up a bit as well, with the 540i’s twin-turbo 3.0-liter six-cylinder engine receiving a 35 horsepower bump, bringing the total up to 335 hp.
Includes Open Bar All Night and access to the entire venue, complimentary party favors and champagne toast!
‘This is the next generation Aventador of new technological and performance milestones in super sports car development.’
- Stefano Domenicali
CEO, Lamborghini
That means this car can now do 62mph in just 2.9sec, on the way to a top speed of 217mph. But the real advance is in the bodywork.
The carbonfibre monocoque has revised bodywork, from the front bumper to the rear wing. Downforce on the nose is now up a huge 130%. The new rear wing, which has three positions, can increase downforce by 50%. And drag has been reduced by a mind-boggling 400%.
Drive goes to all four wheels through a seven-speed gearbox. The all-wheel drive has been adjusted so now you can put 90% of the torque to the rear wheels, which should lead to even more oversteer, should you be able to cope with.
New for the first time is four-wheel steering, which is claimed to improve stability at high speed and manoeuvrability at lower speeds. The rear suspension has been tweaked to accommodate this new system. There is also a new exhaust system, which is 20% and doubtless 20% louder. This is hardly the car for a snowflake or someone whose motto is ‘No I insist, after you’.
That means this car can now do 62mph in just 2.9sec, on the way to a top speed of 217mph. But the real advance is in the bodywork.
The carbonfibre monocoque has revised bodywork, from the front bumper to the rear wing. Downforce on the nose is now up a huge 130%. The new rear wing, which has three positions, can increase downforce by 50%. And drag has been reduced by a mind-boggling 400%.
Drive goes to all four wheels through a seven-speed gearbox. The all-wheel drive has been adjusted so now you can put 90% of the torque to the rear wheels, which should lead to even more oversteer, should you be able to cope with.
New for the first time is four-wheel steering, which is claimed to improve stability at high speed and manoeuvrability at lower speeds. The rear suspension has been tweaked to accommodate this new system.
There is also a new exhaust system, which is 20% and doubtless 20% louder. This is hardly the car for a snowflake or someone whose motto is ‘No I insist, after you’.
Delicately styled centre-lock wheels from the limited-edition Aventador SV are available as an option alongside naked carbon fibre bodywork and suitably lurid paint.
Customers lucky enough to buy the new Aventador will benefit from an improved all-digital dashboard display and a widescreen stereo readout with Apple CarPlay connectivity.
Delicately styled centre-lock wheels from the limited-edition Aventador SV are available as an option alongside naked carbon fibre bodywork and suitably lurid paint.
www.ford.com
The most expensive cars in the world are about so much more than transportation. These rolling art pieces encapsulate the priorities of the one percent, and in that universe, flamboyance and swagger take precedence over practicality and efficiency. Lifestyle criticisms aside, these are truly mind-boggling machines, and we’d like to count down our favorites for you here.
For the sake of clarity, we’re categorizing recently made, road-legal production vehicles only — limited runs notwithstanding — and we’re leaving out classic cars sold at auction. We’re also limiting the list to one entrant per nameplate, so don’t expect 10 different iterations of the same Bugatti Veyron.
Koenigsegg makes its first appearance on our list with the CCXR Trevita, and it does so as the most expensive street-legal production car in the world. Why so much coin? With no exaggeration, the car is literally coated in diamonds.
For the Trevita, the Swedish manufacturer developed a new exterior finish called the Koenigsegg Proprietary Diamond Weave, which involves coating carbon fibers with a diamond dust-impregnated resin.
Underneath the lustrous finish lies a 4.8-liter, dual-supercharged V8 with a total output of 1,004 horsepower and 797 pound-feet of torque, which means it should have little to no trouble overtaking semis on the freeway.
Poison. That’s the name Lamborghini chose for the modified Aventador you see above — translated from Italian of course — built to celebrate the automaker’s 50th birthday. We can’t speak for the company’s motivations, but the name is fitting for a vehicle that looks so positively deadly, so undeniably venomous.
The car is absolutely stunning from every angle, and to this day, we’re not convinced it isn’t an alien spacecraft surveying our planet for eventual takeover. It just doesn’t seem real. The only thing more remarkable than the look is the price — a whopping $4.5 million.
You may recall the Lykan Hypersport from its starring role in the blockbuster Furious 7, where the Lebanese supercar crashed through not one, not two, but three skyscrapers in Dubai. In a franchise filled with high-end exotics and one-off custom creations, the fact that the Hypersport got so much focus is a testament to its magnetism.
Let’s start with the styling, which includes jewel-encrusted headlights, scissor doors, and an interior ripped straight from science fiction. It looks like a pissed off armored car from the future, and its performance is right on par with its image. The Hypersport boasts a 3.7-liter, twin-turbo flat-six that yields 770hp and 708 lb-ft.
This list wouldn’t be complete without some version of the mighty Bugatti Veyron. We’re shining our spotlight on the the Mansory Vivere edition here, because not only is it one of the fastest cars in the world, it’s one of the most expensive.
Augmented by German witch doctors Mansory, the 1,200hp Veyron starts out as a Grand Sport Vitesse Roadster, only to be adorned with a gorgeous carbon-fiber body, a new spoiler package, upgraded LED lights, a revamped cabin, and a redesigned front grill. Further classifying the Veyron as a work of art, maps of historic race events like the Targa Florio are laser etched into the exterior and interior. Oh, and it can do 254 mph.
Full-size pickup trucks today range from utilitarian work trucks to posh luxury vehicles. But few are as posh as Chevrolet’s Silverado High Country edition. It’s posher than most and in fact may be the poshest of all.
The Silverado was redesigned a couple of years ago, and the 2016 model got a refresh. For 2017, it gets a capless fuel filler, new exterior color choices and a Teen Driver feature that allows parents to check on how the truck is being driven.
The Silverado is offered in a wide variety of trims in regular cab, double cab and crew cab body styles, in 2WD and 4WD. The Work Truck is the base trim, followed by LS, Custom, LT, LTZ and High Country, which was my test truck for the week.
When you climb up into the cab of this premium truck and settle into the leather bucket seats, you find yourself cocooned in comfort and quality. The heated and cooled seats have contrasting stitches, and the High Country mountains are embroidered on the read rests.
The Silverado High Country is the essence of luxury. It’s designed with all the tough and rugged qualities of the Silverado with equal amounts of luxury.
The Silverado High Country is the essence of luxury. It’s designed with all the tough and rugged qualities of the Silverado with equal amounts of luxury.- Gerry Lane Chevrolet’s Mike Venable
Standard equipment in the High Country includes driver’s seat memory, remote start, power windows including the rear glass, dual zone air, two USB ports, two 12v outlets, a 110v power outlet, LED projector headlamps, a spray-in bed liner, heated mirrors, a rearview camera, a tilt and telescoping leather-wrapped steering wheel, MyLink connectivity with Bose sound and an 8-inch color touch screen, navigation, satellite radio and Bluetooth.
Pick your bike. Pick your paint. Pick your parts.
When the inches start piling up around your home, there are two main things that you’ll want to make sure you have readily available. The first is a regular shovel. This is the most commonly used piece of snow equipment hands down.
It’s perfect for stairs, inclines, and paths around the home. For larger jobs however, meaning anything wet, packed to tight, heavy, or just over about four inches, it’s recommended to have a snowblower at your disposal.
"It’s that time of year again and mother nature isn’t pulling any punches."
Powered by:
Travel brings power and love back into your life
Commercial Department
3rd flr, Gaadhoo Building
Male, 20026
Maldives
Tel : +960 3335544
Fax : +960 3315661
e-mail<EMAIL_ADDRESS>Maldivian Call Center
Ameer Ahmed Magu
Male, 20026
Maldives
Tel : +960 3335544
Sun - Thur 08:30 am to 07:00 pm
Sat 09:00 am to 03:00 pm
WiTricity, one of the leaders in contactless, wireless charging is working with General Motors. The new partnership will, you guessed it, involve wirelessly charging electric vehicles. WiTricity's prototype Drive 11 park and charge system works at both 7.7 kW and 11 kW systems and could even be installed under a substrate to offer cord-free power for public parking spaces.
More than that, this could potentially recharge any vehicle regardless of manufacturer, according to a press release. "The system design works across all plug-in electric vehicle platforms and can be deployed as a 'floor pad' in a consumer's garage," the statement says. Specifically, Toyota and Delphi (a major GM supplier) are already onboard with licensing agreements.
It's not even a close race for number one on our list: The Tesla Model S wins by a mile. Actually, it wins by more than 100 miles, or 150 if you upgrade to the more powerful Performance model. That's because the base-level 60-kWh Model S ($71,000 with shipping) boasts a 208-mile range, while the upgraded P85 ($91,000) offers a more indulgent 265 miles between charges. Regardless of which Model S you choose, you'll get a long list of standard features that includes alloy wheels, heated seats, a rearview camera, dual-zone automatic climate control and a monstrous 17-inch center-mounted touchscreen.
That's right: The title of second-longest range belongs to an SUV. More precisely, it's a Toyota RAV4 with a fully electric motor, also known as the Toyota RAV4 EV. And according to the Environmental Protection Agency (EPA), it can travel an impressive 103 miles between charges. Beyond its impressive range, the RAV4 EV is also highly useful thanks to SUV cargo space and interior room, and a long list of standard equipment that includes keyless entry and ignition, heated front seats and dual-zone automatic climate control. The only problem: It's not sold outside of California. Oh, and it costs more than $50,000, though tax breaks help soften that number once you've signed the paperwork.
The FIAT 500e is an impressive electric car, assuming you live in California. You'll have to in order to buy one, as FIAT is currently limiting sales to California residents, though we wouldn't be surprised to see that change in the next few years. For now, shoppers in California can enjoy the FIAT 500's charming look coupled with an 87-mile range and a long list of standard equipment that includes navigation, automatic climate control and keyless entry. Pricing starts around $32,500, a hefty premium over the standard 500 but one that can be decreased with tax breaks.
The Nissan Leaf remains near the top of the EV pack with an 84-mile range -- a figure that recently increased thanks to updates for the 2014 model year. The Leaf's range is especially noteworthy considering its low starting price (under $31,000 with shipping) and its seating for five, which makes the Leaf among the most practical and affordable EVs on the market. Standard features don't quite match those of rivals, but the Leaf's big trick is a new 6.6-kW onboard charger, which helps the hatchback fully recharge in just four hours.
Shop from the world's largest selection and best deals for Dolce & Gabbana Shoes - Men's Dress Footwear.
How to


Quantitative Research on Quality of Consciousness
Solving Problem of 8 Queens using genetic algorithm in Clojure.


Preparation time
less than 30 mins
Cooking time
1 to 2 hours
Serves
Serves 4
A crisp border of potato makes the perfect accompaniment to this tasty dish of sausages cooked in red wine.
Equipment and preparation: You will need a piping bag fitted with a star-shaped nozzle.
For the Duchess potatoes, preheat the oven to 220C/425F/Gas 7.
Arrange a bed of salt on a baking tray. Place the potatoes on the salt and bake in the oven for an hour.
For the sausages in red wine sauce, preheat the oven to 180C/350F/Gas 4.
Heat the dripping in a casserole with a lid. Add the sausages and fry them to colour well all round and then remove from the pan.
Add the leek and onion to the pan and fry gently to colour them. Add the tomatoes, garlic, thyme, bay leaf, wine and stock.
Bring to the boil and add the sausages back in, place a lid on and put in the oven for 30 minutes.
Remove from the oven and remove the sausages and keep them warm. Remove the thyme and the bay leaf and discard. Heat the dish on the hob to reduce the sauce to a thicker consistency.
Blend the sauce using a hand-blender and then pass it through a fine metal sieve to make it smooth. Set aside and keep warm.
Heat a frying pan and add half of the butter and one tablespoon of oil and add the mushrooms. Fry until lightly coloured, then add the ham and fry to colour it too. Remove the ham and mushrooms from the pan and drain on kitchen paper.
Add the rest of the butter and the oil to the pan and heat. Once hot, add the bread and cook until golden-brown, then add it to the mushrooms and ham.
To finish the Duchess potatoes, cut the potatoes in half and scoop out the middles, then pass through a potato ricer into a clean bowl.
Beat in the egg yolks and apple purée. Season with a little nutmeg, salt and pepper.
Preheat the grill to high and line a baking tray with non-stick baking paper.
Put the potato mixture into a piping bag fitted with a star-shaped nozzle. Pipe a border of the potato around the edge of each serving plate. Put the plates under the grill to dry slightly.
Beat egg with a little water, then brush over the potato border, then colour quickly under the grill.
To serve, share the sausages between the plates, placing them in the middle of the potato border, pour the sauce over the sausages, sprinkle with chopped parsley and serve with Duchess potatoes around the edge of the plate.


WITNESS LIST Nominations Committee May 5, 1999-1:00P State Brd of Dental Examiners For: Irons, J. Kevin (self), Austin Juba, Amy Landess (self), Amarillo Malik, Martha Manley (self), Victoria Starr, Kent T. (self), Waco Tippit, Nathaniel, Jr. (self), Houston TX Funeral Commission For: King, John Q. Taylor (self), Austin Kiser, Roy H. (self), Plainview Rhymes, Martha J. (self), White Oak Wright, Jim C. (self), Wheeler TX State Brd of Public Accountancy For: Atkinson, Billy M. (self), Sugar Land Dryden, Kimberly (self), Amarillo Eyeington, April L. (self), College Station Franco, Edwardo B. (self), Irving Mann, Robert C. (self), Fort Worth TX Turnpike Authority For: Jarvis, Glenn (self), McAllen Zuniga, Manuel (self), Austin


ETH Transaction Fees on Ethereum Soar to $30
by Christine VasilevaThe Ethereum (ETH) network still experiences random days of congestion. This led to transactions requiring significantly high fees, as much as $30.
High Competition for Some Blocks Led to Exorbitant Fees
Transaction fees for sending ETH rose to as high as $30, on separate anomalous blocks, users reported. The spike in fees was random and rare, with current fees returning below $0.10.
The latest events revealed that the Ethereum network still inherently carries an economy of competition for resources, which becomes clear during periods of high activity.
Collectibles, DeFi Boost Load on Ethereum
There are multiple reasons that can lead to high-fee conditions, which make it almost impossible for regular users to send coins or tokens. One of the reasons was a recent slowdown in mining, as the difficulty crept up gradually due to the mining ice age feature. While expectations are that the ice age will be delayed again, ETH production may become slower, with block delays.
The other reason was the recent launch of ERC-271 non-fungible tokens based on the Gods Unchained collectibles marketplace.
Crypto collectibles have clogged the network in the past, especially on days of initial enthusiasm. But now, the most active smart contract is once again Tether (USDT).
The other reason for the sudden spike in activity is the firing of smart contracts related to decentralized finance (DeFi). As ETH prices tanked from the $180 range down to $145 lows, liquidation rules were triggered, as well as other protection mechanisms for crypto lending. Those smart contracts may be willing to pay high fees to complete their activity in time.
In general, Ethereum daily network utilization has fallen from a peak in May, where above 94% of transactional capacity was filled. The current usage is at about 84% on average. But there are still situations where a next-block transaction is necessary.
Similar congestions for Ethereum have happened during the 2017 and 2018 ICO craze. On days of highly prominent ICOs or token distributions, regular transactions took hours, or required very high gas payments. For now, the Ethereum network has not seen another FOMO game, which is one of the most serious gas consumers. Additionally, distributed apps and projects are moving to other networks, to avoid uncertain gas payments.
After the most recent correction, ETH price dropped to $149.39, breaking weeks of relative stability.
What do you think about the Ethereum gas fee spike? Share your thoughts in the comments section below!
Images via Bitcoinist Media Library, Twitter: @natemaddrey, @GodsUnchained, @DeFiSaver
The Rundown


The Null object. A singleton that does nothing, returning itself in response to all operations. E.g.:
- Null.attr returns Null for any attr
- Null + obj or obj + Null returns Null (similarly - * / etc.)
- Null.method(args) returns Null for any method call
- obj == Null returns False (unless obj is Null)
- obj < Null returns False
- repr(Null) returns “Null”
- Null.format(spec) returns “Null” and will support string formatting specs (e.g. :width)
Null objects are useful when coding as they can eliminate many checks for if obj is None.


NEVER BEEN KISSED
** (out of 4) - a fair movie
Release Date: April 9, 1999 Starring: Drew Barrymore, David Arquette, Michael Vartan, Molly Shannon, John C. Reilly, Garry Marshall, Octavia Spencer Directed by: Raja Gosnell Distributed by: 20th Century Fox Films Corp. MPAA Rating: PG-13 (sex-related material, some drug content)
"Do you wish you could be 18 again?"
If you've ever asked this question to someone of considerable age, you undoubtedly know the answer is something like, "Not unless I could have the knowledge I do now." And indeed, there's a certain naïveté about the teenage years that befits the young but baffles the elderly. This philosophical fountain of youth is pondered in the lyrics of songs and countless movies, but most recently it's given a home in the flighty Raja Gosnell romance NEVER BEEN KISSED.
Gosnell (HOME ALONE 3)'s story is also a foray into the fish-out-of-water theme, which posits a character in unfamiliar settings and exploits the implied, resultant humor. In this case, Chicago Sun-Times copy editor Josie Gellar (Drew Barrymore) is chosen to write an undercover piece on today's high schoolers. Unfortunately, in her first go at it, Josie was a real geek -- worse than Paul on "The Wonder Years." To the rescue comes her brother Rob (David Arquette), who proves the little-known truth that it only takes one person to think you're cool to be "in." Soon Josie is in the running for prom queen and the romantic interest of stud English teacher Sam Coulson (Michael Vartan).
Throughout this story the movie attempts to juggle several different ideas before dropping them all in favor of a predictable and disappointing ending. The first of these themes is Josie's inadaquate character for the job of undercover reporting -- she's a control freak copy editor, accustomed to correcting people's grammar and not sliding into hip-and-trendy MTV-era high school. This idea gets dropped in favor of the second one, which is the inevitable humiliation that will occur when Josie attends high school. The third subplot, which is unfinished and consequently unsuccessful, is the romantic possibility between Josie and her English teacher Coulson; the resolution to this plot does not make sense. And finally, the fourth facet of the script is Rob's minor role in Josie's life, as well as his "redemption" in high school. Truly, his story holds interesting potential, but it too is compromised in a quick-and-easy ending.
The cast carries off these different larks in typical and unremarkable fashion. Barrymore gives a lackluster performance here, which is especially disappointing after she had received such high acclaim for her last two romantic pictures (EVER AFTER and THE WEDDING SINGER). She proves here that she's unable to carry a movie which has little support and relies heavily on the lead. In terms of support, both Arquette (SCREAM 2) and Vartan (THE MYTH OF FINGERPRINTS) have too little screentime and not enough to say to make an effective appearance. There is not a standout player among the lot.
In terms of romantic offerings this year, NEVER BEEN KISSED falls below par. There are those who will sympathize with the geekiness of Barrymore's character, but in its own right, the movie paralells its oddity. Nothing ever comes together, and other than a good laugh or two at the expense of others, time and money are best spent elsewhere.
all contents © 1999 Craig Roush
-- Craig Roush<EMAIL_ADDRESS>-- Kinnopio's Movie Reviews http://www.execpc.com/~kinnopio
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


7.6.0
The min is the lowest number in the array.
This runs in O(n)
, linear time, with respect to the length of the array.
number
:
minimum value
min([1, 5, -10, 100, 2]); // => -10
This computes the maximum number in an array.
This runs in O(n)
, linear time, with respect to the length of the array.
number
:
maximum value
max([1, 2, 3, 4]);
// => 4
This computes the minimum & maximum number in an array.
This runs in O(n)
, linear time, with respect to the length of the array.
Array<number>
:
minimum & maximum value
extent([1, 2, 3, 4]);
// => [1, 4]
Our default sum is the Kahan-Babuska algorithm. This method is an improvement over the classical Kahan summation algorithm. It aims at computing the sum of a list of numbers while correcting for floating-point errors. Traditionally, sums are calculated as many successive additions, each one with its own floating-point roundoff. These losses in precision add up as the number of numbers increases. This alternative algorithm is more accurate than the simple way of calculating sums by simple addition.
This runs in O(n)
, linear time, with respect to the length of the array.
number
:
sum of all input numbers
sum([1, 2, 3]); // => 6
The simple sum of an array is the result of adding all numbers together, starting from zero.
This runs in O(n)
, linear time, with respect to the length of the array.
number
:
sum of all input numbers
sumSimple([1, 2, 3]); // => 6
The quantile: this is a population quantile, since we assume to know the entire dataset in this library. This is an implementation of the Quantiles of a Population algorithm from wikipedia.
Sample is a one-dimensional array of numbers, and p is either a decimal number from 0 to 1 or an array of decimal numbers from 0 to 1. In terms of a k/q quantile, p = k/q - it's just dealing with fractions or dealing with decimal values. When p is an array, the result of the function is also an array containing the appropriate quantiles in input order
number
:
quantile
quantile([3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20], 0.5); // => 9
This function returns the quantile in which one would find the given value in
the given array. It will copy and sort your array before each run, so
if you know your array is already sorted, you should use quantileRankSorted
instead.
number
:
value value
quantileRank([4, 3, 1, 2], 3); // => 0.75
quantileRank([4, 3, 2, 3, 1], 3); // => 0.7
quantileRank([2, 4, 1, 3], 6); // => 1
quantileRank([5, 3, 1, 2, 3], 4); // => 0.8
The product of an array is the result of multiplying all numbers together, starting using one as the multiplicative identity.
This runs in O(n)
, linear time, with respect to the length of the array.
number
:
product of all input numbers
product([1, 2, 3, 4]); // => 24
These are special versions of methods that assume your input is sorted. This assumptions lets them run a lot faster, usually in O(1).
The minimum is the lowest number in the array. With a sorted array, the first element in the array is always the smallest, so this calculation can be done in one step, or constant time.
number
:
minimum value
minSorted([-100, -10, 1, 2, 5]); // => -100
The maximum is the highest number in the array. With a sorted array, the last element in the array is always the largest, so this calculation can be done in one step, or constant time.
number
:
maximum value
maxSorted([-100, -10, 1, 2, 5]); // => 5
This is the internal implementation of quantiles: when you know that the order is sorted, you don't need to re-sort it, and the computations are faster.
(number)
desired quantile: a number between 0 to 1, inclusive
number
:
quantile value
quantileSorted([3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20], 0.5); // => 9
This function returns the quantile in which one would find the given value in the given array. With a sorted array, leveraging binary search, we can find this information in logarithmic time.
number
:
value value
quantileRankSorted([1, 2, 3, 4], 3); // => 0.75
quantileRankSorted([1, 2, 3, 3, 4], 3); // => 0.7
quantileRankSorted([1, 2, 3, 4], 6); // => 1
quantileRankSorted([1, 2, 3, 3, 5], 4); // => 0.8
These are different ways to identifying centers or locations of a distribution.
The mean, also known as average, is the sum of all values over the number of values. This is a measure of central tendency: a method of finding a typical or central value of a set of numbers.
This runs in O(n)
, linear time, with respect to the length of the array.
number
:
mean
mean([0, 10]); // => 5
When adding a new value to a list, one does not have to necessary recompute the mean of the list in linear time. They can instead use this function to compute the new mean by providing the current mean, the number of elements in the list that produced it and the new value to add.
number
:
the new mean
addToMean(14, 5, 53); // => 20.5
The mode is the number that appears in a list the highest number of times. There can be multiple modes in a list: in the event of a tie, this algorithm will return the most recently seen mode.
This is a measure of central tendency: a method of finding a typical or central value of a set of numbers.
This runs in O(n log(n))
because it needs to sort the array internally
before running an O(n)
search to find the mode.
number
:
mode
mode([0, 0, 1]); // => 0
The mode is the number that appears in a list the highest number of times. There can be multiple modes in a list: in the event of a tie, this algorithm will return the most recently seen mode.
This is a measure of central tendency: a method of finding a typical or central value of a set of numbers.
This runs in O(n)
because the input is sorted.
number
:
mode
modeSorted([0, 0, 1]); // => 0
The mode is the number that appears in a list the highest number of times. There can be multiple modes in a list: in the event of a tie, this algorithm will return the most recently seen mode.
modeFast uses a Map object to keep track of the mode, instead of the approach
used with mode
, a sorted array. As a result, it is faster
than mode
and supports any data type that can be compared with ==
.
It also requires a
JavaScript environment with support for Map,
and will throw an error if Map is not available.
This is a measure of central tendency: a method of finding a typical or central value of a set of numbers.
(Array<any>)
a sample of one or more data points
any?
:
mode
modeFast(['rabbits', 'rabbits', 'squirrels']); // => 'rabbits'
The median is
the middle number of a list. This is often a good indicator of 'the middle'
when there are outliers that skew the mean()
value.
This is a measure of central tendency:
a method of finding a typical or central value of a set of numbers.
The median isn't necessarily one of the elements in the list: the value can be the average of two elements if the list has an even length and the two central values are different.
number
:
median value
median([10, 2, 5, 100, 2, 1]); // => 3.5
The median is
the middle number of a list. This is often a good indicator of 'the middle'
when there are outliers that skew the mean()
value.
This is a measure of central tendency:
a method of finding a typical or central value of a set of numbers.
The median isn't necessarily one of the elements in the list: the value can be the average of two elements if the list has an even length and the two central values are different.
number
:
median value
medianSorted([10, 2, 5, 100, 2, 1]); // => 52.5
The Harmonic Mean is a mean function typically used to find the average of rates. This mean is calculated by taking the reciprocal of the arithmetic mean of the reciprocals of the input numbers.
This is a measure of central tendency: a method of finding a typical or central value of a set of numbers.
This runs in O(n)
, linear time, with respect to the length of the array.
number
:
harmonic mean
harmonicMean([2, 3]).toFixed(2) // => '2.40'
The Geometric Mean is a mean function that is more useful for numbers in different ranges.
This is the nth root of the input numbers multiplied by each other.
The geometric mean is often useful for proportional growth: given growth rates for multiple years, like 80%, 16.66% and 42.85%, a simple mean will incorrectly estimate an average growth rate, whereas a geometric mean will correctly estimate a growth rate that, over those years, will yield the same end value.
This runs in O(n)
, linear time, with respect to the length of the array.
number
:
geometric mean
var growthRates = [1.80, 1.166666, 1.428571];
var averageGrowth = ss.geometricMean(growthRates);
var averageGrowthRates = [averageGrowth, averageGrowth, averageGrowth];
var startingValue = 10;
var startingValueMean = 10;
growthRates.forEach(function(rate) {
startingValue *= rate;
});
averageGrowthRates.forEach(function(rate) {
startingValueMean *= rate;
});
startingValueMean === startingValue;
The Root Mean Square (RMS) is
a mean function used as a measure of the magnitude of a set
of numbers, regardless of their sign.
This is the square root of the mean of the squares of the
input numbers.
This runs in O(n)
, linear time, with respect to the length of the array.
number
:
root mean square
rootMeanSquare([-1, 1, -1, 1]); // => 1
Skewness is a measure of the extent to which a probability distribution of a real-valued random variable "leans" to one side of the mean. The skewness value can be positive or negative, or even undefined.
Implementation is based on the adjusted Fisher-Pearson standardized moment coefficient, which is the version found in Excel and several statistical packages including Minitab, SAS and SPSS.
number
:
sample skewness
sampleSkewness([2, 4, 6, 3, 1]); // => 0.590128656384365
These are different ways of determining how spread out a distribution is.
The variance is the sum of squared deviations from the mean.
This is an implementation of variance, not sample variance:
see the sampleVariance
method if you want a sample measure.
number
:
variance: a value greater than or equal to zero.
zero indicates that all values are identical.
variance([1, 2, 3, 4, 5, 6]); // => 2.9166666666666665
The sample variance is the sum of squared deviations from the mean. The sample variance is distinguished from the variance by the usage of Bessel's Correction: instead of dividing the sum of squared deviations by the length of the input, it is divided by the length minus one. This corrects the bias in estimating a value from a set that you don't know if full.
References:
number
:
sample variance
sampleVariance([1, 2, 3, 4, 5]); // => 2.5
The standard deviation is the square root of the variance. This is also known as the population standard deviation. It's useful for measuring the amount of variation or dispersion in a set of values.
Standard deviation is only appropriate for full-population knowledge: for samples of a population, sampleStandardDeviation is more appropriate.
number
:
standard deviation
variance([2, 4, 4, 4, 5, 5, 7, 9]); // => 4
standardDeviation([2, 4, 4, 4, 5, 5, 7, 9]); // => 2
The sample standard deviation is the square root of the sample variance.
number
:
sample standard deviation
sampleStandardDeviation([2, 4, 4, 4, 5, 5, 7, 9]).toFixed(2);
// => '2.14'
The Median Absolute Deviation is a robust measure of statistical dispersion. It is more resilient to outliers than the standard deviation.
number
:
median absolute deviation
medianAbsoluteDeviation([1, 1, 2, 2, 4, 6, 9]); // => 1
The Interquartile range is a measure of statistical dispersion, or how scattered, spread, or concentrated a distribution is. It's computed as the difference between the third quartile and first quartile.
number
:
interquartile range: the span between lower and upper quartile,
0.25 and 0.75
interquartileRange([0, 1, 2, 3]); // => 2
The sum of deviations to the Nth power. When n=2 it's the sum of squared deviations. When n=3 it's the sum of cubed deviations.
number
:
sum of nth power deviations
var input = [1, 2, 3];
// since the variance of a set is the mean squared
// deviations, we can calculate that with sumNthPowerDeviations:
sumNthPowerDeviations(input, 2) / input.length;
The Z-Score, or Standard Score.
The standard score is the number of standard deviations an observation or datum is above or below the mean. Thus, a positive standard score represents a datum above the mean, while a negative standard score represents a datum below the mean. It is a dimensionless quantity obtained by subtracting the population mean from an individual raw score and then dividing the difference by the population standard deviation.
The z-score is only defined if one knows the population parameters; if one only has a sample set, then the analogous computation with sample mean and sample standard deviation yields the Student's t-statistic.
number
:
z score
zScore(78, 80, 5); // => -0.4
The correlation is a measure of how correlated two datasets are, between -1 and 1
number
:
sample correlation
sampleCorrelation([1, 2, 3, 4, 5, 6], [2, 2, 3, 4, 5, 60]).toFixed(2);
// => '0.69'
Sample covariance of two datasets: how much do the two datasets move together? x and y are two datasets, represented as arrays of numbers.
number
:
sample covariance
sampleCovariance([1, 2, 3, 4, 5, 6], [6, 5, 4, 3, 2, 1]); // => -3.5
The R Squared
value of data compared with a function f
is the sum of the squared differences between the prediction
and the actual value.
number
:
r-squared value
var samples = [[0, 0], [1, 1]];
var regressionLine = linearRegressionLine(linearRegression(samples));
rSquared(samples, regressionLine); // = 1 this line is a perfect fit
Simple linear regression is a simple way to find a fitted line between a set of coordinates. This algorithm finds the slope and y-intercept of a regression line using the least sum of squares.
Object
:
object containing slope and intersect of regression line
linearRegression([[0, 0], [1, 1]]); // => { m: 1, b: 0 }
Given the output of linearRegression
: an object
with m
and b
values indicating slope and intercept,
respectively, generate a line function that translates
x values into y values.
Function
:
method that computes y-value at any given
x-value on the line.
var l = linearRegressionLine(linearRegression([[0, 0], [1, 1]]));
l(0) // = 0
l(2) // = 2
linearRegressionLine({ b: 0, m: 1 })(1); // => 1
linearRegressionLine({ b: 1, m: 1 })(1); // => 2
A Fisher-Yates shuffle
is a fast way to create a random permutation of a finite set. This is
a function around shuffle_in_place
that adds the guarantee that
it will not modify its input.
(Array)
sample of 0 or more numbers
(Function
= Math.random
)
an optional entropy source that
returns numbers between 0 inclusive and 1 exclusive: the range [0, 1)
Array
:
shuffled version of input
var shuffled = shuffle([1, 2, 3, 4]);
shuffled; // = [2, 3, 1, 4] or any other random permutation
A Fisher-Yates shuffle in-place - which means that it will change the order of the original array by reference.
This is an algorithm that generates a random permutation of a set.
(Array)
sample of one or more numbers
(Function
= Math.random
)
an optional entropy source that
returns numbers between 0 inclusive and 1 exclusive: the range [0, 1)
Array
:
x
var x = [1, 2, 3, 4];
shuffleInPlace(x);
// x is shuffled to a value like [2, 1, 4, 3]
Sampling with replacement is a type of sampling that allows the same item to be picked out of a population more than once.
(Array<any>)
an array of any kind of value
(number)
count of how many elements to take
(Function
= Math.random
)
an optional entropy source that
returns numbers between 0 inclusive and 1 exclusive: the range [0, 1)
Array
:
n sampled items from the population
var values = [1, 2, 3, 4];
sampleWithReplacement(values, 2); // returns 2 random values, like [2, 4];
Create a simple random sample
from a given array of n
elements.
The sampled values will be in any order, not necessarily the order they appear in the input.
(Array<any>)
input array. can contain any type
(number)
count of how many elements to take
(Function
= Math.random
)
an optional entropy source that
returns numbers between 0 inclusive and 1 exclusive: the range [0, 1)
Array
:
subset of n elements in original array
var values = [1, 2, 4, 5, 6, 7, 8, 9];
sample(values, 3); // returns 3 random values, like [2, 5, 8];
This is a naïve bayesian classifier that takes singly-nested objects.
var bayes = new BayesianClassifier();
bayes.train({
species: 'Cat'
}, 'animal');
var result = bayes.score({
species: 'Cat'
})
// result
// {
// animal: 1
// }
This is a single-layer Perceptron Classifier that takes arrays of numbers and predicts whether they should be classified as either 0 or 1 (negative or positive examples).
// Create the model
var p = new PerceptronModel();
// Train the model with input with a diagonal boundary.
for (var i = 0; i < 5; i++) {
p.train([1, 1], 1);
p.train([0, 1], 0);
p.train([1, 0], 0);
p.train([0, 0], 0);
}
p.predict([0, 0]); // 0
p.predict([0, 1]); // 0
p.predict([1, 0]); // 0
p.predict([1, 1]); // 1
Train the classifier with a new example, which is a numeric array of features and a 0 or 1 label.
PerceptronModel
:
this
The Bernoulli distribution
is the probability discrete
distribution of a random variable which takes value 1 with success
probability p
and value 0 with failure
probability q
= 1 - p
. It can be used, for example, to represent the
toss of a coin, where "1" is defined to mean "heads" and "0" is defined
to mean "tails" (or vice versa). It is
a special case of a Binomial Distribution
where n
= 1.
(number)
input value, between 0 and 1 inclusive
Array<number>
:
values of bernoulli distribution at this point
bernoulliDistribution(0.3); // => [0.7, 0.3]
The Binomial Distribution is the discrete probability
distribution of the number of successes in a sequence of n independent yes/no experiments, each of which yields
success with probability probability
. Such a success/failure experiment is also called a Bernoulli experiment or
Bernoulli trial; when trials = 1, the Binomial Distribution is a Bernoulli Distribution.
Array<number>
:
output
The Poisson Distribution is a discrete probability distribution that expresses the probability of a given number of events occurring in a fixed interval of time and/or space if these events occur with a known average rate and independently of the time since the last event.
The Poisson Distribution is characterized by the strictly positive
mean arrival or occurrence rate, λ
.
(number)
location poisson distribution
Array<number>
:
values of poisson distribution at that point
Percentage Points of the χ2 (Chi-Squared) Distribution
The χ2 (Chi-Squared) Distribution is used in the common chi-squared tests for goodness of fit of an observed distribution to a theoretical one, the independence of two criteria of classification of qualitative data, and in confidence interval estimation for a population standard deviation of a normal distribution from a sample standard deviation.
Values from Appendix 1, Table III of William W. Hines & Douglas C. Montgomery, "Probability and Statistics in Engineering and Management Science", Wiley (1980).
A standard normal table, also called the unit normal table or Z table, is a mathematical table for the values of Φ (phi), which are the values of the cumulative distribution function of the normal distribution. It is used to find the probability that a statistic is observed below, above, or between values on the standard normal distribution, and by extension, any normal distribution.
This is to compute a one-sample t-test, comparing the mean of a sample to a known value, x.
in this case, we're trying to determine whether the
population mean is equal to the value that we know, which is x
here. Usually the results here are used to look up a
p-value, which, for
a certain level of significance, will let you determine that the
null hypothesis can or cannot be rejected.
(number)
expected value of the population mean
number
:
value
tTest([1, 2, 3, 4, 5, 6], 3.385).toFixed(2); // => '0.16'
This is to compute two sample t-test.
Tests whether "mean(X)-mean(Y) = difference", (
in the most common case, we often have difference == 0
to test if two samples
are likely to be taken from populations with the same mean value) with
no prior knowledge on standard deviations of both samples
other than the fact that they have the same standard deviation.
Usually the results here are used to look up a p-value, which, for a certain level of significance, will let you determine that the null hypothesis can or cannot be rejected.
diff
can be omitted if it equals 0.
This is used to reject
a null hypothesis that the two populations that have been sampled into
sampleX
and sampleY
are equal to each other.
(number
= 0
)
(number | null)
:
test result
tTestTwoSample([1, 2, 3, 4], [3, 4, 5, 6], 0); // => -2.1908902300206643
Conducts a permutation test to determine if two data sets are significantly different from each other, using the difference of means between the groups as the test statistic. The function allows for the following hypotheses:
(string)
alternative hypothesis, either 'two_sided' (default), 'greater', or 'less'
(number)
number of values in permutation distribution.
(Function
= Math.random
)
an optional entropy source
number
:
p-value The probability of observing the difference between groups (as or more extreme than what we did), assuming the null hypothesis.
var control = [2, 5, 3, 6, 7, 2, 5];
var treatment = [20, 5, 13, 12, 7, 2, 2];
permutationTest(control, treatment); // ~0.1324
Cumulative Standard Normal Probability
Since probability tables cannot be printed for every normal distribution, as there are an infinite variety of normal distributions, it is common practice to convert a normal to a standard normal and then use the standard normal table to find probabilities.
You can use .5 + .5 * errorFunction(x / Math.sqrt(2))
to calculate the probability
instead of looking it up in a table.
(number)
number
:
cumulative standard normal probability
The errorFunction(x/(sd * Math.sqrt(2)))
is the probability that a value in a
normal distribution with standard deviation sd is within x of the mean.
This function returns a numerical approximation to the exact value. It uses Horner's method to evaluate the polynomial of τ (tau).
(number)
input
number
:
error estimation
errorFunction(1).toFixed(2); // => '0.84'
The Inverse Gaussian error function
returns a numerical approximation to the value that would have caused
errorFunction()
to return x.
(number)
value of error function
number
:
estimated inverted value
The Probit is the inverse of cumulativeStdNormalProbability(), and is also known as the normal quantile function.
It returns the number of standard deviations from the mean where the p'th quantile of values can be found in a normal distribution. So, for example, probit(0.5 + 0.6827/2) ≈ 1 because 68.27% of values are normally found within 1 standard deviation above or below the mean.
(number)
number
:
probit
Breaks methods split datasets into chunks. Often these are used for segmentation or visualization of a dataset. A method of computing breaks that splits data evenly can make for a better choropleth map, for instance, because each color will be represented equally.
Ckmeans clustering is an improvement on heuristic-based clustering approaches like Jenks. The algorithm was developed in Haizhou Wang and Mingzhou Song as a dynamic programming approach to the problem of clustering numeric data into groups with the least within-group sum-of-squared-deviations.
Minimizing the difference within groups - what Wang & Song refer to as
withinss
, or within sum-of-squares, means that groups are optimally
homogenous within and the data is split into representative groups.
This is very useful for visualization, where you may want to represent
a continuous variable in discrete color or style groups. This function
can provide groups that emphasize differences between data.
Being a dynamic approach, this algorithm is based on two matrices that store incrementally-computed values for squared deviations and backtracking indexes.
This implementation is based on Ckmeans 3.4.6, which introduced a new divide and conquer approach that improved runtime from O(kn^2) to O(kn log(n)).
Unlike the original implementation, this implementation does not include any code to automatically determine the optimal number of clusters: this information needs to be explicitly provided.
Ckmeans.1d.dp: Optimal k-means Clustering in One Dimension by Dynamic Programming Haizhou Wang and Mingzhou Song ISSN 2073-4859
from The R Journal Vol. 3/2, December 2011
(number)
number of desired classes. This cannot be
greater than the number of values in the data array.
Array<Array<number>>
:
clustered input
ckmeans([-1, 2, -1, 2, 4, 5, 6, -1, 2, -1], 3);
// The input, clustered into groups of similar numbers.
//= [[-1, -1, -1, -1], [2, 2, 2], [4, 5, 6]]);
Given an array of x, this will find the extent of the x and return an array of breaks that can be used to categorize the x into a number of classes. The returned array will always be 1 longer than the number of classes because it includes the minimum value.
Array<number>
:
array of class break positions
equalIntervalBreaks([1, 2, 3, 4, 5, 6], 4); // => [1, 2.25, 3.5, 4.75, 6]
Perform k-means clustering.
(number)
How many clusters to create.
(Function
= Math.random
)
An optional entropy source that generates uniform values in [0, 1).
kMeansReturn
:
Labels (same length as data) and centroids (same length as numCluster).
kMeansCluster([[0.0, 0.5], [1.0, 0.5]], 2); // => {labels: [0, 1], centroids: [[0.0, 0.5], [1.0 0.5]]}
Calculate the silhouette values for clustered data.
Array<number>
:
The silhouette value for each point.
silhouette([[0.25], [0.75]], [0, 0]); // => [1.0, 1.0]
Calculate the silhouette metric for a set of N-dimensional points arranged in groups. The metric is the largest individual silhouette value for the data.
number
:
The silhouette metric for the groupings.
silhouetteMetric([[0.25], [0.75]], [0, 0]); // => 1.0
Split an array into chunks of a specified size. This function has the same behavior as PHP's array_chunk function, and thus will insert smaller-sized chunks at the end if the input size is not divisible by the chunk size.
x
is expected to be an array, and chunkSize
a number.
The x
array can contain any kind of data.
Array<Array>
:
a chunked array
chunk([1, 2, 3, 4, 5, 6], 2);
// => [[1, 2], [3, 4], [5, 6]]
The χ2 (Chi-Squared) Goodness-of-Fit Test
uses a measure of goodness of fit which is the sum of differences between observed and expected outcome frequencies
(that is, counts of observations), each squared and divided by the number of observations expected given the
hypothesized distribution. The resulting χ2 statistic, chiSquared
, can be compared to the chi-squared distribution
to determine the goodness of fit. In order to determine the degrees of freedom of the chi-squared distribution, one
takes the total number of observed frequencies and subtracts the number of estimated parameters. The test statistic
follows, approximately, a chi-square distribution with (k − c) degrees of freedom where k
is the number of non-empty
cells and c
is the number of estimated parameters for the distribution.
(Function)
a function that returns a point in a distribution:
for instance, binomial, bernoulli, or poisson
(number)
number
:
chi squared goodness of fit
// Data from Poisson goodness-of-fit example 10-19 in William W. Hines & Douglas C. Montgomery,
// "Probability and Statistics in Engineering and Management Science", Wiley (1980).
var data1019 = [
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2,
3, 3, 3, 3
];
ss.chiSquaredGoodnessOfFit(data1019, ss.poissonDistribution, 0.05); //= false
We use ε
, epsilon, as a stopping criterion when we want to iterate
until we're "close enough". Epsilon is a very small number: for
simple statistics, that number is 0.0001
This is used in calculations like the binomialDistribution, in which the process of finding a value is iterative: it progresses until it is close enough.
Below is an example of using epsilon in gradient descent,
where we're trying to find a local minimum of a function's derivative,
given by the fDerivative
method.
Type: number
// From calculation, we expect that the local minimum occurs at x=9/4
var x_old = 0;
// The algorithm starts at x=6
var x_new = 6;
var stepSize = 0.01;
function fDerivative(x) {
return 4 * Math.pow(x, 3) - 9 * Math.pow(x, 2);
}
// The loop runs until the difference between the previous
// value and the current value is smaller than epsilon - a rough
// meaure of 'close enough'
while (Math.abs(x_new - x_old) > ss.epsilon) {
x_old = x_new;
x_new = x_old - stepSize * fDerivative(x_old);
}
console.log('Local minimum occurs at', x_new);
A Factorial, usually written n!, is the product of all positive integers less than or equal to n. Often factorial is implemented recursively, but this iterative approach is significantly faster and simpler.
(number)
input, must be an integer number 1 or greater
number
:
factorial: n!
factorial(5); // => 120
Compute the gamma function of a value using Nemes' approximation. The gamma of n is equivalent to (n-1)!, but unlike the factorial function, gamma is defined for all real n except zero and negative integers (where NaN is returned). Note, the gamma function is also well-defined for complex numbers, though this implementation currently does not handle complex numbers as input values. Nemes' approximation is defined here as Theorem 2.2. Negative values use Euler's reflection formula for computation.
(number)
Any real number except for zero and negative integers.
number
:
The gamma of the input value.
gamma(11.5); // 11899423.084037038
gamma(-11.5); // 2.29575810481609e-8
gamma(5); // 24
Compute the logarithm of the gamma function of a value using Lanczos' approximation. This function takes as input any real-value n greater than 0. This function is useful for values of n too large for the normal gamma function (n > 165). The code is based on Lanczo's Gamma approximation, defined here.
(number)
Any real number greater than zero.
number
:
The logarithm of gamma of the input value.
gammaln(500); // 2605.1158503617335
gammaln(2.4); // 0.21685932244884043
For a sorted input, counting the number of unique values is possible in constant time and constant memory. This is a simple implementation of the algorithm.
Values are compared with ===
, so objects and non-primitive objects
are not handled in any special way.
(Array<any>)
an array of any kind of value
number
:
count of unique values
uniqueCountSorted([1, 2, 3]); // => 3
uniqueCountSorted([1, 1, 1]); // => 1
The extent is the lowest & highest number in the array. With a sorted array, the first element in the array is always the lowest while the last element is always the largest, so this calculation can be done in one step, or constant time.
Array<number>
:
minimum & maximum value
extentSorted([-100, -10, 1, 2, 5]); // => [-100, 5]
The jenks natural breaks optimization is an algorithm commonly used in cartography and visualization to decide upon groupings of data values that minimize variance within themselves and maximize variation between themselves.
For instance, cartographers often use jenks in order to choose which values are assigned to which colors in a choropleth map.
(number)
number of desired classes
Array<number>
:
array of class break positions
// split data into 3 break points
jenks(
[1, 2, 4, 5, 7, 9, 10, 20]
, 3) // =
[1, 7, 20, 20]
The rank correlation is a measure of the strength of monotonic relationship between two arrays
number
:
sample rank correlation
Kurtosis is a measure of the heaviness of a distribution's tails relative to its variance. The kurtosis value can be positive or negative, or even undefined.
Implementation is based on Fisher's excess kurtosis definition and uses unbiased moment estimators. This is the version found in Excel and available in several statistical packages, including SAS and SciPy.
number
:
sample kurtosis
sampleKurtosis([1, 2, 2, 3, 5]); // => 1.4555765595463122
Implementation of Heap's Algorithm for generating permutations.
(Array)
any type of data
Array<Array>
:
array of permutations
Implementation of Combinations Combinations are unique subsets of a collection - in this case, k x from a collection at a time. https://en.wikipedia.org/wiki/Combination
(Array)
any type of data
(int)
the number of objects in each group (without replacement)
Array<Array>
:
array of permutations
combinations([1, 2, 3], 2); // => [[1,2], [1,3], [2,3]]
Implementation of Combinations with replacement Combinations are unique subsets of a collection - in this case, k x from a collection at a time. 'With replacement' means that a given element can be chosen multiple times. Unlike permutation, order doesn't matter for combinations.
(Array)
any type of data
(int)
the number of objects in each group (without replacement)
Array<Array>
:
array of permutations
combinationsReplacement([1, 2], 2); // => [[1, 1], [1, 2], [2, 2]]
When combining two lists of values for which one already knows the means, one does not have to necessary recompute the mean of the combined lists in linear time. They can instead use this function to compute the combined mean by providing the mean & number of values of the first list and the mean & number of values of the second list.
(number)
mean of the first list
(number)
number of items in the first list
(number)
mean of the second list
(number)
number of items in the second list
number
:
the combined mean
combineMeans(5, 3, 4, 3); // => 4.5
When combining two lists of values for which one already knows the variances, one does not have to necessary recompute the variance of the combined lists in linear time. They can instead use this function to compute the combined variance by providing the variance, mean & number of values of the first list and the variance, mean & number of values of the second list.
(number)
variance of the first list
(number)
mean of the first list
(number)
number of items in the first list
(number)
variance of the second list
(number)
mean of the second list
(number)
number of items in the second list
number
:
the combined mean
combineVariances(14 / 3, 5, 3, 8 / 3, 4, 3); // => 47 / 12
The log average is an equivalent way of computing the geometric mean of an array suitable for large or small products.
It's found by calculating the average logarithm of the elements and exponentiating.
number
:
geometric mean
The mean, also known as average, is the sum of all values over the number of values. This is a measure of central tendency: a method of finding a typical or central value of a set of numbers.
The simple mean uses the successive addition method internally to calculate it's result. Errors in floating-point addition are not accounted for, so if precision is required, the standard mean method should be used instead.
This runs in O(n)
, linear time, with respect to the length of the array.
number
:
mean
mean([0, 10]); // => 5
When removing a value from a list, one does not have to necessary recompute the mean of the list in linear time. They can instead use this function to compute the new mean by providing the current mean, the number of elements in the list that produced it and the value to remove.
(number)
current mean
(number)
number of items in the list
(number)
the value to remove
number
:
the new mean
subtractFromMean(20.5, 6, 53); // => 14
Thecoefficient of variation
is the ratio of the standard deviation to the mean.
..coefficient of variation
: https://en.wikipedia.org/wiki/Coefficient_of_variation
(Array)
input
number
:
coefficient of variation
coefficientOfVariation([1, 2, 3, 4]).toFixed(3); // => 0.516
coefficientOfVariation([1, 2, 3, 4, 5]).toFixed(3); // => 0.527
coefficientOfVariation([-1, 0, 1, 2, 3, 4]).toFixed(3); // => 1.247
This function calculates the Wilcoxon rank sum statistic for the first sample with respect to the second. The Wilcoxon rank sum test is a non-parametric alternative to the t-test which is equivalent to the Mann-Whitney U test. The statistic is calculated by pooling all the observations together, ranking them, and then summing the ranks associated with one of the samples. If this rank sum is sufficiently large or small we reject the hypothesis that the two samples come from the same distribution in favor of the alternative that one is shifted with respect to the other.
number
:
rank sum for sampleX
wilcoxonRankSum([1, 4, 8], [9, 12, 15]); // => 6
Kernel density estimation is a useful tool for, among other things, estimating the shape of the underlying probability distribution from a sample.
(any)
sample values
(any)
The kernel function to use. If a function is provided, it should return non-negative values and integrate to 1. Defaults to 'gaussian'.
(any)
The "bandwidth selection" method to use, or a fixed bandwidth value. Defaults to "nrd", the commonly-used
"normal reference distribution" rule-of-thumb
.
Function
:
An estimated
probability density function
for the given sample. The returned function runs in
O(X.length)
.
Logistic Cumulative Distribution Function
(number)
number
:
cumulative standard logistic probability
The Logit is the inverse of cumulativeStdLogisticProbability, and is also known as the logistic quantile function.
(number)
number
:
logit
Bisection method is a root-finding method that repeatedly bisects an interval to find the root.
This function returns a numerical approximation to the exact value.
(Function)
input function
(number)
start of interval
(number)
end of interval
(number)
the maximum number of iterations
(number)
the error tolerance
number
:
estimated root value
bisect(Math.cos,0,4,100,0.003); // => 1.572265625
Type: Object
Calculate Euclidean distance between two points.
number
:
Distance.
Rearrange items in arr
so that all items in [left, k]
range are the smallest.
The k
-th element will have the (k - left + 1)
-th smallest value in [left, right]
.
Implements Floyd-Rivest selection algorithm https://en.wikipedia.org/wiki/Floyd-Rivest_algorithm
void
:
mutates input array
var arr = [65, 28, 59, 33, 21, 56, 22, 95, 50, 12, 90, 53, 28, 77, 39];
quickselect(arr, 8);
// = [39, 28, 28, 33, 21, 12, 22, 50, 53, 56, 59, 65, 90, 77, 95]
Relative error.
This is more difficult to calculate than it first appears [1,2]. The usual
formula for the relative error between an actual value A and an expected
value E is |(A-E)/E|
, but:
If the expected value is 0, any other value has infinite relative error, which is counter-intuitive: if the expected voltage is 0, getting 1/10th of a volt doesn't feel like an infinitely large error.
This formula does not satisfy the mathematical definition of a metric [3].
[4] solved this problem by defining the relative error as |ln(|A/E|)|
,
but that formula only works if all values are positive: for example, it
reports the relative error of -10 and 10 as 0.
Our implementation sticks with convention and returns:
|(A-E)/E|
in all other cases[1] https://math.stackexchange.com/questions/677852/how-to-calculate-relative-error-when-true-value-is-zero [2] https://en.wikipedia.org/wiki/Relative_change_and_difference [3] https://en.wikipedia.org/wiki/Metric_(mathematics)#Definition [4] F.W.J. Olver: "A New Approach to Error Arithmetic." SIAM Journal on Numerical Analysis, 15(2), 1978, 10.1137/0715024.
number
:
The relative error.
Approximate equality.
(number)
The value to be tested.
(number)
The reference value.
(number
= epsilon
)
The acceptable relative difference.
boolean
:
Whether numbers are within tolerance.


AI Soccer Code Generator
Choose the number of robots to train
Train single robot
Train multiple robots
This system is now under development. Please report bugs and request features in:
here
(Recommended browser: Google Chrome)


Video editing software doesn't have to be expensive. Whether you're an experienced home videographer or making your first foray into filmmaking, some of the best video editing software is yours to download and use completely free.
If you just want to cut a clip to size or add a new soundtrack, there are lightweight editors that will help you get the job done in seconds, and export the video in a format suitable for uploading online, or playing on any desktop or mobile device.
However, not all videos editors are created equal. Some prevent you from exporting projects longer than a couple of minutes, offer a very small selection of editing tools, or add unsightly watermarks to your finished work. Down Below i have rounded up only the software that delivers on its promises, making video editing easy and fun, with no compromises.
Puts professional quality tools within the reach of everyone – regardless of budget. The best free video editor available
Lightworks is an incredible tool that's published free with the noble aim of making professional quality video editing software available to everyone.
Lightworks is far more than a simple application for combining video clips and applying filters; it's been used to produce Hollywood movies including The King's Speech and Road to Perdition.
Hitfilm Express is another video editor that promises pro-level features for free – and it delivers. The basic editor is very
impressive, with advanced cutting tools, a great set of audio and video filters, layers and masking, compositing options, and chroma keying for creating green screen effects.
DaVinci Resolve is a free version of a premium video editing suite, but as with Lightworks, it's so feature-packed you probably won't miss the few tools it lacks.
DaVinci Resolve is a professional-grade video editor, with intuitive interfaces for editing, color correction, audio mastering and exporting. There's the usual multi-track timeline for arranging video and audio clips, plus context-sensitive trimming, and a vast collection of filters and effects.


{% extends "./base_sign_in.html" %} {% block title %}Logged Out | Cannlytics{% endblock %} {% block login_form %}
You have been logged out. Navigating home in 10...


Slider control represents a numerical range and a handle. The purpose of the control is to enable visual selection of a value in a continuous numerical range by moving an adjustable handle. Slider can also become a Range Slider. A Range Slider is a user interface control that lets the user to select a value range within a predefined numerical interval.
If the slider is editable, the hand cursor appears when the user hovers over the grip.
The user can change the slider setting in two ways:
The grip can be moved with or without increments based on the predefined steps.


--- layout: post title: Holy Triple tagline: " inside out" permalink: /holy-triple.html categories: [article, computation] tags: [holy, triple] ---


Speakers
-
Karthik Ram
testdat
-- Unit testing for tabular data -
Peter Murray-Rust
Liberating 100 million facts as CSV
-
Gabriela Rodriguez
Vozdata: Open data with the help of the community
-
Francisco Mekler
Public budget from PDF to CSV
-
Felienne Hermans
Spreadsheets Are Code
-
Alexandre Vallette
Hacking Public Infrastructures
-
Ingrid Burrington
Internet Groundtruth
-
Christopher Gandrud
Improving access to panel series data for social scientists: the `psData` package
-
Thomas Levine
Comma search, and Tom’s views on searching across data tables
-
Adam Retter
CSV Validation at the UK National Archives
-
Bernard Lambeau
Data Deserves a Language Too
-
Friedrich Lindenberg
Dr. Freezefile, or how I learned to stop rendering and freeze my apps
-
James Smith
CSVlint: publishing data that doesn't suck
-
Ed Freyfogle
A living hell: lessons learned in eight years of parsing the world's real estate data
-
Matt Senate
Data-Hacking with Wikimedia Projects: Learn by Example, Including Wikipedia, WikiData and Beyond!
-
Aaron Schumacher
Data and Truth
-
Olaf Veerman
Openrosa for call centers
-
Owen Jones
The COMPADRE and COMADRE population matrix databases
-
Javier Arce
So you have CSVs, now what?
-
Steven Beeckman
Opening Data Within Organisations
-
Brian Jacobs
Querying the sum of all human knowledge
-
Mitar Milutinovic
Collaborating on open dataset of all academic publications
-
Ana Carvalho, Sara Moreira, Ricardo Lafuente
Datacentral: Using Data Packages for static data portals
-
Nick Stenning
Data Packages: Put it in a box
-
Jeni Tennison
CSV on the Web
-
Jeremy Krinsley
Every Parse Is Sacred
-
Alf Eaton
VEGE-TABLE: the data table that grows
-
David McKee
XYPath and Messytables - Traversing Spreadsheets in Python
-
Paul De Schacht
Ease the pain of parsing data
-
Ashley Casovan, Antonio Acuna
How do we improve data quality internationally?
Presentations
-
10:10 - 10:30
CSV on the Web
GaleriaJeni Tennison
Jeni is the Technical Director at the Open Data Institute and the co-chair of the W3C’s CSV on the Web Working Group.The W3C CSV on the Web Working Group has been looking at how to more tightly specify CSV and the provision of metadata that makes it possible to validate CSV and convert it to other formats. This talk will describe the work of the Working Group and its current status.
-
Collaborating on open dataset of all academic publications
Room 1Mitar Milutinovic
Mitar Milutinovic is a PhD student at UC Berkeley researching ways to improve how researchers collaborate. Currently working on PeerLibrary, a platform for collaborative reading of academic publications.In PeerLibrary we are recognizing a need for an open dataset of all academic publications. Issues preventing building such dataset are multiple: multiple existing sources, many proprietary, conflicting entries, and legal issues with some parts of data (eg. full text). In addition, collaborative curation of this data is not yet possible. I would like to present what we are doing on this topic, but mostly learn from and about others.
-
The COMPADRE and COMADRE population matrix databases
Room 2Owen Jones
Owen is an Assistant Professor at the University of Southern Denmark where his research interests are in population biology and evolution. He co-manages the COMPADRE and COMADRE Plant and Animal Matrix Databases (www.compadre-db.org) that hold population dynamics data obtained from published literature and (will soon) make it available to all.Evolutionary biologists aim to make sense of population behaviour in species across the tree of life. However, the collection of animal and plant population data is laborious and costly so analyses that try to generalise across many species are not feasible unless data are shared among researchers, or obtained from the literature. I will report on the 20+ year journey of construction of two databases that collate demographic data from published literature on more than 2000 species with an aim of making it openly available to all. I will briefly outline why these data are important, describe the process of data production, and contemplate the lessons learned along the way.
-
10:35 - 10:55
Every Parse Is Sacred
GaleriaJeremy Krinsley
Jeremy was the first non-CEO/Co-founder to begin working with Enigma, and has been a part of the company from pre-seed money hacking to its current exciting position as a major public data interface. He is also a musician who performs and releases music regularly under various monikers.Lean ETL, unintentional ddos attacks, impossible parses, backdoor APIs, practices in humility and parsing tactics gleamed from three years as a lead parser at Enigma.io, a company that specializes in normalizing siloed public data.
-
Data Packages: put it in a box
Room 1Nick Stenning
Nick is a programmer. He is currently the technical director of Open Knowledge, and previously worked on the infrastructure of GOV.UKNumerous attempts have been made over the years to standardise data interchange formats. XBRL, ASN.1, X12, and other terrifying acronyms have caused thousands of developers years of pain and suffering. By contrast, CSV is simple, clear, and easy to use. But it can sometimes be useful to know a little more about the data you have at hand, ideally in a format that is machine-readable and standardised.
I work at Open Knowledge, where we have authored a number of simple standards to improve the portability and reusability of CSV-based data formats. I'll be talking about what data packages are, the Tabular Data Package specification, and some of the tools we've built to help with packaging and using data in these formats.
-
Hacking Public Infrastructures
Room 2Alexandre Vallette
Data-scientist, co-founder of SNIPS, his passion for machine-learning applied to geographical data and networks comes from his Phd in chaos theory. Open Data enthusiast, he is committed to show how open-innovation can lead to a better governance and economy, hence the creation of ANTS, an innovation lab for public institutions.Waste management is neither a sexy nor a scalable business. Most of the time these two facts are good enough to repel all high-tech startups, leaving a vital public service far away from what can be achieved with modern technology.
Recycling centers are overcrowded.  Here comes a bunch of hackers, data-scientists and makers dedicated in producing the best open solution ever. From Open Data, they build a predictive model indicating the best time to got to the recycling center. The information is piped to a mobile app that crowdsources where the waste are produced, what recycling center can take care of it and all the alternatives of reuse. And when more precise data is needed, they'll hack a solution to produce it.
-
11:30 - 11:50
Internet Groundtruth
GaleriaIngrid Burrington
Ingrid Burrington lives on an island off the coast of America.Computers used to be the size of entire rooms. While the hardware has gotten smaller, the space the network occupies has gotten bigger: we're surrounded by hidden infrastructure, from cell towers to fiber lines to networked cameras. For the last few months I've been working on a field guide to seeing that infrastructure, using a mix of sometimes unlikely data sources, including spraypainted street markings for excavation work and DOT permits. This is a talk about finding data in unexpected places, why that data matters, and the value of fieldwork in data-making.
-
Improving access to panel series data for social scientists: the `psData` package
Room 1Christopher Gandrud
Christopher Gandrud is a post-doctoral fellow at the Hertie School of Governance and member of the rOpenGov community working to increase the openness of government and social science data.Social scientists have access to many electronically available panel series datasets. However, downloading, cleaning, and merging them together is time-consuming and error-prone: for example, using Reinhart and Rogoff's data on the fiscal costs of the financial crisis involves downloading, cleaning, and merging four Excel files with over 70 individual sheets, one for each country’s data. Furthermore, because such datasets are not bundled in a format that is easy to manipulate, many of them are not updated on a regular basis.
In this talk, we introduce the
psData
package for the R statistical software. This package is being developed under the rOpenGov framework to solve two problems:- Time wasted by social scientists downloading, cleaning, and transforming commonly used data sets for their own research
- Errors introduced by data import and transformation scripts that are written individually and never shared across researchers
The
psData
package aims to address these problems by distributing easy to use R functions for downloading, cleaning, and merging datasets used by social scientists. The package focuses on panel series data, which are frequently found in political science and macroeconomics. It is hosted on GitHub and can be easily added to and modified by the community, which will allow to fix and patch distributed datasets to all users simultaneously, improving overall data quality.The team behind the rOpenGov/psData project currently includes contributors from universities in five countries, and many will be present in Berlin at the time of the conference.
GitHub repository: https://github.com/rOpenGov/psData
-
Comma search, and Tom’s views on searching across data tables
Room 2Thomas Levine
Thomas Levine is a dada artist who has recently been doing silly things with lots of spreadsheets.I see two main issues in the common means of searching across data tables. One issue is that the search is localized to datasets that are published or otherwise managed by a particular entity, and another is that the search mechanism doesn’t use information relating to the tabular structure of these data tables.
We can do better! Comma search indexes as many data tables as you want, regardless of where they’re from, and it uses the tabular structure of these data tables to search for them. You provide a spreadsheet as input and receive a list of spreadsheets in return. In this talk, you’ll learn how it works and how to use it.
-
11:55 - 12:15
Querying the sum of all human knowledge
GaleriaBrian Jacobs
Brian Jacobs is a designer and interactive developer. Currently a Knight-Mozilla Fellow at ProPublica in New York.Wikipedia can be a powerful open data resource. The official Wikipedia API provides access to page content and metadata but there are other projects that go much further, offering access to structured and Linked Data knowledge bases that enable advanced querying of data extracted from Wikipedia and beyond. Some projects include DBPedia, Freebase, Wikidata and the Encyclopedia of Life. Each are geared towards different audiences and have varying levels of ease of use and maturity. I'll talk about the strengths and weaknesses of each project and how to join and query for data across spatiotemporal, governmental, cultural, and scientific domains using Linked Data query languages.
-
Data Deserves a Language Too
Room 1Bernard Lambeau
Bernard Lambeau is a postdoc researcher at University of Louvain (Belgium). His current interests include software engineering and databases. He continuously tries to build bridges between these two domains, and frequently writes open source code towards this goal.The advent of the Internet and heterogenous distributed software call for new tools for validating, documenting, coercing and transforming data. Surprisingly, conventional programming languages provide weak support for this because they strongly focus on behavior. Indeed, conventional type systems are designed towards fast code execution but only provides some type safety from a pure data perspective. In contrast, data requirements often require capturing precise data type definitions (e.g. the set of "integers less than 100", or the set {M,F}) but call for no behavior per se.
This talk is about Finitio (finitio.io), a language strongly biased towards data. Finitio has a dedicated type system for capturing, validating and coercing data, and an interoperability layer to play nice with existing programming languages. The talk is a guided tour to Finitio; it also briefly discusses its motivation and origin.
-
CSV Validation at the UK National Archives
Room 2Adam Retter
Adam is an Open Source hacker, data architect and freelance consultant. Recently working with The National Archives (UK) he developed a CSV Schema Language and Validation tool (https://github.com/digital-preservation/csv-validator). He tries to help several W3C Working Groups as an Invited Expert, and is currently writing a book for O'Reilly on eXist (http://shop.oreilly.com/product/0636920026525.do).At the National Archives we have developed a simple Schema language for describing the data within a CSV file. This schema language which we call CSV Schema, enables you to make quite complex rule based assertions about the data within a CSV file. We have then built a tool (which we call CSV Validator) which will take this CSV Schema and a CSV file and validate it, producing a report of any problems.
Both the CSV Schema language (http://digital-preservation.github.io/csv-schema/csv-schema-1.0.html) and the CSV Validator tool are released freely as Open Source projects on GitHub. We believe that our tools will be of interest to others, such as those attending this conference.
-
12:20 - 12:40
CSVlint: publishing data that doesn't suck
GaleriaJames Smith
Software engineer with a passion for using web technology and Open Data to make a better future for everyone, with a particular focus on the environmental, social and democratic benefits.When 2/3 of CSVs on data.gov.uk aren't easily machine-readable, we have a problem. We need new tools that help data publishers to make usable data, and help them maintain it over time. CSVlint.io is such a tool, that validates CSV files, suggests improvements, and checks against datapackage schemas. Come and learn how it can be used to make data publishing better.
-
A living hell: lessons learned in eight years of parsing the world's real estate data
Room 1Ed Freyfogle
Ed is a co-founder of Lokku, the company behind Nestoria, OpenCage Data, and #geomob.I'm one of the founders of Nestoria - a search engine for residential real estate operating in nine markets and used by millions of people. We process (error check, de-duplicate, geocode, etc) over 10 million listings a day. given that purchasing a property is the largest financial transaction most people will ever face, you might think the industry would value high quality data. You would be very wrong. I'll share some of the challenges we've faced, the lessons we've learned, and hopefully provide a few entertaining examples of data gone bad.
-
Data-Hacking with Wikimedia Projects: Learn by Example, Including Wikipedia, WikiData and Beyond!
Room 2Matt Senate
Matt believes in the moral imperative to share knowledge far and wide. He is a Californian; he lives in Oakland and collaborates at the Sudo Room, a creative community and hacker space.How do Wikimedia project communities work? How do data hackers interface and interact with these communities? What is at stake and who are the stakeholders?
Join this talk to learn by example, through the story of the Open Access Signalling Project. This project's focus is to improve existing Wikipedia citations of Open Access research articles and other such academic works. This is one path among parallel initiatives (past and present) to improve how references work on Wikipedia, and across Wikimedia projects.
"A fact is only as reliable as the ability to source that fact, and the ability to weigh carefully that source." - WikiScholar proposal 'A free and universal bibliography for the world' (circa 2006 - 2010, status: closed)
-
14:00 - 14:20
Vozdata: Open data with the help of the community
GaleriaGabriela Rodriguez
Gabriela Rodriguez is an activist and hacker who loves the intersection between media and technology. She grew up in Uruguay and is passionate about free software and open knowledge. She co-founded the Uruguayan nonprofit DATA that works with open data and transparency in South America and is now a fellow for Knight-Mozilla Open News at La Nacion in Argentina.In 2014, La Nacion in Argentina launched VozData, a website to crowdsource senate spendings by asking people to transcribe information from 6000 scanned PDF documents from the senate. This is a talk about the code that created that website and it can be used with any document set and any data you may need to take from them.
-
Liberating 100 million facts as CSV
Room 1Peter Murray-Rust
Peter MR from Cambridge, a chemist, bulds systems and communities to liberate knowledge. Currently a Shuttleworth Fellow, sponsored for contentmine.org liberating 100 million facts from scientific literature.The ContentMine aims to liberate facts from the scientific literature through Natural Language Processing, Computer Vision and good old Regular Expressions. At present we are liberating chemistry, biodiversity, species, places, dates, not only from text but also diagrams (PDF, PNG, etc.) Everything is Free/Open (software, specifications and output) and we are working to build a bottom-up community where domain experts can build on our infrastructure.
-
So you have CSVs, now what?
Room 2Javier Arce
Half web developer, half illustrator, half bad at dividing. Map maker at @CartoDB.We have built an online mapping service that lives and bleeds CSVs. CartoDB supports drag and drop import of CSVs and in seconds gives you interactive maps of your data. From there, you can share the maps or share links to export your data as new CSVs! It also gives you SQL access to your data, so you can filter and manipulate data and then provide those results as CSV exports! Getting data into CartoDB isn't limited to CSVs on your desktop, you can also point the service at files hosted online and tell it to sync your maps to that source file. This can give you a real-time map of data hosted on servers all around the world! Add on top of it the ability to georeference your CSVs by administrative areas, named places, IP addresses, and many other attributes, and you can turn almost any CSV into a mappable dataset. Here, I'm going to show you how CartoDB is built on and contributes to an ecosystem of CSVs.
-
14:25 - 14:45
Dr. Freezefile, or how I learned to stop rendering and freeze my apps
GaleriaFriedrich Lindenberg
Friedrich is a Knight International Journalism Fellow with Code for Africa, where he works with investigative journalists to develop tools and resources for data-driven journalism.We would all like for our applications to run off dat-powered real-time feeds. More often than not, however, the data we serve doesn't change that often - or our data apps are one-off presentations anyway.
In those cases, a dynamic server often isn't needed to power an application - they can just as well run off flat files and a cheap CDN. In this workshop I want to present some recipes and tools for making static file applications, but also have a discussion to learn from others and discuss some of the missing bits for making truly great flat-file apps.
-
Opening Data Within Organisations
Room 1Steven Beeckman
Steven is a technical project officer and analyst at the belgian Ministry of Defence and responsible for an internal open data platform. To keep sane he hacks on node.js and Android app prototypes which he somehow manages to almost never ship. He is the founder of the Node.js User Group Belgium and a conductor for StartupBus.Even within government agencies opening data is a hot issue. Confronted with functional silos and difficult access to another silos data, the belgian Ministry of Defence started building an internal open data platform powered by open source software and csv files in 2009.
This talk will provide a brief technical overview of the platform used to distribute the data (including the role of csv files), the volume of data we ship nightly, whether or not we killed the silos and what it's like to operate within a special kind of enterprise.
-
Data and Truth
Room 2Aaron Schumacher
Aaron lives and works in a younger Alexandria, teaches in the District of Columbia, and is more or less scientific with data. He enjoys tiramisu and breakdancing.If data is fallible, can anything be known? Moreover, how are we going to get a reasonable result from this new dump and still have time for lunch? What is the difference between "cleaning" and "analysis"? Will epistemological theorizing improve our quotidian experiences working with data, or is it all just sesquipedalian nonsense? Does skeptical coding bring us closer to the truth?
-
14:50 - 15:10
Datacentral: Using Data Packages for static data portals
GaleriaAna Carvalho, Sara Moreira, Ricardo Lafuente
Transparência Hackday is the first open-data collective in Portugal. Since 2010 we organize monthly hackdays to open up public data and ultimately make our society better informed.Datacentral is a simple system we made for CentralDeDados.pt, an independent public data hub in Portugal. Making use of the Data Package standard, we wrote a proof-of-concept static site generator that pulls each CSV dataset from a Git repository and generates the site based on the contained metadata (using daily cron jobs to re-generate and update the site). The result is an easily deployable, replicable and complete HTML5 data portal site.
-
Hacking Education: Public budget from PDF to CSV
Room 1Francisco Mekler
Telemático. Trabajo en http://www.imco.org.mx. Paco = policía en Chile. Proud to work directly in @mejoratuescuela.As part of mejoratuescuela.org, we opened public data that was given in PDF's and obstrusive websites. We made an study based on this data and we achieved public policy changes, we helped the open data movement and community in México. Its incredible the impact we made only by a team of 3 people and I want to share my side of the story.
-
Room 2testdat
-- Unit testing for tabular dataKarthik Ram
Karthik Ram is a co-founder of ROpenSci, and is currently a data science fellow at the University of California's Berkeley Institute for Data Science.In this talk I will demo a new R package,
testdat
, that provides a suite of functions that allow users to unit test tabular data, much like unit testing for code. Our package allows researchers to write expectations, as one would do with code, and quickly identify cryptic issues, especially when reading large numbers of files. We also describe the major functionality oftestdat
along with a few use-cases and related tools. (full abstract) -
15:45 - 16:05
Openrosa for call centers
GaleriaOlaf Veerman
Olaf is the founder of Flipside, a Lisbon based agency that, using open source technology, builds web-based tools to help organizations create social impact.Openrosa has emerged as a popular standard for (mobile) data collection with a growing eco-system of applications and services. The proposed talk will focus on Airwolf, an Openrosa compatible tool developed for Text to Change, an organization that among others operates a small call center in Uganda. It will explain for what kind of data collection efforts a call center is the appropriate method and detail some of the challenges that Airwolf has to tackle. These include offline capabilities, anonymization of results and data export that is both useful for statisticians and readable for less technical people.
-
XYPath and Messytables - Traversing Spreadsheets in Python
Room 1Dave McKee
Dave - also known as Dragon - is repeatedly told he's a Data Scientist, but still doesn't believe it. He pulls data out of websites at ScraperWiki for a living and dresses up as a wizard at the weekend.Real-world spreadsheets of data come in many formats and with widely varying headers; we need a language to navigate through them to locate the data which we need.
Inspired by XPath and building upon OKFN's Messytables, XYPath isn't quite that language, but is a working prototype to explore what it might look like.
-
VEGE-TABLE: the data table that grows
Room 2Alf Eaton
Writing software to improve the process of publishing, finding, collecting and reading scientific literature; currently senior developer at open access scientific journal PeerJ.A vege-table is a data table: each row of the table is an item in a collection, and each column is a property of those items. These properties are all JavaScript functions, so their values can be computed or fetched from remote resources, and merged from different sources. This talk will describe the project’s background - including limitations of current tools for building, manipulating and publishing data tables - and examples of its use with real data.
-
16:10 - 16:50
Spreadsheets Are Code
GaleriaFelienne Hermans
Felienne is a professor in software engineering. Her PhD dissertation explores the idea that spreadsheets are code, and should be treated as such: with tests, refactoring and quality metrics. In weekends, she teaches kids how to program Lego robots.Many people consider spreadsheets to be data, but more often, they are actual programs. In this talk Felienne explains why and also provides help in how to deal with 'legacy' spreadsheets.
-
Ease the pain of parsing data
Room 1Paul De Schacht
Paul De Schacht is a research engineer at Amadeus, where he brings travel data to life. He is happy grokking large amounts of data using emerging technologies.Open data does not mean that the data can easily be consumed. Every source has a different format that requires a dedicated parser. I've recently open sourced 2 tools (https://github.com/pauldeschacht/pdf2csv and https://github.com/pauldeschacht/paxparser) that help the extraction and standardization of diverse formats. I will briefly discuss these projects, but mostly I hope to build a community around such tools.
-
How do we improve data quality internationally?
Room 2Ashley Casovan and Antonio Acuna
This is a joint presentation from the Government of Canada and the Government of the United Kingdom.Open data isn’t a new concept, at least to those attending this conference. Now that more governments, agencies, and organizations are on board to release valuable data and information, what standards, guidelines, and other policy instruments need to be established in order to make that data useful to the public? Given that nations have similar data types, creating these policies with an international lens would create greater interoperability and lead to increased use. How do we get here? Who is the governance body? Come to this interactive presentation to share, learn, and move this conversation forward!


Easy Data Structures
Made with 🍕 by Chris (Topher) Anselmo
View on GitHub
JSON
powered by ace
GML
settings
Include
var


It Takes a Village
What Moves Us, What Guides Us
Why It Matters
Disabilities isolate people. They also isolate their families. Those with disabilities usually need extra help to get out and join the rest of the world, but because the expense of special equipment is so high, they can't afford to. That's why accessible online content is so, so valuable. If someone can't get to the office, then, the office can come to them. Online. We can bring opportunities to those who are otherwise able to go to the opportunities.
Online Means: If you can't get to us, we can still reach you. With help. With resources. With knowledge. This mapwas generated by Opportunity 360's Opportunity Zone Eligibility Tool in which areas of hardship and poverty are highlighted with a goal of driving capital to low-income communities. There's a strong relationship between disabilitity and poverty; in poverty, access to transportation and time to accomodate health problems are both problematic. Content that is online removes the barriers of health and wealth needed to get that precious content.
Money Matters
Poor health steals the wealth of students with disabilities, and also steals the wealth of their families. Poor families have it even harder. Putting assets online helps level the playing field.
Among those ages 35 to 44, 43% of those living below the FPL have lost one or both parents, compared to 28% for those living in households with an income-to-poverty ratio of at least 400% of the FPL.
Source: U.S. Census Bureau Parental Mortality is Linked to a Variety of Socio-economic and Demographic Factors
Words To Live By
Luis Morais 9:19 pm on August 26, 2005 | A List Apart - PDF Accessibility


SafeDriver
One of the latest projects by Isaac aimed at keeping tourists safe while driving in New Zealand by using a mobile app
ScoreOnline
The easy and efficient way to score sports games. Manage your teams, view scoreboards, score your club games and more. All in realtime on your smartphone.
New Zealand News
An alternate way to read the New Zealand Herald. This app has a easy, elegant and simple to use interface with additional features to enhance your news reading experience.
Isaac's Computer Tips
Find out about using your computer, performing advanced tasks and see whats new in the latest software and hardware with reviews, previews and more. Available in an easy to watch and understand video format.
Cat of the Week
View the best selections of cats, every week. Vote for your choice or submit your own.