Например TDA7294

Форум РадиоКот • Просмотр темы - Конкурс: Поздравь Кота по-человечески 2017!
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 19:28:51

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 43 ]  1, ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Чт авг 10, 2017 15:37:58 
Дух сайта
Аватар пользователя

Карма: 64
Рейтинг сообщений: 58
Зарегистрирован: Вт авг 23, 2005 15:22:21
Сообщений: 198
Откуда: Обитаю везде
Рейтинг сообщения: 0
Мяу, товарищи!
Лето подходит к концу, а у нас все только начинается!
12 лет, как мне кажется, вполне себе повод, чтобы сделать что-то мощное, важное, неожиданное, в общем, чтобы всем поплохело. Например, дизайн сайта сменить.
Добро пожаловать на наш ежегодный Конкурс "Поздравь Кота по-человечески2017!"!
Конкурс проводится в честь моего Дня рождения, как вы уже наверное поняли. И в этом году мне исполняется 12 лет. Возраст для кота вполне приличный, кстати. Но не смотря на внушительные цифры, ощущаю я себя до сих пор слегка подросшим котенком.
Ну да хватит лирики - её в миску не положишь и лоток не наполнишь.
А вот кто нам помогает с мисками, я сейчас и расскажу, кстати.

Генеральный спонсор нашего Конкурса - компания ПРИСТ. Очень признателен чувакам из ПРИСТа за наше длительное сотрудничество: вот уже много лет, они предоставляют отличные призы для наших участников. Да и вообще, они клевые и на священников совсем не похожи
Еще один старожил Конкурса - компания МАСТЕРКИТ - ваше творческие позывы они могут облечь во вполне материальную форму. Если хочется "что-нибудь сделать, но что - непонятно", зайдите к ним, наверняка набредете на что-то интересное.
Интернет-магазин COMPACTtool пока еще нельзя назвать старожилом, но и новичком на нашем Конкурсе он тоже не является. Куча разнообразных нужных, а подчас забавных штуковин у них на сайте - есть из чего выбрать.
Интернет-магазин TIXER.RU - наши давние друзья, коллеги, партнеры, собутыльники. Электронные компоненты, модули и куча всякой электронной всячины.
Лаборатория РадиоКОТструктор - электронные наборы для самостоятельной сборки. Купил-собрал-заработало - с их наборами так всегда.
Спасибо вам всем за поддержку и понимание мохнатой души нашего сообщества.

Ну и давайте же наконец посмотрим, что получат наши призеры - призы, товарищи!
Автор работы, занявшей 1-е место получит вполне традиционный приз - цифровой осциллограф, а именно: MDO-72072EG - осциллограф-анализатор спектра.
Изображение
Оторви-хвост-машина! Уже завидую тому счастливчику, который через пару месяцев будет нежно сжимать его в своих лапах.

Автор работы, занявшей 2-е место получит, как это ни странно, тоже осциллограф: АКИП-72206B - USB-осциллограф, компактный, но с шерстью у него все в порядке.
Изображение

Автор работы, взобравшейся на третье место получит совершенно универсальную вещь: мультиметр HT Italia FLASHMETER - в хозяйстве нет более полезной штуки, чем мультиметр, это вам любой кот скажет.
Изображение

А теперь, дражайшие товарищи, перейдем к огроменной куче поощрительных призов. Как обычно, номинации, за которые будут выдаваться эти призы будут определены в конце Конкурса, в том числе, будут учитываться и ваши предложения.
Всегда можно зайти в эту тему и сказать: "Предлагаю выдать мешок макарон и кувалду в номинации "Мы от него балдеем!" автору статьи "Как я собирал черешню с помощью микроконтроллера"". И есть большая вероятность, что так и произойдет.

Итак, призы от компании МАСТЕРКИТ:
BM2114dsp - DSP процессор для цифровой обработки звука на базе ADAU1701. Такого вы в Китае не найдете, эксклюзивная штука, специально для вас.
Изображение

MP8030R - Встраиваемое термореле с лицевой панелью 2 кВт, 10А. Хозяйке на заметку.
Изображение

BM5402 - Мультифункциональный модуль управления
Изображение

А теперь призы от интернет-магазина COMPACTtool:
NanoPi 2 на базе 4х-ядерного процессора SAMSUNG Cortex-A9.
Изображение
ОЗУ: 1 Гб DDR3
Встроены Wi-Fi и Bluetooth
Загрузка Android или Linux с флеш-карты
Встроенные HDMI и LCD интерфейсы
Полностью совместим с Raspberry PI портами GPIO и Arduino.

Джойстик Esplora в количестве 3 штук. Оптом, как известно - дешевле.
Изображение
С датчиком освещения и температуры, микрофоном и гироскопом.С возможностью поддержки LCD. Позволяет управлять устройствами во всех направлениях.
Поддержка SPI.
Процессор: ATmega32U4
flash: 32 KB
EEPROM: 1 KB
Питание: 5В

LilyPad модуль с контроллером 328 ATmega328P - 2 штуки
Изображение
LilyPad модуль основной с контроллером 328 ATmega328P.
Питание: 2,7-5,5 В
Входы/выходы: 20 шт
Флеш.: 16 Кб
ОЗУ: 1 Кб.
Работает с ПО Arduino
Размеры: 50х4,5 мм

