В чём графики рисовать в браузере?

yolki

Источник данных - ну пусть будет json, берутся из базы данных.
Данные - временные ряды. Ну например - стоимость барреля в килограммах гречки, ежесекундные котировки :D
чё-нибудь простенькое и со вкусом.
ща вот решил расширить кругозор и поиграться в Node.js & AngularJS .
D3 - чё-то слишком монструозно кажется
гугль советует Google.Charts
chartjs норм?
n3-charts симпатично выглядят
Аналитику к графику прикручивать имеет смысл на серверной части или на клиенте?
Хочу приложить всякие сколзящие средние, дисперсию и т.п.
Лучше это сделать отдельным набором данных с сервера или на клиентской части вычислять?

Papazyan

c3
Гугл чарт сначала шлет данные в гугл, вообще оборзели.

Papazyan

И да, непонятно, почему D3 тебе кажется монструозным, но разбираться с аngular ты готов.

Werdna

чё-нибудь простенькое и со вкусом.
http://plugins.jquery.com/flot/
просто и со вкусом.
и ещё много библиотек. советую не связываться с платными, так как бесплатных свободных хватает на все случаи жизни.
не вздумай всякое говно типа гугл чартса, это устаревшая фигня. все современные либы строят графики прямо в браузере и все они ещё интерактивные, можно тыкать, метки ставить и всё очень няшно.

Werdna

Лучше это сделать отдельным набором данных с сервера или на клиентской части вычислять?
Я бы сделал на клиенте, потому что ты раз передал массив данных и дальше что хочешь считаешь, а так ты получается на сервер запрос гнать будешь чтобы (a+b)/2 посчитать.

SergeRRRRRR

когда то давно юзал amcharts

6yrop

Делай всё сам без либ.

marat7256

Аналитику к графику прикручивать имеет смысл на серверной части или на клиенте?
Хочу приложить всякие сколзящие средние, дисперсию и т.п.
Лучше это сделать отдельным набором данных с сервера или на клиентской части вычислять?
Зависит от задачи. Если нужно много интерактива, то имеет смысл разделить задачи между сервером и клиентом. Если много клиентов смотрят одно и тоже, то отдать серверу. Много нюансов, короче. Подсказывает КО.

Werdna

http://www.highcharts.com/
платные, смысла нет выбирать именно их, весь функционал есть в бесплатных же. :)

uncle17

И?
Насколько я знаю, у highcharts функционал не зависит от наличия лицензии. И его вполне хватает.

Kira

я пару лет не интересовался это темой, но тогда самым лучшим вариантом из бесплатных был jqplot

uncle17

jqplot
И таскать за собой jQuery, даже если он не нужен

Kira

И таскать за собой jQuery, даже если он не нужен

ой, да по нынешним временам отказ от jquery это такое байтоёбство

marat7256

Используй бесплатно, только не убирай с плотов ссылку на их сайт.

kill-still

Нарисуй сам на SVG. Там делов-то.

kill-still

Если нужна поддержка IE8, то вместо swg можно использовать библиотеку Raphael - она в зависимости от браузера делает или svg, или shapes

stm5872449

ой, да по нынешним временам отказ от jquery это такое байтоёбство
А еще можно поставить ссылку на гугловый сторадж jquery, и тогда оверхед от нее будет ровно 0 всегда.

Papazyan

ой, да по нынешним временам отказ от jquery это такое байтоёбство
По нынешним временам jquery устаревшая технология.

marat7256

А пацаны то не знают!

Papazyan

Да, в моде реакт фреймворки + новые фичи типа компонент в DOMе.

Kira

ну так я и пишу что "пару лет назад". Что там сейчас с рисованием графиков под реакт/ангуляр/кнокаут я хз.

6yrop

Да, в моде реакт фреймворки + новые фичи типа компонент в DOMе.
Если каждые два года меняются технологии, на них кроме туториалов успевают что-нибудь написать?

luna89

Если каждые два года меняются технологии, на них кроме туториалов успевают что-нибудь написать?
jquery появилась в 2006 году, а React в 2013 - разница 7 лет, а не два года. К тому же это не технологии, а библиотеки размеров в 100Кб. Ничто не мешает тебе использовать в приложении сразу обе.

