Category: it

Category was added automatically. Read all entries about "it".

DeepLabCut - automatic body part labelling of zebrafish

Обучился работать с новой deep learning library для Python - DeepLabCut (ранее более подробно писал тут). Вот что, к примеру, можно сделать для простенького видео с данио-рерио (видео замедленно в 1/8 т.к. оно короткое и всё происходит быстро).



Прога после довольно простенького обучения автоматически и на всех фреймах довольно точно (здесь с точностью 1-2 пикселя по сравнению с "ручной" разметкой) отмечает нужные body parts (в данном случае это "nose" + "body centre" + "tail" - см цветные точки). И на выходе получаем csv файл где для каждого фрейма есть XY координаты для каждой body part и likelihood определения (т.к. можно фильровать менее точные разметки). С этим уже потом можно работать где угодно (хоть в Питоне с pandas, хотя в R). К примеру, для той же рыбы я могу определить

- ориентацию оси тела и heading (куда она направляется/смотрит головой)
- где и когда та или иная часть тела расположена в пространстве - к примеру точки и моменты пересечения определенных zones, бюджеты времени в тех или иных "зонах". Это уже потом можно использовать для автоматического определения ориентации при перемещении тела в данной арене

Подобные вещи (quantification of complex behaviours) присутствуют в некоторых довольно дорогих проприетарных продуктах типа известного Ethovision от Noldus, но это £5-10k за лицензию (да еще и ограничения на количество компов, где можно работать). Плюс их точность иногда хромает, их зашитые алгоритмы непрозрачны и/или с довольно ограниченной гибкостью (а порой и без нее) и заточены на preclinical studies (обычно грызуны, реже зебрафиши). Да, там point-and-click, но всё равно нужно приличное время разбираться, а здесь нужно знать базовый python и тоже разобраться с документацией.

Короче, open source всё равно рулит :)

Учу DeepLabCut - крутой deep learning фреймворк на Python для pose estimation

DeepLabCut (DLC) - это open source проект, использующий deep learning для автоматического видео трекинга человека, животных или даже любых иных объектов (живые клетки, частички, неодушевленные объекты), и не просто трекинга "центр массы объекта" (это сейчас могут многие проги типа пакетов в R), а "умное" распознавания частей тела на каждом фрейме. При чем большой прорыв тут в том, что никаких прикрепленных markers, потенциально изменяющих поведение, не нужно, т.е. это markerless approach.

DLC - это разработка быстро растущего коллектива девелоперов, изначально вокруг такого чувака Alexander Mathis (постдок из Harward University и скоро завлаб в EPFL (École polytechnique fédérale de Lausanne), Швейцария) и его жены Mackenzie W. Mathis, но теперь проект набирает скорость и популярность, подключаются новые разработчики.

Демонстрация возможностей DLC для автоматического определения "скелета" позы множества животных (при этом вы обучаете программу делать определение поз только на некоторых фреймах - модель далее применима на множестве новых видео с разным количеством животных, при несколько разных углах и освещениях)


дрозофила откладывает яйца


Презентация проекта от создателя


На рынке есть некоторые, даже иногда довольно развитые, программные продукты для video tracking, но они с проприетарными и негибкими алгоритмами, часто заточенными на pre-clinical trials и популярных модели типа крысы/мыши. К тому же они неоправданно дорогие (например EthoVision от Noldus начинается от 5000 фунтов и далее по 1,5k за допмодули). Эта платформа бесплатна и чрезвычайно гибкая. Есть GUI, но в целом нужно или очень желательно знать Python. Конечно есть проблемы и документация вызывает вопросы, но в целом всё круто.

Мы планируем использовать DLC для нескольких проектов для оцифровки сложных поведенческих актов у животных (например, сканирующие движения головы у птиц в изменяющемся магнитном поле или расположение разных частей тела у рыб в одиночку или в стае).

Проект с документацией, тьюториалами выложен на Github, а еще есть отдельный информационно-демонстрационный сайт.

Делаем веб приложения с помощью Shiny App и ShinyProxy

Возникла необходимость сделать web app для визуализации данных для не очень продвинутых юзеров, которым в R копаться сложно или даже невозможно (т.е. давать им R скрипты не очень помогает - быстро теряются и малейшие модификации приводят в ступор или продвигаются крайне медленно), а вот point-and-click web apps были бы в самый раз. Но как сделать web app без глубокого знания HTML, CSS, JS, инструментов аутентификации и авторизации? Как это сделать без найма команды веб разработчиков и бюджета?

