Как стать автором
Обновить
0
0
Руслан Курбанов @rukurbanov

Пользователь

Отправить сообщение

Вычислительная геометрия, или как я стал заниматься олимпиадным программированием.Часть 1

Время на прочтение8 мин
Количество просмотров131K
Здравствуйте, уважаемые хабравчане! Это моя вторая статья, и мне хотелось бы поговорить о вычислительной геометрии.

Немного истории


Я являюсь студентом уже 4 курса математического факультета, и до того как я начал заниматься программированием, я считал себя математиком на 100 процентов.

В конце первого курса мой преподаватель по информатике, который занимается олимпиадным программированием, обратил на меня внимание. Им как раз не хватало одного математика в команду. Так потихоньку меня начали приучать к олимпиадному программированию. Скажу честно, для меня это было очень сложно: для человека, который узнал слово Delphi на первом курсе. Однако мой преподаватель оказался очень грамотным специалистом и нашел хороший подход ко мне. Он начал давать мне математические задачи, который я сначала решал чисто математически, а уже потом писал код (с грехом пополам).

Мне очень нравится подход моего преподавателя: «разберись с этой темой, а потом расскажи нам, да так чтоб мы все поняли».

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

Я помню, как долго мучился с этими задачами, чтобы они прошли все тесты на сайте informatics.mccme. Зато теперь я очень рад, что прошел через все испытания и знаю, что же такое задачи вычислительной геометрии.
Читать дальше →
Всего голосов 83: ↑72 и ↓11+61
Комментарии40

Вычислительная геометрия, или как я стал заниматься олимпиадным программированием. Часть 2

Время на прочтение6 мин
Количество просмотров144K

Вступление


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

Начнем с взаимного расположения точки относительно прямой, луча и отрезка.
Читать дальше →
Всего голосов 39: ↑31 и ↓8+23
Комментарии27

Движение робота к точке с заданными координатами

Время на прочтение6 мин
Количество просмотров51K
Приветствуем вас, уважаемые хабравчане!
Наш научный коллектив, который носит название Студенческого конструкторского бюро кафедры СУиИ Университета ИТМО, продолжает разработку курсов по робототехнике, и хочет поделиться одним из последних проектов на Lego NXT.

Ранее мы публиковали курс «Практическая робототехника»на NXT. Сейчас этот курс используется для обучения студентов на кафедре, и на площадке «Открытое образование». Так же публиковались фрагменты этого курса с подробным описанием действий для идентификации модели двигателя и расчета регулятора для робота Segway.
В этот раз было решено реализовать объезд препятствий роботом с дифференциальным приводом. Конструкция робота достаточно простая: два колеса с двигателями, гироскоп и пара ультразвуковых датчиков. Для оценки пройденного расстояния используются энкодеры на валу двигателя, для ориентации робота, измеряется гироскопом его угловая скорость и рассчитывается угол поворота, а расстояние до препятствия измеряется ультразвуковыми дальномерами.

Читать далее
Всего голосов 16: ↑15 и ↓1+14
Комментарии12

Руководство по организации архитектуры Android приложения

Время на прочтение23 мин
Количество просмотров47K
Привет, Хабр! Представляю вашему вниманию вольный перевод «Руководство по архитектуре приложения (Guide to app architecture)» из JetPack. Все замечания по переводу прошу оставлять в комментариях, и они будут исправлены. Так же для всех будут полезны комментарии от тех кто использовал представленную архитектуру с рекомендациями её использования.

Это руководство охватывает лучшие практики и рекомендуемую архитектуру для создания надежных приложений. Эта страница предполагает базовое знакомство с Android Framework. Если вы новичок в разработке приложений для Android, ознакомьтесь с нашими руководствами для разработчиков, чтобы начать работу и узнать больше о концепциях, упомянутых в этом руководстве. Если вы интересуетесь архитектурой приложений и хотели бы ознакомиться с материалами этого руководства с точки зрения программирования на Kotlin, ознакомьтесь с курсом Udacity «Разработка приложений для Android с помощью Kotlin».

Опыт пользователя мобильного приложения


В большинстве случаев настольные приложения имеют единую точку входа с рабочего стола или программы запуска, а затем запускаются как единый монолитный процесс. Приложения на Android имеют гораздо более сложную структуру. Типичное приложение для Android содержит несколько компонентов приложения, включая Activities, Fragments, Services, ContentProviders и BroadcastReceivers.

Вы объявляете все или некоторые из этих компонентов приложения в манифесте приложения. Затем ОС Android использует этот файл, чтобы решить, как интегрировать ваше приложение в общий пользовательский интерфейс устройства. Учитывая, что правильно написанное приложение Android содержит несколько компонентов, и пользователи часто взаимодействуют с несколькими приложениями за короткий промежуток времени, приложения должны адаптироваться к различным типам рабочих процессов и задач, управляемых пользователями.
Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Комментарии7

Project Loom: Современная маcштабируемая многопоточность для платформы Java

Время на прочтение27 мин
Количество просмотров25K


Эффективное использование многочисленных ядер современных процессоров — сложная, но всё более важная задача. Java была одним из первых языков программирования со встроенной поддержкой concurrency. Ее concurrency-модель, основанная на нативных тредах, хорошо масштабируется для тысяч параллельно выполняющихся стримов, но оказывается слишком тяжеловесной для современного реактивного программирования с сотнями тысяч параллельных потоков.


Ответ на эту проблему — Project Loom. Он определяет и реализует в Java новые легковесные параллельные примитивы.


Алан Бейтман, руководитель проекта OpenJDK Core Libraries Project, потратил большую часть последних лет на проектирование Loom таким образом, чтобы он естественно и органично вписывался в богатый набор существующих библиотек Java и парадигм программирования. Об этом он и рассказал на Joker 2020. Под катом — запись с английскими и русскими субтитрами и перевод его доклада.

Всего голосов 33: ↑33 и ↓0+33
Комментарии32

Работа с потоковым аудио

Время на прочтение5 мин
Количество просмотров38K

Введение


За получение необработанных данных (raw data) с микрофона отвечает класс android.media.AudioRecord. Он записывает данные во внутренний буфер, из которого мы должны периодически их забирать.
Читать дальше →
Всего голосов 30: ↑24 и ↓6+18
Комментарии9

Работа с устройствами USB в Android

Время на прочтение5 мин
Количество просмотров76K
В недавней статье на Geektimes в комментариях возник вопрос о поддержке в ОС Android периферии, подключенной к шине USB. Действительно, большинство вендорского ПО, к примеру, для работы с принтерами и МФУ, поддерживает только подключение по сети. Однако это не означает, что в самой ОС Android нет такой возможности — это означает лишь то, что большинство устройств не имеют полноценного USB хоста, и далеко не все имеют поддержку OTG. По сети же могут работать абсолютно все без исключения.
Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Комментарии4

Разработка мобильного приложения без сервера

Время на прочтение10 мин
Количество просмотров13K
Очень часто при разработке мобильных приложений (возможно с веб-приложениями та же проблема) разработчики попадают в ситуацию, когда бэкэнд не работает или не предоставляет нужных методов.

Такая ситуация может происходить по разным причинам. Однако, чаще всего на старте разработки, бэкэнд просто не написан и клиент начинает без него. В таком случае начало разработки затягивается на 2-4 месяца.

Иногда сервер просто отключился (упал), иногда не успевает выкатывать нужные методы, иногда есть проблемы с данными и т.п. Все эти проблемы привели нас к написанию небольшого сервиса Mocker, который позволяет подменить реальный бэкэнд.


Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии15

Пишем блог на микросервисах – часть 1 «Общее описание»

Время на прочтение4 мин
Количество просмотров16K
В этой статье хочу поделится нашими c SergeyMaslov наработками решения типовых задач с использованием микросервисной архитектуры на примере задачи «создание блога» (в надежде, что читатель представляет как устроен блог и это не должно вызывать вопросов по функциональности:)
Читать дальше →
Всего голосов 10: ↑10 и ↓0+10
Комментарии18

Основы Urho3D

Время на прочтение6 мин
Количество просмотров49K
С удивлением обнаружил, что на Хабре отсутствует информация о таком замечательном движке как Urho3D. Поэтому спешу исправить это досадное упущение. В этой вводной статье я постараюсь заострить внимание на тех вещах, которые пригодятся новичкам сразу же, но в тоже время не буду залезать в глубокие дебри, чтобы сходу не перегрузить большим объемом информации.

image

Что это за зверь?


Не будет преувеличением сказать, что Urho3D по возможностям сопоставим с Unity3D и работать с ним так же легко. При этом он бесплатен без каких-либо оговорок (лицензия MIT), доступен для многих платформ (Windows, Linux, Mac OS X, Android, iOS, Raspberry Pi, HTML5), невероятно быстр и легковесен. Позволяет писать игры на AngelScript (синтаксис похож на C#), LUA и C++. Если вы заинтересовались, то добро пожаловать под кат.
Читать дальше →
Всего голосов 36: ↑36 и ↓0+36
Комментарии37

Кроссплатформенное приложение в Android Studio на jMonkeyEngine 3

Время на прочтение6 мин
Количество просмотров23K
jMonkeyEngine (jME) — трёхмерный игровой движок с открытым исходным кодом. Написан на Java и использует по умолчанию LWJGL для рендеринга. Полностью поддерживаются версии OpenGL со второй по четвёртую.
Как-то раз упоминался на Хабре в далёком 2010-м году.

Помимо характеристик примечателен джавой и не очень примечателен средой разработки NetBeans, которая идёт в комплекте с SDK.

В данной статье хочу рассказать о том, как прикрутить обезьянку к привычной Android Studio.
Читать дальше →
Всего голосов 17: ↑15 и ↓2+13
Комментарии1

DIY/IoT-митап в офисе Mail.Ru Group 27 июля

Время на прочтение2 мин
Количество просмотров8.5K

27 июля в московском офисе Mail.Ru Group пройдет первый открытый Do It Yourself Meetup.

Хочешь сделать что-то хорошо – делай это сам! Московское сообщество DIY-движения Mail.Ru Group созывает всех на встречу, где мы поделимся секретами IoT- и DIY-направлений.

Мы покажем и расскажем, как самому сделать тепловизор, собрать систему безопасности на Tarantool, спроектировать модель для 3D-печати, построить электровелосипед из доступных материалов. Для того, чтобы проникнуться атмосферной хардварного креатива и вдохновиться на собственные подвиги, лучшего места на Земле 27 июля не найти.
Читать дальше →
Всего голосов 18: ↑14 и ↓4+10
Комментарии35

Автономная кроссплатформенная монолитная программа на Java

Время на прочтение21 мин
Количество просмотров62K
Я люблю desktop-приложения. Признаваться в этом нынче, похоже, стыднее, чем в связях с иностранной разведкой, но это так. Нет, это не значит, что я не люблю интернет-технологии. Более того, некоторые я не только уважаю, а даже более-менее знаю. Но, тем не менее, я скучаю по тем временам, когда программа писалась на одном компьютере, потом компилировалась и запускалась на других, разных компьютерах. Тогда везде (почти) была одна система — Windows с одной и той же API, почти не было проблем совместимости на уровне приложений, никто не материл разработчиков браузеров — все берегли нервы на разработчиков WinAPI, которые умудрялись создавать конфликты даже внутри нее одной. Но это я, конечно, иронизирую, а если серьезно — иногда и сейчас хочется написать просто desktop-приложение, да так, чтобы работало оно на всех популярных системах. Трудно? Если подумать и покопать, то не очень.

Еще я люблю языки высокого уровня с аккуратной архитектурой и строгой типизацией. Мои фавориты — Java и C#. Оба они предоставляют разработчику множество преимуществ по сравнению с C++, оба избавляют от ряда забот. Чем приходится платить? Тем, что таскаешь за собой тяжелую колоду, которая называется Oracle JVM, .NET или mono. Все три колоды весят сотни мегабайт и лицензию имеют такую, что каждый пользователь вынужден качать эту штуку сам, не путая при этом разрядность своего компьютера, а главное — программа на Java не может быть совместима со всеми версиями JVM разом, не так ли? И вот — мы приходим к тому, что просто скинуть программку другу (или миллиону друзей) и не заботиться о том, что она у него не запустится, не выходит. Приходится делать хитрые сетапы, вбивать костыли, и это я еще не упомянул .NET — однажды я видел у друга сразу 3 установленных версии, причем все три были нужны разным приложениям…

Стоп! А давайте напишем программу на Java, но так, чтобы она не требовала установки на машину какой-либо JVM, чтобы одним касанием собиралась под Windows, Linux и OS X и чтобы при этом занимала совсем чуть-чуть; так, чтобы никто даже не понял, что она написана, скажем, не на C. Невозможно? Совсем наоборот! (И нет, я имею в виду не gcj, который лишает Java всех ее прелестей. Рефлексия будет работать и даже сторонние jar вы сможете запускать).

Ну и как это сделать?
Всего голосов 156: ↑146 и ↓10+136
Комментарии80

Как мы поднимали IT-инфраструктуру [со дна]

Время на прочтение7 мин
Количество просмотров46K
Всем здравствуйте!

Спустя ровно год после написания статьи «Опыт работы эникейщиком/системным администратором в бюджетной организации» и 2,5 лет после написании моим зам. директора подразделения статьи «Реанимация ИТ инфраструктуры» я хотел бы продолжить данный рассказ.



Помню, в одном из комментариев я встретил фразу:
Поэтому всё же посоветую обоим хабраюзерам из этой помойки собраться с духом и свалить — ничего вы в этом болоте не разгребёте и ещё через два года, а сидеть страдать фигней за 12 тысяч — это очень идиотский способ убить время.
Но, как ни странно, из того, что мы делали все-таки что-то получилось, и я хотел бы рассказать как далеко мы зашли:
  • создан домен Active Directory Domain Services с автоматическим управлением учетными записями и подразделениями (OU);
  • внедрен Office 365;
  • развернут Spacewalk (ПО для управления *nix операционными системами);
  • создан HA MySQL Server master-master (Active-Passive);
  • развернута хостинг-панель Ajenti;
  • настроен SSL доступ к веб-ресурсам компании;
  • мигрирован VMware vCenter с 4.0 на 5.1U3;
  • внедрен ESET NOD32 Business Edition ver. 5;
  • внедрена авторизации в сети на базе МСЭ Cisco ASA 5525-X NGFW c CDA;
  • разрешены проблемы с кондиционированием в серверной.
Всплываем!
Всего голосов 44: ↑32 и ↓12+20
Комментарии71

Open source сервер онлайн-чатов на Java

Время на прочтение3 мин
Количество просмотров24K


Онлайн-чаты (или онлайн-консультанты) сегодня есть на многих сайтах. Кто-то ими активно пользуется, кто-то терпеть не может, а кто-то иногда открывает шутки ради. Для желающих развернуть свой собственный сервер чатов расскажу об open source решении Live Chat Engine.
Читать дальше →
Всего голосов 19: ↑15 и ↓4+11
Комментарии16

MySQL шпаргалки

Время на прочтение3 мин
Количество просмотров817K
Часто, когда разрабатываешь сайт, замечаешь, как на одни и те же грабли наступают разработчики при проектировании базы данных.

Сегодня я решил опубликовать свои шпаргалки, на самые часто встречающиеся ошибки при работе с MySQL.

Читать дальше →
Всего голосов 215: ↑193 и ↓22+171
Комментарии230

TOP'ай сюда

Время на прочтение5 мин
Количество просмотров177K
Обзор практически всех *top утилит под linux (atop, iotop, htop, foobartop и т.д.).

top

Все мы знаем top — самую простую и самую распространённую утилиту из этого списка. Показывает примерно то же, что утилита vmstat, плюс рейтинг процессов по потреблению памяти или процессора. Совсем ничего не знает про загрузку сети или дисков. Позволяет минимальный набор операций с процессом: renice, kill (в смысле отправки сигнала, убийство — частный случай). По имени top суффикс "-top" получили и все остальные подобные утилиты в этом обзоре.

atop


Atop имеет два режима работы — сбор статистики и наблюдение за системой в реальном времени. В режиме сбора статистики atop запускается как демон и раз в N времени (обычно 10 мин) скидывает состояние в двоичный журнал. Потом по этому журналу atop'ом же (ключ -r и имя лог-файла) можно бегать вперёд-назад кнопками T и t, наблюдая показания atop'а с усреднением за 10 минут в любой интересный момент времени.

В отличие от top отлично знает про существование блочных устройств и сетевых интерфейса, способен показывать их загрузку в процентах (на 10G, правда, процентов не получается, но хотя бы показывается количество мегабит).

Незаменимое средство для поиска источников лагов на сервере, так как сохраняет не только статистику загрузки системы, но и показатели каждого процесса — то есть «долистав» до нужного момента времени можно увидеть, кто этот счастливый момент с LA > 30 создал. И что именно было причиной — IO программ, своп (нехватка памяти), процесор или что-то ещё. Помимо большего количества информации ещё способен двумя цветами подсказывать, какие параметры выходят за разумные пределы.
Читать дальше →
Всего голосов 401: ↑389 и ↓12+377
Комментарии122

Нормализация отношений. Первая и вторая нормальные формы

Время на прочтение6 мин
Количество просмотров166K

Предисловие


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

Любому специалисту, по роду своей деятельности так или иначе связанному с проектированием реляционных баз данных, полезно понимать и уметь осуществить нормализацию отношений. И этим постом хотелось бы начать небольшую серию публикаций, посвящённых нормальным формам, имеющую целью дать тем читателям Хабрахабра, которые по различным обстоятельствам ещё не освоили эту тему, возможность легко заполнить этот пробел в знаниях.

Статья не имеет своей целью подробное и точное изложение принципов нормализациии, поскольку это, очевидно, невозможно в рамках блога в силу больших объёмов информации, необходимых для публикации при таком подходе. Кроме этого, для такой цели существует большое количество литературы, написанной прекрасными специалистами. Моя же задача, как я считаю, заключается в том, чтобы популярно продемонстрировать и объяснить основные принципы.
Читать дальше →
Всего голосов 64: ↑53 и ↓11+42
Комментарии23

Легким движением руки GeForce GTX 690 превращается в Quadro K5000 или Tesla K10

Время на прочтение2 мин
Количество просмотров226K
Когда вы покупаете GeForce GTX 690 — самую дорогую в линейке двухпроцессорных видеокарт от NVidia — вы ожидаете наилучшей производительности и поддержки всех функций. Что ж, это действительно так, однако эта видеокарта не поддерживает ту же технологию, что и ее профессиональный коллега Quadro K5000.

Если вы сможете переделать GeForce в Quadro, то сможете сэкономить порядка $1000. Этим и занялся пользователь с ником gnif с форума EEV, потому что в ОС Windows GTX 690 поддерживает технологию NVIDIA Surround, но не поддерживает технологию Mosaic, которая является эксклюзивной технологией серии Quadro, в ОС Linux. Стоит отметить и тот факт, что видеокарта Quadro K5000 является однопроцессорной с частотой ниже, чем у 690.
Читать дальше →
Всего голосов 94: ↑90 и ↓4+86
Комментарии153

Ученые опубликовали одну из первых записей человеческого голоса (аудио)

Время на прочтение1 мин
Количество просмотров9.2K
Ученые из Национальной лаборатории Лоуренса в Беркли (США) оцифровали и выложили в открытый доступ одну из первых записей человеческого голоса. Записям, которые ученые решились оцифровать, уже более 100 лет.

Читать дальше →
Всего голосов 53: ↑50 и ↓3+47
Комментарии37

Информация

В рейтинге
Не участвует
Откуда
Челябинск, Челябинская обл., Россия
Дата рождения
Зарегистрирован
Активность