6yrop

jQuery да библиотека, а React это фреймворк, который выворачивает всё по другому.

6yrop

О прогрессе веб технологий можно почитать прямо у нас в Каранте

luna89

А пацаны то не знают!
В jquery половина кода реализует самодельный движок селекторов, который сейчас во всех браузерах доступен нативно. Кроме того, этот движок селекторов решает несуществующую сейчас проблему парсинга DOM. Раньше, когда не было server-side js, приходилось генерить на сервер html а в браузере его парсить. Сейчас, благодаря ноде, можно не решать обратную задачу выделения данных из html, а решать только прямую задачу - из данных генерить html

6yrop

на самом деле, основной фичей jquery была кросбраузерность. Сейчас это, да, уже не столь актуально.

luna89

а React это фреймворк, который выворачивает всё по другому
Я думаю, ты из-за близкого знакомства с продуктами компании Microsoft потерял веру в программирование и считаешь теперь, что если кто-то написал какой-то код, то значит он злокозненный архитектор, который портит жизнь простым программистам.
Но на самом деле это не так - жизнь идет своим чередом, люди пишут полезные библиотеки, которые реально облегчают жизнь.

stm5872449

Раньше, когда не было server-side js, приходилось генерить на сервер html а в браузере его парсить. Сейчас, благодаря ноде, можно не решать обратную задачу выделения данных из html, а решать только прямую задачу - из данных генерить html
Щито? При чем тут нода? :confused:

6yrop

Мышиная возня, да, идет своим чередом. Выше я дал ссылку, как на яндекс картах сначала убрали фичу, а потом преподнесли как новую.

Papazyan

Да ща вообще происходит сдвиг парадигмы в области программирования сравнимый с массовым переходом на менедж языки. Например, опен сорс движение набирает такой момент, что скоро коммерческие приложения тупо будет невозможно писать без него.

6yrop

Я думаю, ты из-за близкого знакомства с продуктами компании Microsoft потерял веру в программирование и считаешь теперь, что если кто-то написал какой-то код, то значит он злокозненный архитектор, который портит жизнь простым программистам.
Но на самом деле это не так - жизнь идет своим чередом, люди пишут полезные библиотеки, которые реально облегчают жизнь.
Всё ровно наоборот. Я почувствовал вкус настоящего программирования, благодаря C#. И то, что происходит на js для меня это мышиная возня. К сожалению, Майкрософт сливает Windows, поэтому на C# не на чем писать пользовательский интерфейс.

luna89

И то, что происходит на js для меня это мышиная возня.
В области программирования UI сейчас происходит революция. Например, год назад о таких штуках можно было только читать в каком-нибудь Out of the Tar Pit.

6yrop

В области программирования UI сейчас происходит революция. Например, год назад о таких штуках можно было только читать в каком-нибудь Out of the Tar Pit.
Этот как с лекарством от рака, каждые n лет происходит революция.

6yrop

Out of the Tar Pit.
Пролистал заголовки в статье.
"5 Classical approaches to managing complexity"
Почему в списке нет аля ReSharper? Это же отличное средство для управления сложностью.

luna89

Пролистал заголовки в статье.
"5 Classical approaches to managing complexity"
Почему в списке нет аля ReSharper?
Статья написана в 2006 году, тогда уже был эклипс для джавы. Такие инструменты не уменьшают сложность, наоборот - становится очень просто гнать бессмысленный тавтологический код тысячами строк в день, ты сам недавно приводил пример

Dasar

Такие инструменты не уменьшают сложность, наоборот - становится очень просто гнать бессмысленный
Не смешивай организационные проблемы с техническими. Проблема в людях и в неумении их организовать, а не в инструменте.

luna89

Пролистал заголовки в статье
Там в каком-то месте предлагается хранить в программе только ввод пользователя, а все остальное вычислять.
Так работает фреймворк redux, на который я кидал ссылку. Там надо каждое событие в приложении представить в виде структуры данных, например в TODO MVC удаление todo было бы представлено как {type: 'REMOVE', todoId: 5}. Программа состоит из двух чистых функций:
- render: State -> Virtual DOM
- applyAction: State -> Event -> State
В developer tools можно просматривать список событий, кликать на событие и откатываться на момент времени, когда оно произошло. Это открывает ряд возможностей, типа выбрать пару моментов в программе и сравнить состояния, просмотрев diff, ну и так далее