Выход в принципе был понятен, но теперь весь roadmap кристаллизовался (уверен, что много иных способов, но пока выбрал этот). Для самого web app - это пакет Shiny для R. Общие принципы я знал давно, но теперь напоминаю себе и слушаю вот этот курс на Udemy.com.

Само приложение планирую разместить на своем сервере с помощью ShinyProxy. Это такой инструмент, который основан на Docker и Java. На Linux сервере устанавливаете Java, Docker. Делаете Docker images для разных web app. В Docker image можете установить R с Shiny package, свою app (это обычно просто один файл app.R). Круть в том, что можно для разных юзеров и линков установить разные Docker images, где свою среда - т.е. свой набор R, shiny, shiny app (т.е. уникальная комбинация из нужных версий этих компонентов). Отконфигурировать какие пользователи могут всё это по какому url адресу загрузить в браузере. Пользовательские политики аутентификации и авторизации настраиваются в файле *.yml (те кто пользуются Java это знают ибо это их классика). Есть возможность смотреть статистику допуска, посещаемости. Есть возможность отконфигурировать нагрузки на CPU для данного приложения. Всё при этом open source.

Для примера см вот эти (увы плохого качества - пардон) скриншоты из доклада на конфе useR! одних пользователей ShinyProxy (весь доклад ниже)



Конечный результат такой. Вот так запускаете ShinyProxy - просто запуск *.jar файла из командной строки на сервере



Вот что видит пользователь, когда он идет к вашему веб приложению по линку. Т.е. его просят залогиниться. Т.е. ваше приложение не будет просто открыто кому попало. Можно кстати настроить social login через Google, GitHub etc. Пароль правда не знаю пока как генериться, но видимо есть способы.


Далее юзеру показывается список доступных ему веб приложений со ссылками

Ну и далее юзер кликает на линк нужного приложения и попадает на страницу приложения - внизу просто shinyapp демка

Вот так конфигурируется доступ к конкретным приложениям - в файле *.yml Красным выделена конкретное приложение по данному url и ldap groups - это группы юзеров, которым это приложение доступно. Ну и там много чего еще.

Разбираемся в чем разница между Machine Learning, Statistical Inference, AI, Data Science и т.п.

Неплохая статья на тему сабжа вот здесь. В общем, многие скептичны настроены к разным новым buzzwords и правильно делают. Я там тоже не со всем согласен и объясню внизу на примере. Все эти ML, AI (Artificial Intelengence), Big Data вот это вот всё. Ну и конечно отпускают разного рода шуточки. Ну типа вот внизу под катом.

Collapse )

Если попытаться сформулировать разницу максимально коротко, то она будет такая:

Data Science:

Статистика сейчас уже часто оперирует большими данными ибо они стали доступны. Большие они прежде всего для человека, т.е. иногда для компьютера они не очень большие, но могут быть такие большие, что и компы с трудом считают (т.е. днями и неделями даже какой-нибудь кластер, когда гоняешь какую-нибудь MCMC подборку параметров модели для больших данных). Если без компа и знания кодинга, то в общем вам анализа не сделать в принципе (не практично, прошло время "подсчитать что-то в Экселе или на бумажке"). И вот это уже data science, т.е. это по сути типичное статистические исследования 20го века, перенесенные в комьютер 21го века со всеми нынешними масштабами данные и при исполнении в некой programming frameworks (т.е. тут у вас уже какие-то среды - например данные у вас закачены с какого-то public repository через из public API, складированы в некой локальной DB, "высасываете" вы их из DB какими-нибудь SQL запросом, далее кодируете и pre-process'ите выбранный dataset всё в какой-нибудь Jupiter Notebook с помощью Python библиотеки pandas, визуализируете на картинках питоновским matplotlib и там же создаете publication-ready картини - вот это всё "среда" в широком смысле).

Machine Learning (ML) vs Statistics (Statistical Inference).

Цитата из выше указанной статьи:
"The major difference between machine learning and statistics is their purpose. Machine learning models are designed to make the most accurate predictions possible. Statistical models are designed for inference about the relationships between variables."

Т.е. по сути, в случае статистического анализа, вы собрали данные, уже имея в виду некую гипотезу мира (например, вероятность встретить паразитического червя у этой рыбы вырастает с 0 до 1 при росте массы тела и глубине водоема). И затем вы пытаетесь, уже имея данные, проверить вашу гипотезу, а возможно, если она будет отвергнута данными, сформулировать уточнение этой гипотезы или даже новую гипотезу. В типичном примере машинного обучения (особенно явно это в unsupervised deep learning), вы "бросаете" данные на алгоритм, обучаете neural network, и говорите "распознай вот это, а как уж ты это сдалаешь, мне пока не важно, т.е. мне важен результат, при этом масштабированный, эффективный в других контекстах и при других данных". И ML это - о чудо! - делает. Вы только валидируете и говорите "ок, значит смог как-то понять, как правильно классифицировать котов от собак по фото или видео изображению, а вот как ты это делаешь мы, создатели этой системы, даже не очень понимаем, или понимаем в общих чертах. Нас интересует перформанс и количество ошибок и как это можно улучшить и избежать или уменьшить overfitting". Т.е. как правило в статистике вы собрали данные. Зная, как специалист, что там могут быть за relationships между процессами, вы применяете статмодели и смотрите, подтверждаются ли модели данными и как валидируются эти модели. Если те предположения о том, как устроена система, данные подтвердили - вы радуетесь (т.е. систему вы более менее понимаете). Если совсем не подтвердились - значит вы либо ошибались и плохо понимаете механизм, либо данными плохие, либо комбинация. В ML вы скорее всего хотите практического применения без глубинного понимания driving processes. Т.е. вам нужно, к примеру, полуавтоматически считать темные клетки на отсканированном гистологическом препарате и отличать их от светлых. Алгоритм на training sample как-то adjust разные "векторы" параметров и их комбинации (н-р тело нейрона можно на картинке отличить по комбинации параметров absolute object size range + circularity+ average pixel colour + etc + ect...) и в итоге выдаем вам "blackbox" algorithm, которые с 93% вероятностью классифицирует темные клетки (что сопоставимо с ручным подсчетом глазками). Далее вы, понимая, что могут быть проблемы с curve fitting (т.е "перетренировки" алгоритма к конкретному sample), кросс-валидируете алгоритм на test sample из того же исследования (эти данные не использовались для первоначального алгоритма) и понимаете, что ошибка 90%, что ок (если увеличилась до 50%, значит у вас был overfitting к traning dataset и нужно применять разные ухищрения, чтобы overfitting уменьшить). Вся эта концепция training/test datasets, cross-validation как правило применяется в контексте ML, но опять же не исключительно (см ниже)

Capture.JPG

Могут быть зоны, где ML и Statistical Inference сливаются. К примеру, вы на примере конкретного исследования в отдельно взятом регионе России изучили влияние неких факторов на bird species abundance. Выработали какую-то там GLM. Она валидируется ОК. Далее опубликовали. К примеру, вероятность гнездования сапсанов в уезде N зависит от ~ сезона (вид мигрирующий) + плотности голубей (еда) + плотности обрывов на берегах водоемов (удобные для гнездования места) + плотности ЛЭП (последние снижают численность из-за риска для жизни). Далее к вам приходят bioconsulting company и вы вместе делаете следующую работу, где вы оцениваете, на основе первой работы (вот вам и training sample), численность вида в бОльшем регионе (test sample) и кросс-валидируете это реальными подсчетами на местах. Т.е. в данной линии вы по сути начали как statistical inference study, а закончили в концепции типичного ML.

Шутка в тему для отвлечения:




AI - Artificial Intelengence: тут просто. Такое "зонтичное" и очень широкое понятие (umbrella term), объединяющее самые разные направления computer sciences и engineering под одной общей идеей - обеспечить выполнение машиной (в широком смысле) каких-то когнитивных функций, ранее считавшихся типичными для биологических существ, например человека (а кем-то даже эти функции считались присущими только человеку). И тут ML - только одна из веточек на этом большом "дереве" (см ниже)

7-й тьюториал по программированию и статистики в R: визуализации данных, plotting, ggplot2

На этой неделе выложил 7-ю часть из моей серий тьюториалов по программированию и статистике с помощью R
(больше со ссылками на более ранние части можно посмотреть здесь).

Для удобства разбил на две подчасти, каждая по 40-50 минут. Тьюториалы на английском (CC - captions - работают неплохо, так что субтитры вам в помощь, если что)

7a: basic plotting (с помощью базовых builtin инструментов, в основном plot())


7b: more advanced plotting с помощью ggplot2
пакет для гибкого data visualization, часть tidyverse - "экосистемы" из пакетов R по обработке и визуализации данных, такой toolbox для data scientist)