LilyPad модуль с контроллером ATmega32U4 и USB в количестве 2 штук.
Изображение
Разъем JST для подключения аккумулятора.
Питание: 3,8-5 В
Входы/выходы: 13
Флеш: 32 Кб
SRAM: 2.5 Кб
EEPROM: 1 Кб
Тактовая частота: 8 МГц
Размеры: 50*6,5 мм

Не устали еще читать? Крепитесь, осталось чуток.

Приз от магазина TIXER.RU:
Обучающий набор Arduino. Орешек знания тверд, как известно. Но расколоть его таки можно.
Изображение

Приз от лаборатории РадиоКОТструктор:
РК-А01, Набор для сборки оконечного усилителя, мощностью 100Вт. Орет страшно, громче, чем мартовский кот.
Изображение

Фу, вроде все, с призами покончено! Хотя, не исключены сюрпризы, разумеется.
Теперь о том, что вы должны сделать, чтобы получить что-то из всего этого великолепия.

В период с 21 августа по 21 сентября вы должны придумать конструкцию (электронную, понятное дело), написать о ней статью в нашем КотоРеде и отправить её мне. И не забудьте поставить галочку - Я участвую в конкурсе "Поздравь Кота по-человечески 2017!".
Статьи будут публиковаться по мере их поступления, раз в сутки, за исключением выходных дней.
Товарищи, не нужно присылать статьи раньше или позже указанных сроков - они не попадут на Конкурс.
С 23 сентября начнется самая веселая часть меропринятия - общенародное голосование за присланные статьи. Голосование закончится 29 сентября.
И, ура, 1 октября мы объявим всех победителей и призеров нашего Конкурса.
Ограничения? Никаких. Тематика конструкций может быть любая - от автоматического летающего тапка для любимого кота до самогонного самовара с USB. Количество статей от одного автора может быть совершенно любым. Но из трех главных призов, он сможет получить только один. Невозможно быть одновременно на первом и третьем месте, например - что-нибудь может треснуть и отвалиться. Мы же не хотим несчастных случаев на производстве.

Собственно, вот и все условия - чертовски просто, правда ведь? Но если вдруг вам что-то непонятно и вы что-то хотите спросить - не стесняйтесь, задавайте вопросы в этой самой теме.

_________________
МЯЯЯЯЯУ!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Чт авг 10, 2017 17:46:55 
Модератор
Аватар пользователя

Карма: 23
Рейтинг сообщений: 331
Зарегистрирован: Пт янв 11, 2013 19:19:26
Сообщений: 2117
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
До окончания конкурса и вручения призов: авторство статей - инкогнито?
Открытие тем по Разработкам - запрещено?

_________________
=========
Правила Форума ЗДЕСЬ _____ Правила раздела БАЗАР ЗДЕСЬ _____ Если вы продаете, прочтите ЗДЕСЬ

Редко появляюсь. Если вопрос не личного характера пользуйтесь кнопкой "!".


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Чт авг 10, 2017 17:53:39 
Админ
Аватар пользователя

Карма: 109
Рейтинг сообщений: 458
Зарегистрирован: Вт авг 23, 2005 15:23:25
Сообщений: 10815
Откуда: Москва
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Ну, пожалуй, авторство мы особо хранить в тайне не будем, а вот все обсуждения после завершения Конкурса, да.

_________________
А вот футболки кому? Кружки, значки!
Мысли Пачкают Мозги


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Пт авг 11, 2017 02:27:59 
Собутыльник Кота
Аватар пользователя

Карма: 22
Рейтинг сообщений: 88
Зарегистрирован: Чт мар 26, 2009 04:35:04
Сообщений: 2772
Откуда: Москва
Рейтинг сообщения: 0
Я в день рожденья не устану
Желать вам сливки и сметану!
Мышей потолще и нирвану
После обеда на диване!
(с) моё
(у меня тоже в среду был день рождения и кот я ещё тот :) )

_________________
Изображение (Аль Котоне, кот ещё тот, Cattus Sapiens)
Усы и хвост - мои документы.
Кот - авторитет! Скажет "Мяу!" - не поспоришь. (скажи мне "мяу" и я скажу кто ты)


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Чт авг 24, 2017 20:10:52 
Модератор
Аватар пользователя

Карма: 23
Рейтинг сообщений: 331
Зарегистрирован: Пт янв 11, 2013 19:19:26
Сообщений: 2117
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Max писал(а):
авторство мы особо хранить в тайне не будем

И Все таки храним в тайне, так как автор у первой статьи не известен пока сам не объявится.

_________________
=========
Правила Форума ЗДЕСЬ _____ Правила раздела БАЗАР ЗДЕСЬ _____ Если вы продаете, прочтите ЗДЕСЬ

Редко появляюсь. Если вопрос не личного характера пользуйтесь кнопкой "!".


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Наш форум
СообщениеДобавлено: Ср сен 06, 2017 14:56:12 
Встал на лапы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 4
Зарегистрирован: Чт янв 22, 2015 14:11:36
Сообщений: 94
Рейтинг сообщения: 0
Есть вопрос, где его задать - не знаю.
Можно ли предоставить на конкурс разработку уже выложенную на обсуждение форума?


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Наш форум
СообщениеДобавлено: Ср сен 06, 2017 14:59:44 
Друг Кота
Аватар пользователя

Карма: 107
Рейтинг сообщений: 1225
Зарегистрирован: Вс май 25, 2008 19:47:47
Сообщений: 4326
Откуда: РФ
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
нет согласно правилам конкурса

_________________
2B OR NOT 2B = FF


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Наш форум
СообщениеДобавлено: Ср сен 06, 2017 15:04:35 
Встал на лапы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 4
Зарегистрирован: Чт янв 22, 2015 14:11:36
Сообщений: 94
Рейтинг сообщения: 0
Но в правилах нет такого запрета! (Разработка моя). Хотелось бы услышать ответ от официальных лиц.
_____
Вызывает сомнение - Что хорошего можно срочно придумать за месяц, сделать и испытать? Тогда, либо участники, будующие призёры, были за ранее предупреждены о конкурсе, либо нужно все свои разработки держать в секрете и никогда не делиться ими на форуме. Что из этого правильно? Как поступать в дальнейшем?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Ср сен 06, 2017 15:36:42 
Админ
Аватар пользователя

Карма: 109
Рейтинг сообщений: 458
Зарегистрирован: Вт авг 23, 2005 15:23:25
Сообщений: 10815
Откуда: Москва
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Если статья не публиковалась в разделах сайта, а была представлена только на форуме, то - да, можно.
Оформляйте её обычным образом в КотоРеде и не забудьте поставить конкурсную галку.

_________________
А вот футболки кому? Кружки, значки!
Мысли Пачкают Мозги


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Вт сен 19, 2017 14:32:45 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Прошу внести небольшую корректировку в голосование по конкурсу: дать возможность ставить 0 баллов. То есть чтобы количество голосов по проекту росло, а балл мог не расти. Можно сделать это по умолчанию, чтобы минимум телодвижений требовался.

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Сб сен 23, 2017 08:32:25 
Говорящий с текстолитом
Аватар пользователя

Карма: 10
Рейтинг сообщений: 16
Зарегистрирован: Сб фев 18, 2012 15:42:29
Сообщений: 1661
Откуда: Курск
Рейтинг сообщения: 0
и я тогда вам поставлю эти нули с 10 акков :)) (шутка)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Сб сен 23, 2017 08:44:39 
Модератор
Аватар пользователя

Карма: 158
Рейтинг сообщений: 1599
Зарегистрирован: Пт апр 28, 2006 15:26:07
Сообщений: 11940
Откуда: Россия.
Рейтинг сообщения: 0
Медали: 2
Мявтор 3-й степени (1) Лучший человек Форума 2017 (1)
поставлю эти нули с 10 акков
Уже только с девяти.

Сейчас только вспомню, как банить, а то давно никого не банил и забыл уж куда там и на что нажимать для этого.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Вс сен 24, 2017 12:33:30 
Открыл глаза
Аватар пользователя

Карма: 1
Рейтинг сообщений: 17
Зарегистрирован: Пт янв 07, 2011 17:08:14
Сообщений: 61
Рейтинг сообщения: 0
Подскажите пожалуйста ссылку, где проходит голосование, не могу найти!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Вс сен 24, 2017 13:55:07 
Модератор
Аватар пользователя

Карма: 158
Рейтинг сообщений: 1599
Зарегистрирован: Пт апр 28, 2006 15:26:07
Сообщений: 11940
Откуда: Россия.
Рейтинг сообщения: 0
Медали: 2
Мявтор 3-й степени (1) Лучший человек Форума 2017 (1)
О начале голосования будет сообщено на главной странице сайта.
http://radiokot.ru/
Там же будет ссылка, где голосовать.
Вероятно голосование начнется завтра.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Пн сен 25, 2017 20:50:43 
Друг Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 1377
Зарегистрирован: Пн май 11, 2009 14:15:00
Сообщений: 3059
Откуда: СПб
Рейтинг сообщения: 0
Медали: 1
Мявтор 3-й степени (1)
Для более удобного отображения результатов написал скрипт, сортирующий по среднему баллу и автоматически обновляющий результаты. За основу взял скрипт отсюда: viewtopic.php?f=19&t=94881 .
Собственно, вот:
Спойлер
Код:
javascript:(function(){
  var updateTimeout = 5000;

  if(window.location.href !== 'http://radiokot.ru/konkursCatDay2017/')
  {
    alert('Вы не на странице конкурса!');
    return;
  }
 
  var div = document.getElementById("hypercontext");
  var table = div.firstElementChild.children[2];
  var tableBody = table.tBodies[0];

  var p = document.createElement("p");
  p.className = "usual";
  div.firstElementChild.insertBefore(p, div.firstElementChild.children[1]);

  var label = document.createTextNode("Интервал автоматического обновления:");

  var timeout = document.createElement("input");
  timeout.type = "text";
  timeout.defaultValue = "5000";

  function readTimeout(){
    var inp = timeout.value;
    var re = new RegExp('^[0-9]+$');
    if((!re.test(inp)) || (Number(inp) < 1000) || (Number(inp) > 60000)){
      alert("Введите целое число от 1000 до 60000!");
      return;
    }
    updateTimeout = Number(inp);
  }

  var settimeout = document.createElement("input");
  settimeout.type = "button";
  settimeout.value = "Задать";
  settimeout.onclick = readTimeout;

  var enableUpdate = document.createElement("input");
  enableUpdate.type = "checkbox";
  enableUpdate.checked = true;
  enableUpdate.onchange = (function(){
    if(enableUpdate.checked){
      if(sortTable != undefined){
        if(timer != undefined)
          clearTimeout(timer);
        timer = setTimeout(sortTable, 0);
      }
    }
    else{
      clearTimeout(timer);
    }
  });

  var updateButton = document.createElement("input");
  updateButton.type = "button";
  updateButton.value = "Обновить";
  updateButton.onclick = (function(){
    if(!enableUpdate.checked){
      sortTable();
    }
  });

  var nowUpdating = document.createTextNode(&#39;&#39;);

  p.appendChild(document.createTextNode("Включить автоматическое обновление: "));
  p.appendChild(enableUpdate);
  p.appendChild(document.createElement("br"));
  p.appendChild(label); 
  p.appendChild(document.createElement("br"));
  p.appendChild(timeout);
  p.appendChild(document.createTextNode(" мс "));
  p.appendChild(settimeout);
  p.appendChild(document.createElement("br"));
  p.appendChild(updateButton);
  p.appendChild(document.createElement("br"));
  p.appendChild(nowUpdating);
  p.appendChild(document.createElement("br"));

  var timer;
  function sortTable(){
    function compare(a,b)
    {
      if (a.mark < b.mark)
        return 1;
      if (a.mark > b.mark)
        return -1;
      return 0;
    }
   
    function article(row)
    {
      this.row = row;
      var votes = row.lastElementChild.innerText;
      var re = new RegExp(&#39;[0-9]+.?[0-9]?&#39;, &#39;g&#39;);
      var total = re.exec(votes);
      var totalVotes = re.exec(votes);
      this.mark = total/totalVotes
    };
   
    function articleList()
    {
      this.articles = new Array();
     
      this.AddArticle = function(row)
      {
        this.articles[this.articles.length] = new article(row);
      };
    }
   
    nowUpdating.textContent = "Обновление...";

    var newPage = document.createElement("div");
    $.get(&#39;/konkursCatDay2017&#39;,function(data){
      newPage.innerHTML = data;
   
      var newTable = newPage.getElementsByTagName("table")[2];
      var newTableBody = newTable.tBodies[0];
 
      var articles = new articleList();

      for (var i = 0, row; row = newTable.rows[i]; i++)
      {
        articles.AddArticle(row);
      }

      articles.articles.sort(compare);
 
      while(table.rows.length > 0) table.deleteRow(0);

      for(var i = 0, art; art = articles.articles[i]; i++){
        var counter = document.createElement("td");
        counter.innerText = i + 1;
        art.row.insertBefore(counter,art.row.firstElementChild);
        table.appendChild(art.row);
      }
      nowUpdating.textContent = "";
      if(enableUpdate.checked)
        timer = setTimeout(sortTable, updateTimeout);
    });
  };
  timer = setTimeout(sortTable,0);
})();

Это нужно скопировать и вставить в адресную строку браузера на странице с результатами, после чего нажать Enter.
Некоторые браузеры (например, Chrome) обрезают "javascript:" в начале, в этом случае нужно дописать это вручную.

По вопросам работы скрипта (ошибки, баги, ...) - лучше в ЛС.

Добавлено after 5 hours 9 minutes 4 seconds:
Сделал вывод графиков изменений для первых 10 мест. Цвета графиков соответствуют цветам названий статей в таблице.
Спойлер
Код:
javascript:(function(){
 
  var smoothieCharts = document.createElement("script");
  smoothieCharts.type = "text/javascript";
  smoothieCharts.src = "http://smoothiecharts.org/smoothie.js";

  var style = document.createElement("style");
  style.type = "text/css";
 
  var css = "div.smoothie-chart-tooltip {\nbackground: #444;\npadding: 1em;\nmargin-top: 20px;\nfont-family: consolas;\ncolor: white;\nfont-size: 10px;\npointer-events: none;\n}";
  if (style.styleSheet){
    style.styleSheet.cssText = css;
  } else {
    style.appendChild(document.createTextNode(css));
  }
 
  document.head.appendChild(style);

  smoothieCharts.onload = (function(){
  var updateTimeout = 5000;

  if(window.location.href !== 'http://radiokot.ru/konkursCatDay2017/')
  {
    alert('Вы не на странице конкурса!');
    return;
  }
 
  var div = document.getElementById("hypercontext");
  var table = div.firstElementChild.children[2];
  var tableBody = table.tBodies[0];

  var p = document.createElement("p");
  p.className = "usual";
  div.firstElementChild.insertBefore(p, div.firstElementChild.children[1]);

  var label = document.createTextNode("Интервал автоматического обновления:");

  var timeout = document.createElement("input");
  timeout.type = "text";
  timeout.defaultValue = "5000";

  function readTimeout(){
    var inp = timeout.value;
    var re = new RegExp('^[0-9]+$');
    if((!re.test(inp)) || (Number(inp) < 1000) || (Number(inp) > 60000)){
      alert("Введите целое число от 1000 до 60000!");
      return;
    }
    updateTimeout = Number(inp);
  }

  var settimeout = document.createElement("input");
  settimeout.type = "button";
  settimeout.value = "Задать";
  settimeout.onclick = readTimeout;

  var graphLength = document.createElement("input");
  graphLength.type = "text";
  graphLength.defaultValue = "10";

  function readGraphLength(){
    var inp = graphLength.value;
    var re = new RegExp('^[0-9]+(\.[0-9]+)?$');
    if((!re.test(inp)) || (Number(inp) < 0.1) || (Number(inp) > 10000)){
      alert("Введите число от 0.1 до 10000!");
      return;
    }
    graph.options.millisPerPixel = Number(inp) * 60 * 1000 / canvas.width;
    graph.options.grid.millisPerLine = Math.pow(10, Math.trunc(Math.log10(Number(inp) * 60 * 1000 / 5.0)));
  }

  var setGraphLength = document.createElement("input");
  setGraphLength.type = "button";
  setGraphLength.value = "Задать";
  setGraphLength.onclick = readGraphLength;

  var enableUpdate = document.createElement("input");
  enableUpdate.type = "checkbox";
  enableUpdate.checked = true;
  enableUpdate.onchange = (function(){
    if(enableUpdate.checked){
      if(sortTable != undefined){
        if(timer != undefined)
          clearTimeout(timer);
        timer = setTimeout(sortTable, 0);
      }
    }
    else{
      clearTimeout(timer);
    }
  });

  var updateButton = document.createElement("input");
  updateButton.type = "button";
  updateButton.value = "Обновить";
  updateButton.onclick = (function(){
    if(!enableUpdate.checked){
      sortTable();
    }
  });

  var nowUpdating = document.createTextNode('');

  p.appendChild(document.createTextNode("Включить автоматическое обновление: "));
  p.appendChild(enableUpdate);
  p.appendChild(document.createElement("br"));

  p.appendChild(label); 
  p.appendChild(document.createElement("br"));
  p.appendChild(timeout);
  p.appendChild(document.createTextNode(" мс "));
  p.appendChild(settimeout);
  p.appendChild(document.createElement("br"));

  p.appendChild(document.createTextNode("Длина оси времени графика:")); 
  p.appendChild(document.createElement("br"));
  p.appendChild(graphLength);
  p.appendChild(document.createTextNode(" мин "));
  p.appendChild(setGraphLength);
  p.appendChild(document.createElement("br"));

  p.appendChild(updateButton);
  p.appendChild(document.createElement("br"));
  p.appendChild(nowUpdating);
  p.appendChild(document.createElement("br"));
  p.appendChild(document.createElement("br"));
  p.appendChild(document.createElement("br"));

  var canvas = document.createElement("canvas");
  canvas.width = "700";
  canvas.height = "400";
 
  p.appendChild(canvas);
 
  var graph = new SmoothieChart({interpolation:'linear',tooltip:true,timestampFormatter:SmoothieChart.timeFormatter});
  graph.streamTo(canvas);

  var graphLines = new Array();
  var artList = new Array();
  var artNames = new Array();
  var artColors = new Array();
  var artPlaces = new Array();

  var colors = ["red", "green", "lightblue", "yellow", "yellowgreen", "orange", "navy", "magenta", "white", "blue"];

  var firstRun = true;
  readTimeout();
  readGraphLength();

  var timer;
  function sortTable(){
    function compare(a,b)
    {
      if (a.mark < b.mark)
        return 1;
      if (a.mark > b.mark)
        return -1;
      return 0;
    }
   
    function article(row)
    {
      this.row = row;
      this.name = row.firstElementChild.firstElementChild.innerText;
      var re = new RegExp("[0-9]{2}$");
      this.ind = Number(re.exec(row.firstElementChild.firstElementChild.href)) - 1;
      var votes = row.lastElementChild.innerText;
      re = new RegExp('[0-9]+.?[0-9]?', 'g');
      var total = re.exec(votes);
      var totalVotes = re.exec(votes);
      this.mark = total/totalVotes
    };
   
    function articleList()
    {
      this.articles = new Array();
     
      this.AddArticle = function(row)
      {
        this.articles[this.articles.length] = new article(row);
      };
    }
   
    nowUpdating.textContent = "Обновление...";

    var newPage = document.createElement("div");
    $.get('/konkursCatDay2017',function(data){
      newPage.innerHTML = data;
   
      var newTable = newPage.getElementsByTagName("table")[2];
      var newTableBody = newTable.tBodies[0];
 
      var articles = new articleList();

      function setVisible(index){
        graph.seriesSet[index].options.strokeStyle = colors[artPlaces[index]];
      }
      function setInvisible(index){
        graph.seriesSet[index].options.strokeStyle = "none";
      }     

      for (var i = 0, row; row = newTable.rows[i]; i++)
      {
        articles.AddArticle(row);
        var art = articles.articles[articles.articles.length - 1];
        if(firstRun){
          graphLines[art.ind] = new TimeSeries();
          artList[art.ind] = art;
          artNames[art.ind] = art.name;
        }
        graphLines[art.ind].append(new Date().getTime(), art.mark);
      }
      if(firstRun){
        for(var i = 0; i < graphLines.length; i++)
          graph.addTimeSeries(graphLines[i], {lineWidth: 2});
      }
     
      articles.articles.sort(compare);
 
      while(table.rows.length > 0) table.deleteRow(0);

      for(var i = 0, art; art = articles.articles[i]; i++){
        var counter = document.createElement("td");
        counter.innerText = i + 1;
        art.row.insertBefore(counter,art.row.firstElementChild);
        table.appendChild(art.row);
        if(artPlaces[art.ind] < 10){
          art.row.children[1].firstElementChild.style.color = colors[artPlaces[art.ind]];
          art.row.children[1].style.backgroundColor = "black";
        }
        artPlaces[art.ind] = i;
      }

      for(var i = 0; i < artPlaces.length; i++){
        if(artPlaces[i] < 10) setVisible(i);
        else setInvisible(i);
      }

      nowUpdating.textContent = "";
      firstRun = false;
      if(enableUpdate.checked)
        timer = setTimeout(sortTable, updateTimeout);
    });
  };
  timer = setTimeout(sortTable,0);
  });

  document.body.appendChild(smoothieCharts);
})();


P.S.
Сделал отображение таблички со значениями в данный момент времени при наведении курсора, улучшил выбор верхней и нижней границ отображения. Теперь используется вся площадь графика, а не только верхняя половина.
Спойлер
Код:
javascript:(function(){
  var smoothieCharts = document.createElement("script");
  smoothieCharts.type = "text/javascript";
  smoothieCharts.src = "http://smoothiecharts.org/smoothie.js";

  var style = document.createElement("style");
  style.type = "text/css";
 
  var css = "div.smoothie-chart-tooltip {\nbackground: #444;\npadding: 1em;\nmargin-top: 20px;\nfont-family: consolas;\ncolor: white;\nfont-size: 10px;\npointer-events: none;\nz-index:200\n}";
  if (style.styleSheet){
    style.styleSheet.cssText = css;
  } else {
    style.appendChild(document.createTextNode(css));
  }
 
  document.head.appendChild(style);

  smoothieCharts.onload = (function(){
  var updateTimeout = 5000;

  if(window.location.href !== 'http://radiokot.ru/konkursCatDay2017/')
  {
    alert('Вы не на странице конкурса!');
    return;
  }
/******************Переопределяем некоторые методы для нашего случая*************************/
  var Util = {
    extend: function() {
      arguments[0] = arguments[0] || {};
      for (var i = 1; i < arguments.length; i++)
      {
        for (var key in arguments[i])
        {
          if (arguments[i].hasOwnProperty(key))
          {
            if (typeof(arguments[i][key]) === 'object') {
              if (arguments[i][key] instanceof Array) {
                arguments[0][key] = arguments[i][key];
              } else {
                arguments[0][key] = Util.extend(arguments[0][key], arguments[i][key]);
              }
            } else {
              arguments[0][key] = arguments[i][key];
            }
          }
        }
      }
      return arguments[0];
    },
    binarySearch: function(data, value) {
      var low = 0,
          high = data.length;
      while (low < high) {
        var mid = (low + high) >> 1;
        if (value < data[mid][0])
          high = mid;
        else
          low = mid + 1;
      }
      return low;
    }
  };

  SmoothieChart.prototype.updateTooltip = function () {
    var el = this.getTooltipEl();

    if (!this.mouseover || !this.options.tooltip) {
      el.style.display = 'none';
      return;
    }

    var time = this.lastRenderTimeMillis - (this.delay || 0);

    time -= time % this.options.millisPerPixel;

    var t = this.options.scrollBackwards
      ? time - this.mouseX * this.options.millisPerPixel
      : time - (this.canvas.offsetWidth - this.mouseX) * this.options.millisPerPixel;

    var data = [];

    for (var d = 0; d < this.seriesSet.length; d++) {
      var timeSeries = this.seriesSet[d].timeSeries,
          closeIdx = Util.binarySearch(timeSeries.data, t);
      if(this.seriesSet[d].options.strokeStyle === "rgba(0,0,0,0.0)") continue;
      if (closeIdx > 0 && closeIdx < timeSeries.data.length) {
        data.push({ series: this.seriesSet[d], index: closeIdx, value: timeSeries.data[closeIdx][1] });
      }
    }

    if (data.length) {
      el.innerHTML = this.options.tooltipFormatter.call(this, t, data);
      el.style.display = 'block';
    } else {
      el.style.display = 'none';
    }
  };

  SmoothieChart.prototype.updateValueRange = function() {
    var chartOptions = this.options,
        chartMaxValue = Number.NaN,
        chartMinValue = Number.NaN;

    for (var d = 0; d < this.seriesSet.length; d++) {
      var timeSeries = this.seriesSet[d].timeSeries;
      if(this.seriesSet[d].options.strokeStyle === "rgba(0,0,0,0.0)") continue;
      if (!isNaN(timeSeries.maxValue)) {
        chartMaxValue = !isNaN(chartMaxValue) ? Math.max(chartMaxValue, timeSeries.maxValue) : timeSeries.maxValue;
      }

      if (!isNaN(timeSeries.minValue)) {
        chartMinValue = !isNaN(chartMinValue) ? Math.min(chartMinValue, timeSeries.minValue) : timeSeries.minValue;
      }
    }

    if (chartOptions.maxValue != null) {
      chartMaxValue = chartOptions.maxValue;
    } else {
      chartMaxValue *= chartOptions.maxValueScale;
    }

    if (chartOptions.minValue != null) {
      chartMinValue = chartOptions.minValue;
    } else {
      chartMinValue -= Math.abs(chartMinValue * chartOptions.minValueScale - chartMinValue);
    }

    if (this.options.yRangeFunction) {
      var range = this.options.yRangeFunction({min: chartMinValue, max: chartMaxValue});
      chartMinValue = range.min;
      chartMaxValue = range.max;
    }

    if (!isNaN(chartMaxValue) && !isNaN(chartMinValue)) {
      var targetValueRange = chartMaxValue - chartMinValue;
      var valueRangeDiff = (targetValueRange - this.currentValueRange);
      var minValueDiff = (chartMinValue - this.currentVisMinValue);
      this.isAnimatingScale = Math.abs(valueRangeDiff) > 0.1 || Math.abs(minValueDiff) > 0.1;
      this.currentValueRange += chartOptions.scaleSmoothing * valueRangeDiff;
      this.currentVisMinValue += chartOptions.scaleSmoothing * minValueDiff;
    }

    this.valueRange = { min: chartMinValue, max: chartMaxValue };
  };
/***********************************************************************************************/ 
 
  var div = document.getElementById("hypercontext");
  var table = div.firstElementChild.children[2];
  var tableBody = table.tBodies[0];

  var p = document.createElement("p");
  p.className = "usual";
  div.firstElementChild.insertBefore(p, div.firstElementChild.children[1]);

  var label = document.createTextNode("Интервал автоматического обновления:");

  var timeout = document.createElement("input");
  timeout.type = "text";
  timeout.defaultValue = "5000";

  function readTimeout(){
    var inp = timeout.value;
    var re = new RegExp('^[0-9]+$');
    if((!re.test(inp)) || (Number(inp) < 1000) || (Number(inp) > 60000)){
      alert("Введите целое число от 1000 до 60000!");
      return;
    }
    updateTimeout = Number(inp);
  }

  var settimeout = document.createElement("input");
  settimeout.type = "button";
  settimeout.value = "Задать";
  settimeout.onclick = readTimeout;

  var graphLength = document.createElement("input");
  graphLength.type = "text";
  graphLength.defaultValue = "10";

  if(!Math.log10)
    Math.log10 = function(x){
      return Math.log(x) / Math.log(10);
    };
  if(!Math.trunc)
    Math.trunc = function(x){
      return Math.floor(x);
    };

  function readGraphLength(){
    var inp = graphLength.value;
    var re = new RegExp('^[0-9]+(\.[0-9]+)?$');
    if((!re.test(inp)) || (Number(inp) < 0.1) || (Number(inp) > 10000)){
      alert("Введите число от 0.1 до 10000!");
      return;
    }
    graph.options.millisPerPixel = Number(inp) * 60 * 1000 / canvas.width;
    graph.options.grid.millisPerLine = Math.pow(10, Math.trunc(Math.log10(Number(inp) * 60 * 1000 / 5.0)));
  }

  var setGraphLength = document.createElement("input");
  setGraphLength.type = "button";
  setGraphLength.value = "Задать";
  setGraphLength.onclick = readGraphLength;

  var enableUpdate = document.createElement("input");
  enableUpdate.type = "checkbox";
  enableUpdate.checked = true;
  enableUpdate.onchange = (function(){
    if(enableUpdate.checked){
      if(sortTable != undefined){
        if(timer != undefined)
          clearTimeout(timer);
        timer = setTimeout(sortTable, 0);
      }
    }
    else{
      clearTimeout(timer);
    }
  });

  var updateButton = document.createElement("input");
  updateButton.type = "button";
  updateButton.value = "Обновить";
  updateButton.onclick = (function(){
    if(!enableUpdate.checked){
      sortTable();
    }
  });

  var nowUpdating = document.createTextNode('');

  p.appendChild(document.createTextNode("Включить автоматическое обновление: "));
  p.appendChild(enableUpdate);
  p.appendChild(document.createElement("br"));

  p.appendChild(label); 
  p.appendChild(document.createElement("br"));
  p.appendChild(timeout);
  p.appendChild(document.createTextNode(" мс "));
  p.appendChild(settimeout);
  p.appendChild(document.createElement("br"));

  p.appendChild(document.createTextNode("Длина оси времени графика:")); 
  p.appendChild(document.createElement("br"));
  p.appendChild(graphLength);
  p.appendChild(document.createTextNode(" мин "));
  p.appendChild(setGraphLength);
  p.appendChild(document.createElement("br"));

  p.appendChild(updateButton);
  p.appendChild(document.createElement("br"));
  p.appendChild(nowUpdating);
  p.appendChild(document.createElement("br"));
  p.appendChild(document.createElement("br"));
  p.appendChild(document.createElement("br"));

  var canvas = document.createElement("canvas");
  canvas.width = "700";
  canvas.height = "400";
 
  p.appendChild(canvas);
 
  var graph = new SmoothieChart({interpolation:'linear',tooltip:true,timestampFormatter:SmoothieChart.timeFormatter});
  graph.streamTo(canvas);

  graph.options.yRangeFunction = (function(range){
    var newRange;
    if(isNaN(range.min)) return range;
    if(isNaN(range.max)) return range;
    var delta;
    delta = range.max - range.min;
    var newRange = {min: undefined, max: undefined};
    newRange.min = range.min - delta / 15.0;
    newRange.max = range.max + delta / 15.0;
    return newRange;
  });

  var graphLines = new Array();
  var artList = new Array();
  var artNames = new Array();
  var artColors = new Array();
  var artPlaces = new Array();

  var colors = ["red", "green", "lightblue", "yellow", "yellowgreen", "orange", "navy", "magenta", "white", "blue"];

  var firstRun = true;
  readTimeout();
  readGraphLength();

  var timer;
  function sortTable(){
    function compare(a,b)
    {
      if (a.mark < b.mark)
        return 1;
      if (a.mark > b.mark)
        return -1;
      return 0;
    }
   
    function article(row)
    {
      this.row = row;
      this.name = row.firstElementChild.firstElementChild.innerText;
      var re = new RegExp("[0-9]{2}$");
      this.ind = Number(re.exec(row.firstElementChild.firstElementChild.href)) - 1;
      var votes = row.lastElementChild.innerText;
      re = new RegExp('[0-9]+.?[0-9]?', 'g');
      var total = re.exec(votes);
      var totalVotes = re.exec(votes);
      this.mark = total/totalVotes
    };
   
    function articleList()
    {
      this.articles = new Array();
     
      this.AddArticle = function(row)
      {
        this.articles[this.articles.length] = new article(row);
      };
    }
   
    nowUpdating.textContent = "Обновление...";

    var newPage = document.createElement("div");

    var get;
    if(!$.get){
      get = function(url,callback){
        var xhr = new XMLHttpRequest();
        xhr.open("GET", url, true);
        xhr.onreadystatechange = function(){
          if (this.readyState != 4) return;
          callback(this.responseText);
          return;
        };   
        xhr.send();
      };
    }
    else
      get = $.get;
    get('/konkursCatDay2017',function(data){
      newPage.innerHTML = data;
   
      var newTable = newPage.getElementsByTagName("table")[2];
      var newTableBody = newTable.tBodies[0];
 
      var articles = new articleList();

      function setVisible(index){
        graph.seriesSet[index].options.strokeStyle = colors[artPlaces[index]];
      }
      function setInvisible(index){
        graph.seriesSet[index].options.strokeStyle = "rgba(0,0,0,0.0)";
      }     

      for (var i = 0, row; row = newTable.rows[i]; i++)
      {
        articles.AddArticle(row);
        var art = articles.articles[articles.articles.length - 1];
        if(firstRun){
          graphLines[art.ind] = new TimeSeries();
          artList[art.ind] = art;
          artNames[art.ind] = art.name;
        }
        graphLines[art.ind].append(new Date().getTime(), art.mark);
      }
      if(firstRun){
        for(var i = 0; i < graphLines.length; i++)
          graph.addTimeSeries(graphLines[i], {lineWidth: 2});
      }
     
      articles.articles.sort(compare);
 
      while(table.rows.length > 0) table.deleteRow(0);

      for(var i = 0, art; art = articles.articles[i]; i++){
        var counter = document.createElement("td");
        counter.innerText = i + 1;
        art.row.insertBefore(counter,art.row.firstElementChild);
        table.appendChild(art.row);
        if(artPlaces[art.ind] < 10){
          art.row.children[1].firstElementChild.style.color = colors[artPlaces[art.ind]];
          art.row.children[1].style.backgroundColor = "black";
        }
        artPlaces[art.ind] = i;
      }

      for(var i = 0; i < artPlaces.length; i++){
        if(artPlaces[i] < 10) setVisible(i);
        else setInvisible(i);
      }

      nowUpdating.textContent = "";
      firstRun = false;
      if(enableUpdate.checked)
        timer = setTimeout(sortTable, updateTimeout);
    });
  };
  timer = setTimeout(sortTable,0);
  });
  document.body.appendChild(smoothieCharts);
})();


P.P.S. Добавил в код выше (тот, что с графиком) поддержку старого браузера Opera (не на основе Хрома).

_________________
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.


Последний раз редактировалось *Trigger* Вт сен 26, 2017 17:16:49, всего редактировалось 3 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Пн сен 25, 2017 21:46:49 
Родился

Зарегистрирован: Вт ноя 29, 2016 19:40:09
Сообщений: 0
Рейтинг сообщения: 0
Предлагаю для наглядности уменьшить интервал ограничив от 3 до 5

Код:
,minValue:3,maxValue:5


Код:
var graph = new SmoothieChart({interpolation:'linear',tooltip:true,timestampFormatter:SmoothieChart.timeFormatter,minValue:3,maxValue:5});


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Пн сен 25, 2017 22:22:29 
Друг Кота
Аватар пользователя

Карма: 123
Рейтинг сообщений: 7955
Зарегистрирован: Сб сен 13, 2014 16:27:32
Сообщений: 39199
Откуда: СпиртоГонск созвездия Омега
Рейтинг сообщения: 0
и куда это надо загружать? это типа для админов прожка?

_________________
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Пн сен 25, 2017 22:52:14 
Друг Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 1377
Зарегистрирован: Пн май 11, 2009 14:15:00
Сообщений: 3059
Откуда: СПб
Рейтинг сообщения: 0
Медали: 1
Мявтор 3-й степени (1)
Я же написал: вставить в адресную строку браузера, в котором открыта страница с результатами.

_________________
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Ср сен 27, 2017 06:35:18 
Родился

Карма: -3
Рейтинг сообщений: -10
Зарегистрирован: Пт сен 16, 2016 13:59:16
Сообщений: 10
Рейтинг сообщения: 0
А что касается мобильных устройств?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Конкурс: Поздравь Кота по-человечески 2017!
СообщениеДобавлено: Ср сен 27, 2017 14:01:49 
Друг Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 1377
Зарегистрирован: Пн май 11, 2009 14:15:00
Сообщений: 3059
Откуда: СПб
Рейтинг сообщения: 0
Медали: 1
Мявтор 3-й степени (1)
В браузере Puffin работает.

_________________
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 43 ]  1, ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y