luna89

Не смешивай организационные проблемы с техническими. Проблема в людях и в неумении их организовать, а не в инструменте.
Не очень понимаю, о чем ты. Представь, ты нанимаешь человека и даешь ему задачу, в рамках которой надо объявить структуру данных из пяти полей. Этот человек пишет геттеры, сеттеры, билдер паттерн, юнит тесты на геттеры и сеттеры, и юнит тесты на билдер паттерн. Кроме того, он подключает какие-то плагины к юнит тест фреймворку которые позволяют более удобно тестировать геттеры и сеттеры.
Тут нельзя человека организовать, потому что его надо переучивать программированию.

6yrop

В developer tools можно просматривать список событий, кликать на событие и откатываться на момент времени, когда оно произошло. Это открывает ряд возможностей, типа выбрать пару моментов в программе и сравнить состояния, просмотрев diff, ну и так далее
Я правильно понимаю, что это мега инструмент для тех, кто рассматривает программирование как процесс внимания ошибок?

Bibi

плюсуюсь к highcharts
всех, кто советует делать вручную, слать лесом

6yrop

Представь, ты нанимаешь человека и даешь ему задачу, в рамках которой надо объявить структуру данных из пяти полей. Этот человек пишет геттеры, сеттеры, билдер паттерн, юнит тесты на геттеры и сеттеры, и юнит тесты на билдер паттерн. Кроме того, он подключает какие-то плагины к юнит тест фреймворку которые позволяют более удобно тестировать геттеры и сеттеры.
Если речь о пяти полях в базе, то мы нанимаем либо новичка, либо человека, который пишет:
ALTER TABLE SomeTable ADD A, B, C, D, E
В C# слова A, B, C, D, E появляются (полу)автоматически.

Dasar

Представь, ты нанимаешь человека и даешь ему задачу, в рамках которой надо объявить структуру данных из пяти полей. Этот человек пишет геттеры, сеттеры, билдер паттерн, юнит тесты на геттеры и сеттеры, и юнит тесты на билдер паттерн. Кроме того, он подключает какие-то плагины к юнит тест фреймворку которые позволяют более удобно тестировать геттеры и сеттеры.
Мусор на входе (неполная постановка задачи) - мусор на выходе.
Почему ты считаешь, что исполнитель - телепат? Почему ты исходишь из того, что пожелания заказчика совпадут с видением исполнителя на первой итерации?
Тут нельзя человека организовать, потому что его надо переучивать программированию.
Обучение - это часть организованности. Сюда же мотивирование, разъяснение целей, донесение принятой культуры и т.д.

luna89

Щито? При чем тут нода?
Раньше единственным способом написать приложение, которое индексируется браузером, но при этом содержит js-код, была генерация html на сервере и написание js кода который потом этим html манипулировал.
Благодаря ноде можно генерить html на клиенте и сервере одним кодом. Если более-менее правильно организовать, то можно сделать сайт который работает с выключенным js без дублирования кода.

beluchy

мне надо было отрисовывать в браузере на интерактивном графике десятки тысяч точек (данные с АЦП)
google charts тормозят уже на нескольких тысячах точек
вот эта либа реально решила задачу: http://dygraphs.com/

yolki

Да, смотрел на dygraphs.
Скорее всего на них и остановлюсь

Rinia

Да, смотрел на dygraphs.
Делал проект на них, очень быстрая и неглючная библиотечка, функционал бедный.

6yrop

Out of the Tar Pit

А как можно понять систему, в которой стопицот полей?

yolki