Понятно, что это только основы и вы можете копать и учиться дальше, но это a good starting point.
Материалы на этот и все предыдущие тьюториалы (т.е. слайды, R code, дополн материалы etc) в расшаренной папке Google Drive (link), но людей не из моей организации и которых я не знаю лично мне нужно будет вручную авторизовывать (вас запросят послать запрос на авторизацию и я его могу легко удовлетворить, но только в форме запроса ДО отправки хотя бы представьтесь, объясните кто вы и откуда (хотя бы организация, страна), каким образом узнали о тьюториалах и для чего используете (интересно для себя)).

Teaser
В следующей серии планирую сделать введение в linear mixed effect models (LMMs или LMERs). Рассмотрим на примере построение, отбор и валидацию моделей. Это когда у вас зависимость может и линейная (не обязательно, но допустим), но есть разные сложности типа в большой выборке есть подвыборки. Н-р собирали зависимость биомассы травы в зависимости от экспозиции склона холма к солнцу (чем больше света тем выше биомасса), но использовали разные географические локации, так что каждое место сбора материала может иметь уникальные свойства (состав почвы, высоту на уровнем моря и проч.). Всё в кучу сваливать можно, но неправильно, а нужно разные локации рассматривать как подвыборку (локация - random effect) и стоить модели (например ту же линейную регрессию), учитывая принадлежность точек к той же или разным локациям (учитывая random effect), чтобы делать общие выводы (если этого не делать, то часто бывает переоценка значимости параметров модели т.е. intercept и slope)



И возможно GAM (generalized additive models) - когда у вас некая явная кривая (в статистическом жаргоне GAM - smoothers в той или иной степенью свободы) должна описывать данные. Например как температура и численность животных связаны между собой (температурный оптимум)

R programming, воркшопы по программированию на R и статистика для биологов и биомед студентов



С конца февраля 2020 г. в своем Keele University (больше информации о Keele Uni можно найти here, here) активно разрабатываю серию воркшопов, обучающих студентов (обычно post grads) и даже некоторых преподавателей прежде всего биологических и биомедицинских направлений статистическому анализу данных с помощью языка программирования R. Когда я не так давно пришел в Keele, то одной из первых административных нагрузок для меня стало представительство молодых исследователей в Research Committee моей School of Life Sciences (есть такое понятие в английском ECRs - early career researchers, обычно это молодые lecturers, аналог assistant professors в UK, в течение первых нескольких, кажется 5, лет их первого постоянного контракта в UK Higher Education). По разговорам с коллегами понял, что в принципе элементов биостатистики и basics of data science, адаптированных для студентов и даже academic staff, очень не хватает. Иногда на кампусе иные школы и факультеты проводят one-off курсы такого рода, но они не очень регулярные и часто в стиле crash course, когда информация дается быстро, сложно и недостаточно практично. Так в апреле 2018 г. наша школа купила на outsource 3-дневых курс R programming и tutor дал его 3 полными последовательными днями. Никаких homeworks и online материала. Основы были даны доступно, но быстро скатились в сложности, что было сложно усвоить в такой короткий срок.

Для более глубокого изучения спроса я составил опросник в Google Forms (кстати, мой первый опыт - очень классная и быстрая в усвоение штука среди многих до этого мною не освоенных Google Tools). По результатам проведенного survey (pie chart внизу оттуда) оказалось, что около 30 человек хотели бы посещать занятия. Из них как и ожидалось, примерно 50% - это PGRs (post graduate students, в основном магистранты, но и PhDs), около 13% постдоки, но также есть некоторое количество academic staff (Life Sciences в основном, плюс несколько людей из соседней School of Medicine), а даже некоторые undergrads, которым, раз они выяснили сами, а разрешил посещать занятия, т.к. принять всех бакалавров у меня не хватит room capacity (это пока не утвержденная программа или модуль с выделенными аудиториями).



В результате с конца февраля по сейчас я провел 6 одночасовых воркшопов (3 успел до lock-down в оффлайне - посетили 12-25 человек, и 3 затем в онлайне с записаннами в Snagit видео). Feedback пока хороший. Все студенты имеют онлайн Google Drive доступ к видео материалу, PowerPoint слайдам и R codes, а также дополнительному материалу (разные шпаргалки=cheatsheets.

Курс скорее ориентирован не на основы статистики и конкретные биостатистические методы, интересные более узким специалистам, а скорее на быстрое понимание и применение R programming, начиная с нуля. Пока мы разобрали следующие разделы.
1) Основые R, установка R и RStudio
2- 3) Типы данные и exploratory analysis
4) Написание и применение функций, а также control flow (e.g. for loops), функции семейства apply
5) Pairwise tests (e.g. t tests), ANOVA (analysis of variance)
6) Простая линейная регрессия, ANCOVA (analysis of covariance), как делать модели и понимать их outputs, основы model selection (этот w/shop получился большим)

Видео сессии трех последних из вышеупомянутых воркшопов я выложил также и на Youtube (внизу под катом):

Collapse )

Сейчас я завершаю 7-й воркшоп - Основы data visualization and plotting, более продвинутый plotting (e.g., ggplot2, трехмерные интерактивные инструменты)

В планах дать еще материал по следующим темам:
- Более гибкая работа с data preprocessing and data manipulations (tidyverse)
- Не всё можно сделать простыми регрессиями и линейными моделя - работа с непараметрическими статистиками и более сложными моделями типа linear mixed effect models, generaliased mixed effect models, additive models (LME, GLM, GLMM, GAM - вот это вот всё)
- Основы Bayesian statistics in R. Всё что вы хотели, но боялись узнать для начала работы с байесовскими методами
- Введение в spatial analysis in R (карты, shapefiles, элементы GIS в R)
- Основы биоинформатики в R (с помощью приглашенного bioinformatician спикера)
- Разработка простых интерактивных веб приложений в R без знания html, js - R Shiny apps
- Рассматриваются также при наличии сроса вещи типа (i) элементы круговой статистики в R; (ii) animated data visualization

Еще в планах на ближайшие годы:
Вероятно часть этого материала войдет в мой преподавательский контент уже в официально утвержденные модули и программы (например, что-то в модуль Research and Analytical Skills для Level 5 - второй год бакалавратуры) и сделаю свой [для начала elective] модуль типа Data Science for Biologists. Рассматриваю вторую серию воркшопов с добавлением элементов работы на Python, там где есть оправданное применение для современных задач биологов и biomed студентов и преподавателей (например, где есть tools, более развитые в Python, для bioinformatics, advanced data manipulations (e.g., pandas library), элементы machine learning для проблем типа классификации (tensorflow), простые элементы image processing с помощью библиотеки OpenCV).

В принципе для большего outreach можно подумать и о проведение каких-то удаленных teaching events в том числе на русском (желательно с поддержкой других спикеров). В современном мире, особенно как показал covid-19 crisis, вот такие вещи даже нужно делать просто в формате вебинара и онлайн тьюториалов. Благо Zoom, Google Hangouts и другие платформы позволяют, и не надо будет людям ждать, когда будет время и деньги на event fee, жилье и поездку, а также не надо себя мучать долгими перелетами, если все аспекты - от теории до hands on applications - можно сделать удаленно [хотя радость поездок, реальных встреч и посиделок после них никто не отменял, в том числе для меня :)]).

Изучаю Webflow...

Решил сделать себе сайт Keele University лабы и постепенно его наполнять содержимым так, как хочется мне. Пора бы уже, а то animal-navigation.net в своем нынешнем виде устарел в силу изменившихся обстоятельств (в Bangor University я больше не работаю, а Ingo Schiffner - создатель сайта - уйдет через месяц-два, если не будет гранта, то и навсегда). Да и сделан он довольно убого и не мной (сделал Ingo, правда бесплатно, но мой домен и хостинг), а университетская страничка - это вещь отдельная и это страничка. Как это часто бывает - что корпоративное, то довольно негибкое, с ограниченным по дизайну layout'ом, и нужно каждый раз просить администратора, порой несколько раз для одного изменения (не всегда делают с первого раза как хотел). Ну да ладно. Университетсткая страничка должна быть и на ней будет ссылка на свой сайт, а на нем уже можно быть себе хозяином.

Но конечно есть но. Бюджетов больших на веб дизайнера у меня нет. Однако я понимаю основы html, css и js, но я точно не web developer, и учиться кодингу глубже для создания 1-2 веб-сайтов (еще один сайт планируется для своей компании чуть попозже), чтобы через несколько лет подзабыть многое из-за нерегулярного использования - это чересчур. Конечно есть расплодившиеся web-site builders (e.g., Wix, Squarespace среди прочих), но пока остановился на Webflow. У них отличная гибкая конценция WYSIWYG и такой браузерный IDE. Конценция point-and-click, как и у других, но при этом всё очень гибко и за всем этим конечно же идет генерация кода.

webflow1.PNG

К тому же можно это использовать это как CMS и совершенно нормально потом уйти от них (хотя бы на время), забрав с собой HTML, CSS  и JS файлы на свой хостинг (который у меня уже есть и уже оплачен). Ну у всех сайт-билдеров это вообще возможно или это делается очень криво. Да, есть конечно определенный learning curve и придеться немножко поучиться (нужно понимать даже не кодинг, а базовые конценции веб-дизайна типа иерархии, наследования, styling, типы элементов, padding, box model и подобные). Но есть замечательные коллекции отличных, коротких и прикольно сделанных уроков https://university.webflow.com/lesson



Посмотрим, что из этого выйдет. Пока учусь.

Какой дизайн оптимален для создания веб сервиса, визуализирующего данные на карте в браузере?

Я тут для себя и общественности уже некоторое время (где-то разбираясь самостоятельно, где то заказывая куски работы сторонним девелоперам), создаю IoT и веб сервис, который будет показывать траектории перемещения в природе животных с трекерами. В посте речь не о трекерах и их технологиях (это отдельный пост, тоже интересный), а о разработке back-end инфраструктуры, учитывая новый Закон о защите данных (GDPR).

По мере того, как трекеры посылают от животных данные по локациям, каждый пользователь будет накапливать свою собственную MySQL базу данных (по сути таблицу, где каждая строчка содержит номер девайса, дата/время локации, широта/долгота). Допустим каждая таблица будет иметь свой уникальный token (не уверен, что это нужно, но допустим).

В конечном итоге пользователь должен иметь возможность сделать следующее:

1) зарегистрироваться (понятно, что единожды), верифицировав почту
2) залогиниться и после этого
3) в его браузер закачается GUI, прототип которого написан (см ниже, сейчас написано на Spring Boots framework - вроде Java кроссплатформенная технология). GUI будет показывать на странице браузера пользователя окошко Google Map с траекториями животных, а рядом будут некоторые widgets для простейших манипуляций с визуализированными данными (например, выбор фильтрование трекеров по id и данных по дате).


Как я сейчас back-end дизайн себе представляю (очень смутно).

1) Регистрация на сайте, залогинивание, хранение персональных данных в свете комплаенса с GDPR

Прользователь идет на что-то типа https://my-service.com/registration.php
В идеале я хочу аутсорсить аутентификацию пользователя и хранение персональных данных. Идея в том, чтобы не париться об апдейтах и вообще снять с себя ответственность за утечки. Вроде можно это сделать с помощью сторонних authentification services (далее для краткости AU). Я очень смутно представляю себе как это может работать. Вроде пользователю присваивается token, хрянящийся на моем сервере и соответствующий определенной DB (как это делается автоматически и как об этом токене знает сторонний authentification service я пока не знаю). Пользователь по указанному линку регистрации перенаправляется на AU, где заполняет все формы. Возможно я, как администраток системы, и сообщаю пользователю token ДО регистрации просто по мейлу. После заполнения пользователем форм AU посылаем мейл для верификации мейла. Далее второй мейл об успешной регистрации с credentials.

2) Использование GUI после регистрации
Далее пользователь уже идет на my-service.com/login.php. Снова переправляется на AU, который его залогивает и перенаправляет ко мне на сайте с token в payload HTTP запроса. Мой сайт сравнивает token с имеющимися и, если находиться match, загружает в браузер GUI с доступом к данным именно этого пользователя (написан сейчас на Spring Boots). В браузере закачивается Google Maps и виджетами. Из этого GUI пользователь может доставать данные только из его собственной MySQL DB в режиме read-only (показывать все данные или отфильтрофанные по времени и tracker id).


Как обеспечить такой функционал и задизайнить систему? Может кто поделиться опытом. Спросил на stackoverflow тоже, но может и здесь будет какой feedback. Заранее спасибо.

JSON data не добавляются в MySQL PHP скриптом

Я конечно кодер еще тот, но сейчас разрабатываю систему, где у меня есть Particle Electron

Он будет в компактном кейсе. Идея в том, чтобы по мобильным вышкам определять местоположение.

Я изучил документацию для particle и немного разобрался с C/C++. Написал для платы простенькую прошивку, которая периодически посылает на сервер Particle Cloud данные о мобильной вышке (там на самом деле 5 идентификаторов: MCC - код страны, MNC - код оператора, и три индентификатора самой вышки - LAC, CI, BSIC). Данные эти Particle Cloud не хранит, а посылает в виде JSON файла на мой сервер. Сервер умещается на Raspberry Pi 3 дома в углу стола. Кстати, кому интересно как это сделать, потом напишу (спойлер - фича в том, чтобы подружиться с каким-то сервисом dynamic IP, потому что у вас в локальке за роутером конечно нет глобального да еще и фиксированного IP, но dynamic IP это решение. Я использую Dynu.net)

Данные JSON выглядят примерно так


На сервере у меня LAMP стэк:
Ubuntu Server 18.04 + Apache2 + MySQL + PHP.

База данных MySQL создана. В ней просто будут добавляться записи из key: value пар "MCC":"value1", "MNC": "value2".

Проблема сейчас с PHP скриптом, который я тут написал, прочитав первую в своей жизни книжку по PHP/MySQL. Particle Cloud посылает JSON данные на мой php скрипт. Как вы видите ниже, PHP скрипт должен парсировать JSON, потом создавать MySQL query, вынимать нужные key-value пары и вставлять значения в нужные поля моей базы данных.

<?php

$json=$_POST;
$data=json_decode($json, true);

$hostname="localhost";
$username="user";
$password="password";
$db="My_DB";

$dbconnect=mysqli_connect($hostname, $username, $password, $db);

if ($dbconnect->connect_error) {
    die("Database connection failed:" . $dbconnect->connect_error);
}

$mcc=$data["MCC"];
$mnc=$data["MNC"];
$lac=$data["LAC"];

$query="INSERT INTO `My_Data_Table` (`mcc`, `mnc`, `lac`)
                            VALUE ('$mcc', '$mnc', '$lac')";

if (!mysqli_query($dbconnect, $query)){
    die('An error occurred.');
}else{
    echo "Success!";
}

mysqli_close($dbconnect);

?>




Но пока скрипт ничего не добавляет. Тестирую это из терминала ubuntu server'а. Curl с verbose ответом берет JSON файл с данными и посылает его на PHP скрипт. Curl такой:

curl -v -X POST --header 'Content-Type: application/json; charset=UTF-8' --data my_file.json http://localhost/my_php_file.php

Получаю общую инфу от выполнения curl, мол данные то посылаются, но Apache выдает 500 Internal Server Error (общая ошибка, где она закралась - хз)

Trying 127.0.0.1
Connected to localhost port 80
POST /php-parser.php HTTP/1.1
HOST:localhost
User-Agent: curl/7.58.0
Accept: */*
Content-Type: application/json; charset=UTF-8
Content-Length: 210

*upload completely sent off: 210 of 210 bytes
*HTTP/1.0 assume close after body
HTTP/1.0 500 Internal Server Error
Server: Apache/2.4.29 (Ubuntu)
Content-Length:0
Connection: close
Content-Type: text/html; charset=UTF-8



На stackoverflow в архивах ничего не нашел. Запостил вопрос здесь. Модераторы пост пометили [duplicated], потому что видимо подумали, что у меня в php скрипте путаница с backticks, single or double quotes. Сказали, мол см. сюда. Посмотрел. Применил. Всё та же ошибка.

Пока не знаю, кто поможет. Нужны спецы в PHP/MySQL/Backend. Ищу на upwork. Если у кого идеи и предложения с интересом выслушаю.

Подсоединяюсь к OpenSSH server на Ubuntu 16.04 -> putty всё время timed out

С компа на Windows 7 через LAN или мобильную связь (оба правда от одного провайдера) пытаюсь подключиться на RPi 3 с Ubuntu 16.04 и включенным OpenSSH на стандартном 22 порту. Ssh на распбери бегает. Настройки дефолтные. Putty на винде всё время timed out. На мобиле если поставить разные ssh клиенты - та же история. В чем дело - хз.

Может быть мобильный (он же интернет) провайдер закрыл 22 порт? Впрочем менял порт на 443 на ssh и таже история. Т.к. тут много разных узких мест может быть, нужно постепенно всё исключать. Может быть кто-то подбросит идеи для troubleshooting? Может есть public ssh server чтобы проверить гипотезу о том, что провайдер виноват?