Одним из интересных профилей применения современного МК, безусловно, является медицина. Спектр приборов здесь достаточно широк, начиная от простых термометров, где можно применить простой STM8L с ЖК экраном, заканчивая навороченными кардио-мониторами, измерителями ЭКГ, холтерами с возможностями дистанционного сбора и отправки информации по эйзернет или беспроводно с коек пациентов прямо в кабинет глав-врачу. Сегодня мы поговорим о возможности применения МК STM32 при неинвазивном измерении артериального давления осциллометрическим методом. Всех заинтересованных прошу под кат.
Глеб Ницман @gleb_l
Инженер
Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 3.14 из 6
15 min
32KTutorial
Содержание основного курса
- Статья 1: алгоритм Брезенхэма
- Статья 2: растеризация треугольника + отсечение задних граней
- Статья 3: Удаление невидимых поверхностей: z-буфер
- Статья 4: Необходимая геометрия: фестиваль матриц
- Статья 5: Пишем шейдеры под нашу библиотеку
- Статья 6: Чуть больше, чем просто шейдер: просчёт теней
- Статья 3.1: Настала пора рефакторинга
- Статья 3.14: Красивый класс матриц
- как работает новый растеризатор
Общение вне хабра
Если у вас есть вопросы, и вы не хотите задавать их в комментариях, или просто не имеете возможности писать в комментарии, присоединяйтесь к jabber-конференции 3d@conference.sudouser.ru4 Приветствие и вступление
Нумерация в прошлой статье закончилась на 3, в этой будем продолжать нумеровать насквозь.UPD: ВНИМАНИЕ! Раздел, начиная с номера 3.1, 3.14 и 3.141 и далее, будет о тонкостях реализации основы основ компьютерной графики — линейной алгебры и вычислительной геометрии. О принципах графики пишет haqreu, я же буду писать о том, как это можно внятно запрограммировать!
Эта статья является продолжением серии статей о практической реализации элементов вычислительной геометрии, и, в частности, программного отрисовщика, с использованием C++98. Мы с haqreu сознательно идем на использование прошлой версии стандарта и написание собственной геометрической библиотеки для того, чтобы, во-первых, выпустить код примеров, которые без особых трудностей будут компилироваться большинством имеющихся компиляторов, а во-вторых, чтобы в нашем коде не было ничего, что скрыто в недрах библиотеки. В статье излагаются вопросы реализации шаблона прямоугольной матрицы
template<size_t DimRows,size_t DimCols,typename number_t> class mat;
4.1 Благодарности
Я выражаю огромную признательность haqreu, как основоположнику данного курса. Так держать!Я очень признателен lemelisk за предварительное рецензирование и ревью моих исходников. Спасибо за плодотворные дискуссии!
Также я должен поблагодарить Mingun за ценное замечание об оформлении шаблонов. Надеюсь, они стали доступнее для прочтения.
+37
OpenOCD, ThreadX и ваш процессор
8 min
16KДанная заметка может оказаться полезной для людей, который пишут bare-metal код и используют ThreadX в своих задачах (по собственному выбору или по навязыванию SDK). Проблема в том, что что бы эффективно отлаживать код под ThreadX или другую многопоточную операционную систему нужно иметь возможность видеть эти самые потоки, иметь возможность посмотреть стек-трейс, состояние регистров для каждого потока.
OpenOCD (Open On Chip Debugger) заявляет поддержку ThreadX, но не сильно явно оговаривает её широту. А штатно, на момент написания статьи, в версии 0.8.0, это всего два ядра: Cortex M3 и Cortex R4. Мне же, волею судеб, пришлось работать с чипом Cypress FX3 который построен на базе ядра ARM926E-JS.
Под катом рассмотрим что нужно сделать, что бы добавить поддержку вашей версии ThreadX для вашего CPU. Акцент делается на ARM, но, чисто теоретически, вполне может подойти и для других процессоров. Кроме того, рассматривается случай, когда доступа к исходникам ThreadX нет и не предвидится.
OpenOCD (Open On Chip Debugger) заявляет поддержку ThreadX, но не сильно явно оговаривает её широту. А штатно, на момент написания статьи, в версии 0.8.0, это всего два ядра: Cortex M3 и Cortex R4. Мне же, волею судеб, пришлось работать с чипом Cypress FX3 который построен на базе ядра ARM926E-JS.
Под катом рассмотрим что нужно сделать, что бы добавить поддержку вашей версии ThreadX для вашего CPU. Акцент делается на ARM, но, чисто теоретически, вполне может подойти и для других процессоров. Кроме того, рассматривается случай, когда доступа к исходникам ThreadX нет и не предвидится.
+12
Как взломать двухфакторную аутентификацию Яндекса
2 min
103KНаконец-то Яндекс запилил двухфакторную аутентификацию. Я не ждал подвоха, но, похоже, зря.
Как работает двухфакторная аутентификация Яндекса?
В браузере отображается QR-код, юзер сканирует его специальным приложением, браузер сразу это чувствует и авторизует пользователя.
QR-код расшифровывается в ссылку вот такого вида:
yandex.ru/promo/2fa?track_id=38e701d0bb5abaf50d381c3f95e0f341a8
Внутри всего этого веб-страничка с QR-кодом постоянно опрашивает сервер в ожидании авторизации:
Как только пользователь отсканирует приложением Яндекса QR-код, следующий такой запрос отдаст браузеру куку.
В чем здесь проблема?
Как работает двухфакторная аутентификация Яндекса?
В браузере отображается QR-код, юзер сканирует его специальным приложением, браузер сразу это чувствует и авторизует пользователя.
QR-код расшифровывается в ссылку вот такого вида:
yandex.ru/promo/2fa?track_id=38e701d0bb5abaf50d381c3f95e0f341a8
Внутри всего этого веб-страничка с QR-кодом постоянно опрашивает сервер в ожидании авторизации:
POST /auth/magic/status/ HTTP/1.1
Host: passport.yandex.ru
track_id=38e701d0bb5abaf50d381c3f95e0f341a8
Как только пользователь отсканирует приложением Яндекса QR-код, следующий такой запрос отдаст браузеру куку.
В чем здесь проблема?
+141
Реверс-инжениринг КР580ВМ80А / i8080 завершен
2 min
168K
Оказалось, в КР580ВМ80А ровно 4758 транзисторов (а не 6000 или 4500, как иногда ошибочно упоминают).
Топология КР580ВМ80А похожа, но не идентична i8080. Тем не менее, отличий в реализации опкодов КР580ВМ80А не было обнаружено.
Verilog-модель успешно прошла зубодробительный тест качества симуляции и как Verilog-модель, и как FPGA заменяя реальный КР580ВМ80А в "Специалисте".
Файлы: Главная модель Verilog, схема, Полный пакет файлов.
+155
Система автоматической оценки возраста по изображениям лиц
21 min
20KTranslation
Аннотация
Люди — это самые важные объекты слежения в системах видеонаблюдения. Тем не менее, слежение за человеком само по себе не дает достаточной информации об его мотивах, намерениях, желаниях и т.п. В этой работе мы представляем новую и надежную систему для автоматической оценки возраста с помощью технологий компьютерного зрения. Она использует глобальные особенности лица, полученные на основе комбинирования вейвлетов Габора и сохранение ортогональности локальных проекций Orthogonal Locality Preserving Projections, OLPP). Кроме того, система способна оценивать возраст по изображениям в реальном времени. Это означает, что предлагаемая система имеет больший потенциал по сравнению с другими полуавтоматическими системами. Результаты, полученные в процессе применения предлагаемого подхода, могут позволить получить более ясное понимание алгоритмов в области оценки возраста, необходимых для разработки приложений, актуальных для реального применения.
Ключевые слова: вейвлеты Габора, изображение лица, оценка возраста, метод опорных векторов (Support Vector Machine, SVM).
Люди — это самые важные объекты слежения в системах видеонаблюдения. Тем не менее, слежение за человеком само по себе не дает достаточной информации об его мотивах, намерениях, желаниях и т.п. В этой работе мы представляем новую и надежную систему для автоматической оценки возраста с помощью технологий компьютерного зрения. Она использует глобальные особенности лица, полученные на основе комбинирования вейвлетов Габора и сохранение ортогональности локальных проекций Orthogonal Locality Preserving Projections, OLPP). Кроме того, система способна оценивать возраст по изображениям в реальном времени. Это означает, что предлагаемая система имеет больший потенциал по сравнению с другими полуавтоматическими системами. Результаты, полученные в процессе применения предлагаемого подхода, могут позволить получить более ясное понимание алгоритмов в области оценки возраста, необходимых для разработки приложений, актуальных для реального применения.
Ключевые слова: вейвлеты Габора, изображение лица, оценка возраста, метод опорных векторов (Support Vector Machine, SVM).
+18
Баг в CLR: как затащить объект в песочницу без маршаллинга и вызвать Callback
3 min
8KДобрый день! Надеюсь, я уже завоевал на Хабре достижение «узнал автора по заголовку» -) Однако сегодня речь пойдет о свежей, еще не закрытой уязвимости в .Net, на которую меня навел своей мыслью один человек (кто подкинет ему инвайт?), который написал мне на почту:
Сначала я его не понял, но потом родился пример кода, который пробрасывает любой объект типа, находящегося в SharedDomain в песочницу и позволяет использовать его методы БЕЗ маршаллинга.
Дырой, с одной стороны это назвать достаточно сложно, т.к. почву для этого должен подготовить хост. И не самым обычным способом, надо заметить. Но с другой стороны… Да, это
баг.
Первое, что нам понадобится — это ставшие обыденностью, методы EntityPtr.ToPointer() и *.ToInstance() из
DotNetEx. Их комбинация заставляет приводить объект к несовместимому типу. Т.е. к тому типу, которым он не является:
Естественно, если вызвать любой метод у такой «строки», ничего не получится: вылетит Exception (кроме виртуальных методов от object — их позиции в таблице вирт методов совпадут с переопределенными в нашем типе и вызов произойдет корректно)
Однако, поскольку строка является уже сериализованным объектом, то при маршаллинге она передается по ссылке, без копирования. Это значит, что мы можем прокинуть ее в метод, код которого выполняется в «песочнице» и там, внутри, сделать кастинг обратно в тип.
Вы пытались IL кодом приводить объекты к строковому типу и передавать в другие домены?
Сначала я его не понял, но потом родился пример кода, который пробрасывает любой объект типа, находящегося в SharedDomain в песочницу и позволяет использовать его методы БЕЗ маршаллинга.
Дырой, с одной стороны это назвать достаточно сложно, т.к. почву для этого должен подготовить хост. И не самым обычным способом, надо заметить. Но с другой стороны… Да, это

Первое, что нам понадобится — это ставшие обыденностью, методы EntityPtr.ToPointer() и *.ToInstance() из

string str = EntityPtr.ToInstance<string>(EntityPtr.ToPointer(new List<int>()));
Естественно, если вызвать любой метод у такой «строки», ничего не получится: вылетит Exception (кроме виртуальных методов от object — их позиции в таблице вирт методов совпадут с переопределенными в нашем типе и вызов произойдет корректно)
Однако, поскольку строка является уже сериализованным объектом, то при маршаллинге она передается по ссылке, без копирования. Это значит, что мы можем прокинуть ее в метод, код которого выполняется в «песочнице» и там, внутри, сделать кастинг обратно в тип.
+20
Deep learning и Caffe на новогодних праздниках
9 min
56KМотивация
В данной статье вы познакомитесь c применением deep learning на практике. Будет использован фреймворк Caffe на датасете SVHN.
Deep Learning. Этот buzz word уже давно звенит в ушах, но попробовать его на практике никак не удавалось. Подвернулся удобный случай это исправить! На новогодние праздники был назначен контест на kaggle по распознаванию номеров домов в рамках курса по анализу изображений.
+21
Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 1 из 6
7 min
411KTutorial
Содержание курса
- Статья 1: алгоритм Брезенхэма
- Статья 2: растеризация треугольника + отсечение задних граней
- Статья 3: Удаление невидимых поверхностей: z-буфер
- Статья 4: Необходимая геометрия: фестиваль матриц
- Статья 5: Пишем шейдеры под нашу библиотеку
- Статья 6: Чуть больше, чем просто шейдер: просчёт теней
Улучшение кода
Official translation (with a bit of polishing) is available here.
Постановка задачи
Цель этого цикла статей — показать, как работает OpenGL, написав его (сильно упрощённый!) клон самостоятельно. На удивление часто сталкиваюсь с людьми, которые не могут преодолеть первоначальный барьер обучения OpenGL/DirectX. Таким образом, я подготовил краткий цикл из шести лекций, после которого мои студенты выдают неплохие рендеры.
Итак, задача ставится следующим образом: не используя никаких сторонних библиотек (особенно графических) получить примерно такие картинки:

Внимание, это обучающий материал, который в целом повторит структуру библиотеки OpenGL. Это будет софтверный рендер, я не ставлю целью показать, как писать приложения под OpenGL. Я ставлю целью показать, как сам OpenGL устроен. По моему глубокому убеждению, без понимания этого написание эффективных приложений с использованием 3D библиотек невозможно.
+194
Предупреждён — значит, вооружён. Часть 2
9 min
77K- Часть 1: фотосинтез, все живое дышит, шоковые измерения.
- Часть 2: вентиляция помещений, вред собраний, преимущество двух приборов для проведения экспериментов.
- Часть 3: графики, калибровка, разбор прибора, принцип работы, брожение.
Чем больше народа, тем меньше кислорода

Воздух является тонкой материей, в которой диоксид углерода занимает по количеству лишь четвертое место, но имеет важнейшее значение для всего живого. По концентрации углекислого газа, которая определяется сравнительно легко, можно косвенно судить о содержании других веществ и использовать ее для анализа качества воздуха.
Концентрацию углекислого газа измеряют в пропромиллях — частей на миллион ppm (ppmv), миллиграммах на кубический метр или процентах.
Чтобы “поплавать” в значениях концентрации углекислого газа, можно почитать любую статью по обеспечению воздухообмена, пример “Сколько воздуха нужно человеку для комфорта?”
При повышенном содержании углекислого газа человек ощущает проблемы с дыханием (духота, удушье, кислородная недостаточность, нехватка воздуха), учащенный пульс, чувство усталости, разбитость, головную боль, головокружение, сонливость, невозможность сосредоточиться, потерю внимания, снижение работоспособности, раздражительность, обморок (хотя его он уже не ощущает) и т. д. — к счастью, не все симптомы сразу, и не каждым человеком.
Поговорка про количество народа/кислорода актуальна при нахождении людей в закрытом помещении — они поглощают кислород, а выделяют углекислый газ и другие вещества. Поэтому необходимо осуществлять контроль над содержанием углекислого газа в каждом помещении, где находятся люди.
+46
Доработка USB-стека в микроконтроллерах STM32 и TivaC
5 min
31KНаличие USB порта в современных микроконтроллерах открывает широкие возможности для самостоятельного изготовления разнообразных управляемых с компьютера устройств. На практике, однако, выясняется, что поставляемые производителем библиотеки для работы с USB нуждаются в доработке. Если вам интересен опыт подобной доработки для двух популярных семейств МК — добро пожаловать под кат.
+24
Вопросы про индексы, которые вам не надо будет задавать
11 min
47KTutorial

После ответов на 14 вопросов об индексах, которые вы стеснялись задать, у меня возникло гораздо больше комментариев, уточнений и исправлений. Скомпилировать из всего этого статью выглядело затеей с минимумом пользы. И это заставило меня призадумался, а почему вообще мы должны «стесняться задавать» подобные вопросы? Стыдно не знать? А есть ли способ разобраться, не вгоняя себя в краску? Есть. Причем он избавит от многочисленных неточностей, которыми изобилуют многие «ответы». Вы будете чувствовать буквально каждый байт вашей базы кончиками своих пальцев.
Для этого, я предлагаю «поднять капот» у SQL Server и окунуться в сладостный мир шестнадцатеричных дампов. Может статься, что внутри все гораздо проще, чем вам казалось.
+32
Ручной монтаж сложных плат на компонентах 0402, 0603, QFN, LQFP и THT
5 min
86KПриветствую!

Сегодня речь пойдет о том, как добиться высокого качества монтажа на платах с большим количеством компонентов — до 1500шт (можно и больше при плотном монтаже или при сборке 1-2 плат одновременно — не более). Потребность в таком сложном монтаже обычно возникает при изготовлении первого макета или нескольких образцов, чтобы убедиться в правильности трассировки печатной платы (основных сложных моментов) или же при разовом производстве. После получения такого макета можно начинать отлаживать программное обеспечение и вносить корректировки в плату. Заводская сборка, в этом случае, не совсем подходит из-за ее стоимости, подготовки конструкторской документации, подборки компонентов, сроков, макетирования и многого другого (под катом картинки на 8Мб).

Сегодня речь пойдет о том, как добиться высокого качества монтажа на платах с большим количеством компонентов — до 1500шт (можно и больше при плотном монтаже или при сборке 1-2 плат одновременно — не более). Потребность в таком сложном монтаже обычно возникает при изготовлении первого макета или нескольких образцов, чтобы убедиться в правильности трассировки печатной платы (основных сложных моментов) или же при разовом производстве. После получения такого макета можно начинать отлаживать программное обеспечение и вносить корректировки в плату. Заводская сборка, в этом случае, не совсем подходит из-за ее стоимости, подготовки конструкторской документации, подборки компонентов, сроков, макетирования и многого другого (под катом картинки на 8Мб).
+62
Алгоритмы устранения ложных и избыточных данных в GPS-потоке
6 min
31KTutorial

Разработка электроники на базе GPS/ГЛОНАСС-технологий — одна из наших любимых тем на Хабре. Мы уже писали обзорную статью на эту тему, рассказывали про систему «ЭРА-ГЛОНАСС» и даже определяли своё местоположение по сетям сотовой связи.
В этот раз наш пост призван дать ответ на конкретный практический вопрос: «Как уменьшить объем потока данных с навигационно-связных терминалов без потери информативности?». Эта тема весьма актуальна, ведь услуги беспроводной связи составляют значительную часть финансовых затрат на обслуживание систем мониторинга транспорта.
Для начала давайте посмотрим, что представляет собой тракт подготовки и сбора информации на терминалах перед отправкой данных на сервер.
+30
Red Pitaya — 5 инструментов в 1 за 400$
3 min
46KВсего сутки остались до окончания кампании на Кикстартере. Так что вы ещё можете успеть заказать мультифункциональный измерительный прибор включающий в себя:

- 2-х канальный осциллограф
- 2-х канальный анализатор спектра с полосой пропускания 60 МГц
- 2-х канальный генератор сигналов произвольной формы
- 2-х канальный анализатор частотных характеристик с полосой пропускания 60 МГц
- программируемый PID-контроллер

+35
Мульти-WAN без лишней головной боли, или TP-Link TL-R480T+
4 min
143KНа днях, вернувшись с работы, в очередной раз выяснил, что Билайн-инетернет домашний благополучно лежит…
Всё-бы ничего, но сеть нужна была до зарезу, GPRS — ни в коем разе не спасает и вообще…
В принципе — почти год назад подключил QWERTY как дублирующего, благо у них акция была, но настроить на D-Link 320 с Олеговской прошивкой Мульти-WAN так и не удалось, как и на отдельно поставленном компе-роутере: всё банально — авторы «подробных» инструкций вечно считают, что вот их набор провайдеров совершенно универсален и вообще, плюс очепятки, глюки и т.д. и т.п. В итоге при пошаговом следовании инструкции не выходит в лучшем случае ничего, а в худшем — сброс или переустановка системы.
Продолбавшись в эту стену год назад в течении месяца я плюнул и забил: у Бии начался очередной период «просветления» и актуальность вроде-бы отпала…
Ну и вот очередной «заскок»… Гррр…
Повторять наступание на грабли как-то не хотелось, так что был открыт Маркет и начались поиски «жертвы».

Всё-бы ничего, но сеть нужна была до зарезу, GPRS — ни в коем разе не спасает и вообще…
В принципе — почти год назад подключил QWERTY как дублирующего, благо у них акция была, но настроить на D-Link 320 с Олеговской прошивкой Мульти-WAN так и не удалось, как и на отдельно поставленном компе-роутере: всё банально — авторы «подробных» инструкций вечно считают, что вот их набор провайдеров совершенно универсален и вообще, плюс очепятки, глюки и т.д. и т.п. В итоге при пошаговом следовании инструкции не выходит в лучшем случае ничего, а в худшем — сброс или переустановка системы.
Продолбавшись в эту стену год назад в течении месяца я плюнул и забил: у Бии начался очередной период «просветления» и актуальность вроде-бы отпала…
Ну и вот очередной «заскок»… Гррр…
Повторять наступание на грабли как-то не хотелось, так что был открыт Маркет и начались поиски «жертвы».

+29
Преобразование равномерно распределенной случайной величины в нормально распределенную
6 min
131KЭтот вопрос уже давно подробно изучен, и наиболее широкое распространение получил метод полярных координат, предложенный Джорджем Боксом, Мервином Мюллером и Джорджем Марсальей в 1958 году. Данный метод позволяет получить пару независимых нормально распределенных случайных величин с математическим ожиданием 0 и дисперсией 1 следующим образом:

где Z0 и Z1 — искомые значения, s = u2 + v2, а u и v — равномерно распределенные на отрезке (-1, 1) случайные величины, подобранные таким образом, чтобы выполнялось условие 0 < s < 1.
Многие используют эти формулы, даже не задумываясь, а многие даже и не подозревают об их существовании, так как пользуются готовыми реализациями. Но есть люди, у которых возникают вопросы: «Откуда взялась эта формула? И почему получается сразу пара величин?». Далее я постараюсь дать наглядный ответ на эти вопросы.

где Z0 и Z1 — искомые значения, s = u2 + v2, а u и v — равномерно распределенные на отрезке (-1, 1) случайные величины, подобранные таким образом, чтобы выполнялось условие 0 < s < 1.
Многие используют эти формулы, даже не задумываясь, а многие даже и не подозревают об их существовании, так как пользуются готовыми реализациями. Но есть люди, у которых возникают вопросы: «Откуда взялась эта формула? И почему получается сразу пара величин?». Далее я постараюсь дать наглядный ответ на эти вопросы.
+67
Декартово дерево: Часть 2. Ценная информация в дереве и множественные операции с ней
14 min
41KОглавление (на данный момент)
Часть 1. Описание, операции, применения.
Часть 2. Ценная информация в дереве и множественные операции с ней.
Часть 3. Декартово дерево по неявному ключу.
To be continued...
Тема сегодняшней лекции
В прошлый раз мы с вами познакомились — скажем прямо, очень обширно познакомились — с понятием декартового дерева и основным его функционалом. Только до сих мы с вами использовали его одним-единственным образом: как «квази-сбалансированное» дерево поиска. То есть пускай нам дан массив ключей, добавим к ним случайно сгенерированные приоритеты, и получим дерево, в котором каждый ключ можно искать, добавлять и удалять за логарифмическое время и минимум усилий. Звучит неплохо, но мало.
К счастью (или к сожалению?), реальная жизнь такими пустяковыми задачами не ограничивается. О чем сегодня и пойдет речь. Первый вопрос на повестке дня — это так называемая K-я порядковая статистика, или индекс в дереве, которая плавно подведет нас к хранению пользовательской информации в вершинах, и наконец — к бесчисленному множеству манипуляций, которые с этой информацией может потребоваться выполнять. Поехали.
Ищем индекс
В математике, K-я порядковая статистика — это случайная величина, которая соответствует K-му по величине элементу случайной выборки из вероятностного пространства. Слишком умно. Вернемся к дереву: в каждый момент времени у нас есть декартово дерево, которое с момента его начального построения могло уже значительно измениться. От нас требуется очень быстро находить в этом дереве K-й по порядку возрастания ключ — фактически, если представить наше дерево как постоянно поддерживающийся отсортированным массив, то это просто доступ к элементу под индексом K. На первый взгляд не очень понятно, как это организовать: ключей-то у нас в дереве N, и раскиданы они по структуре как попало.

+68
Dropbox ввёл единый тарифный план: 1TB — $9.99/месяц, $99/год
2 min
38K
Компания Dropbox обновила линейку тарифных планов. С сегодняшнего дня доступен только 1 тарифный план PRO: 1TB за $9.99/месяц или $99 в год.
А также были добавлены новые функции для PRO-юзеров: установка пароля на общую ссылку, установка срока действия общей ссылки, настройки доступа для общих папок и удалённое стирание файлов с потерянного устройства.
+38
Find invalid objects
7 min
20KTutorial

Если проводить аналогии с Oracle, то в SQL Server нельзя так же легко получить список невалидных объектов:
SELECT owner, object_type, object_name
FROM all_objects
WHERE status = 'INVALID'
В большинстве ситуаций, узнать о том, что скриптовый объект является невалидным, можно только при его выполнении. Конечно, такое положение дел, может не всех устроить, поэтому предлагаю написать скрипт по поиску невалидных объектов в базе данных.
+6
Information
- Rating
- 10,428-th
- Location
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Date of birth
- Registered
- Activity