получилось как-то так:
http://www.greenone.ru/meteo/
данные с датчика DHT22/AM2302 собирает raspberry pi каждые 2 сек и отсылает в базу данных на vps-ке в Нидерландах :o
запрос /meteo/data возвращает 10-минутный averaging
'SELECT '+
' avg("T") as "T" ,'+
' avg("RH") as "RH",'+
' to_timestamp(600*FLOOR((extract(epoch from ts))/600)-3*3600) as "ts" '+
'FROM temperature '+
'GROUP BY 3 ORDER BY 3 DESC LIMIT 1500;' ,
на графике для сглаживания ещё есть 10-отсчётное скользящее среднее, можно поиграться с величиной окна осреднения внизу слева в окошке.
бэкенд на ноде :cool:
Кому интересно, что происходило 26.08.2015 примерно в 01:40 - это я датчик для тестов засунул в морозилку (поставить сглаживание=1 для пущего эффекта)

6yrop

Out of the Tar Pit.
Статья хорошая. Но есть важные замечания.
В статье два типа данных Input и Derived. Автор статьи хочет достигать такого же результат как если бы re-deriving the data as required.
Тип данных derived надо разбить еще на два. Первый подтип — derived данные только для отображения, но не используются в вычислениях в качестве аргументов. Второй подтип — derived данные, которые используются в вычислениях в качестве аргументов.
Для первого подтипа момент "as required" означает момент отображения на экран. В реальных приложениях данные первого подтипа можно переотображать всегда все целиком или крупными подмножествами. Поэтому accidental сложность, связанную с этим подтипом, достаточно просто обойти.
Со вторым подтипом сложнее. Вычисления образуют граф, и надо соблюдать топологическую сортировку. Удобно пользоваться языком, в котором нельзя использовать переменную до ее инициализации и нельзя перезаписывать переменные, помеченные как readonly. Если для derived данных использовать неизменяемые переменные, то топологическую сортировку проконтролирует сам язык. Поэтому и здесь accidental сложность уходит (человеку не надо напрягать ей голову).

luna89

Поэтому и здесь accidental сложность уходит (человеку не надо напрягать ей голову).
Обычные языки программирования не решают проблему реактивности - когда меняются основные данные перевычислять зависимые.

6yrop

Обычные языки программирования не решают проблему реактивности - когда меняются основные данные перевычислять зависимые.
Да ну. Значение C зависит от A и B. Всегда получаем пересчитанное C. :smirk:
 
class Foo
{
int A {get; set;}
int B {get; set;}
int C { get { return A + B; } }
}

Ivan826

Флудильню развели какую адовую.
Ты, надеюсь, хотя бы в процессе понял, что node.js и angular.js несколько совсем разные вещи?
Меня всегда умиляет, когда люди их мешают.
По делу
Ты express.js для вывода одной странички юзаешь? Силён. От jade не офигел по первости?
В образовательных целях рекомедную сделать без експресса — будешь лучше разбираться о том как работает нода и где какие данные окружения хранятся
Или, учитывая что ангуляра на паге твоей нету, ты на него забил?
А я хотел порекомендовать http://chinmaymk.github.io/angular-charts/
года полтора назад юзал, понравилось. Но, думаю, что-то более интересное могло появится.
Ваще когда что-то делаешь в ангуляре — сначала гуглишь "angular нужная_тебе_фича". С вероятностью 90% оно уже написано.
Ровно тоже самое с нодой. Сначала гугль, и с огромной вероятностью no problem man (npm) тебе поможет.
Но не путайт node.js и express.js, тем более angular.js.
node.js — платформа, сервис, компилятор по сути
express.js — серверный фремворк
angular.js — вообще фронт фреймворк
у последних 2 общее — только язык программирования. Всё остальное - совсем разные вещи.
ангуляр и нода — примерно как qt и gcc

luna89

jQuery да библиотека, а React это фреймворк, который выворачивает всё по другому.
Цитата из документа написанного создателем jquery:
Minimize use of jQuery.
Never use jQuery for DOM manipulation.
Try to avoid using jQuery plugins. When necessary, wrap the jQuery plugin with a React component so you only have to touch the jQuery once.

6yrop

А что тебя удивляет? Это же документация к реакту: style-guides/style/react.md
Как я уже писал, сейчас jQuery уже не очень нужен, кросбраузерность уже и на ванильном js
Оставить комментарий
Имя или ник:
Комментарий: