Pull to refresh
0
0
Октай Иманов @CImanov

Программист

Send message

Как за 3 дня создать игровой движок для новелл

Reading time5 min
Views28K
Одним дождливым питерским днем мой проект в UE4 перестал загружаться, и из-за этого я захотел сделать свой собственный движок. И одна новелла подтолкнула меня сделать движок именно для новелл. Если вам хочется узнать побольше и вы не боитесь goto, gosub и других ужасов, добро пожаловать под кат.
КДПВ
День первый
Total votes 20: ↑15 and ↓5+10
Comments10

Как я сделал снегоуборщик 3.0 с управлением по Bluetooth с Android смартфона

Reading time3 min
Views27K
Это кратчайшая история времени превращения робота-газонокосилки в DIY снегоуборщик с управлением по Bluetooth с Android телефона.



Читать дальше →
Total votes 18: ↑15 and ↓3+12
Comments15

Прямой доступ к диску из python

Reading time6 min
Views28K
image

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

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

Поняв, что простого решения не предвидится я решил попробовать написать подобную программу самостоятельно. Понимая, что подобный проект на C я не осилю я начал изучать возможность прямой работы с дисками из python, которым я частенько пользуюсь для решения простых задач и люблю за простоту и понятность. Информации по этому вопросу в сети кот наплакал, но все же я выяснил, что существует модуль fcntl который в том числе позволяет отправлять устройству ioctl запросы. Теперь у меня появилась возможность отправлять команды диску. Но в линуксе все диски считаются scsi дисками, а для тестирования нужно передавать диску непосредственно ata команды. Оказалось существует механизм ATA Command Pass-Through, позволяющий обернуть ata команду в scsi запрос. Основную информацию о том, как это использовать удалось почерпнуть из исходных текстов проекта sg3_utils. Осталось попробовать реализовать это все на питоне.
Читать дальше →
Total votes 32: ↑31 and ↓1+30
Comments26

Как создать убедительную механику смерти и не облажаться

Reading time8 min
Views34K
Играм, в которых нельзя умереть (или, если угодно, проиграть), недостает глубины. Если проиграть невозможно, зачем пытаться выиграть? Иначе говоря, если вы не боитесь поражения, стремление к победе теряет всякий смысл. Однако после смерти персонажа игроку необязательно кусать локти и переигрывать все по новой. Механику смерти можно интегрировать в сюжет или геймплей, но главное – сделать это правильно.


Читать дальше →
Total votes 34: ↑31 and ↓3+28
Comments44

Большой обзор красивых многоуровневых меню с codepen

Reading time4 min
Views195K


Хабр, привет!

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

Раньше я их выкладывал в группе продукта облачной IDE mr. Gefest, это были сборки из 5-8 решений. Но теперь у меня стало скапливаться по 15-30 скриптов в разных тематиках (кнопки, меню, подсказки и так далее).

Такие большие наборы следует показывать большему числу специалистов. Поэтому выкладываю их на Хабр. Надеюсь они будут Вам полезны.
Читать дальше →
Total votes 22: ↑19 and ↓3+16
Comments33

Делаем включение ПК по хлопку за вечер

Reading time10 min
Views38K

Предисловие


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

Собственно так со временем и слились две «мечты»: включать ПК по хлопку. На данный момент я учусь в университете и как раз пришло время делать курсовой по схемотехнике, причем преподаватель заявил о том, что можно сделать его в железе, а не на бумаге, что на мой взгляд интереснее. Таким образом подвернулся шанс «убить сразу двух зайцев» — реализовать старую идею и сдать курсовой проект. Первоначальной идеей было сделать некое устройство, которое можно будет разместить на корпусе, запитать его от блока питания, подключить через реле к кнопке и по хлопку замыкать цепь. Как итог решили немного отойти от этой идеи немного расширив ее: система теперь будет состоять из двух блоков, соединенных посредством Bluetooth. Один блок будет улавливать хлопок и посылать специальный сигнал на второй блок, второй же блок будет принимать этот сигнал и замыкать реле.
Читать дальше →
Total votes 22: ↑19 and ↓3+16
Comments53

Управление мультимедиа центрами с помощью HTTP GET запросов

Reading time4 min
Views11K
В этой статье хотелось бы рассказать о том, как можно управлять на данный момент наиболее популярными мультимедиа центрами — KODI (XBMC) и Dune HD, с помощью HTTP GET запросов.

Здесь будут описаны только самые наиболее востребованные запросы, которыми можно управлять удаленно (например: в пределах домашней WiFi сети или при соответствующих настройках роутера из сети INTERNET), не только с помощью заранее написанных скриптов, но и простым вводом их в адресную строку браузера. Все запросы описывать здесь я не буду, так как: во — первых, многие из них используются крайне редко, а во — вторых, для этого есть полная документация. Данные запросы можно использовать так же, для управления мультимедиа центрами, при построении систем «Умный Дом», чем я собственно говоря и воспользовался при разработке своей.

Вот собственно те самые запросы:

1. Запуск файла на воспроизведение.

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

  • 1.1 KODI (XBMC) — http://LOGIN:PASSWORD@ip-address:8080/jsonrpc?request={«jsonrpc»:«2.0»,«id»:«1»,«method»:«Player.Open»,«params»:{«item»:{«file»:"URL"}}}
  • 1.2 Dune HD — http://ip-address/cgi-bin/do?cmd=launch_media_url&media_url=URL

Здесь и далее по тексту:

LOGIN — логин установленный в настройках KODI (Веб-сервер -> Разрешить управление Kodi по HTTP).
PASSWORD — пароль установленный в настройках KODI (Веб-сервер -> Разрешить управление Kodi по HTTP).
URL — сетевой или интернет адрес воспроизводимого ресурса.
ip-address — IP адрес устройства в домашней или INTERNET сети.

Если настроить Dune HD так, что при нажатии кнопки POWER на пульте он уходит в режим Standby, то при запросе на воспроизведение файла он включится автоматически.
Читать дальше →
Total votes 7: ↑7 and ↓0+7
Comments7

Требования к игровому функционалу

Reading time7 min
Views20K
Развлекательная функция игр – вещь абстрактная. И чтобы создавать игровые миры, в которые пользователю захочется погружаться с головой снова и снова, придется очень многое продумать. Сара Сантиллан, Lead Designer в Boomzap Entertainment, рассказывает о требованиях к созданию игрового функционала. Что понадобится, а что – нет в этом творческом процессе?


Читать дальше →
Total votes 13: ↑10 and ↓3+7
Comments1

Открытая лекция: задача выполнимости булевых формул

Reading time1 min
Views8.5K
image
(Скриншот из презентации: slideplayer.com/slide/3238789)


Приглашаем всех на открытую лекцию Computer Science центра, посвященную задаче выполнимости булевых формул — одной из самых известных и важных алгоритмических задач. Лекция пройдёт в рамках встречи со слушателями онлайн-курса «Алгоритмы: теория и практика. Методы». Время и место проведения: 25 декабря, 19:00, БЦ Таймс (г. Санкт-Петербург, ул. Кантемировская 2А, 4 этаж). Участие бесплатное, но требуется регистрация: goo.gl/IiNvV8

Задача выполнимости — каноническая трудная задача, по которой проводится огромное количество исследований: как практических, так и теоретических. В частности, этой задаче посвящена ежегодная международная конференция. Каждый год проходят соревнования программ для данной задачи (так называемых сат-солверов). Такие программы активно используются во многих прикладных областях. Буквально несколько месяцев назад Дональд Кнут дописал том 4B монографии «Искусство программирования», треть которого посвящена задаче выполнимости.

Читать дальше →
Total votes 11: ↑9 and ↓2+7
Comments3

Умножение по методу русских крестьян

Reading time3 min
Views54K
Иногда этот метод называют «крестьянское умножение», иногда «древнеегипетское», иногда «эфиопское», иногда «умножение через удвоение и деление пополам». Некоторым он хорошо известен, некоторым – непонятен, но при этом он достаточно полезен и может использоваться не только для умножения, но и для возведения в степень и расчётов матриц.

Алгоритм


  13  x  19 ->     0
   6     38       19
   3     76 ->
   1    152 ->    95
   0    304      247
                 ^^^

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

Если число в левом столбце нечётное, мы добавляем число из правого столбца в нарастающую сумму. Изначально она будет равна нулю.

Затем в левом столбце ниже мы записываем число из заголовка, делённое пополам (с отбрасыванием остатка). 13 / 2 = 6. А во втором столбце мы пишем число, равное удвоению заголовка столбца, 19*2 = 38.

Поскольку число в левом столбце чётное, мы не увеличиваем нарастающую сумму.
Читать дальше →
Total votes 37: ↑31 and ↓6+25
Comments24

DB hacking или экскурс в мир СУБД

Reading time2 min
Views14K


Этот обзор посвящен типовым ошибкам развертывания разнообразных СУБД, от самых известных и используемых на тысячах серверов, до специализированных и относительно редко встречающихся. Задачи создать всеобъемлющий курс по всем возможным векторам и уязвимостям не было, поэтому получились небольшие видео-ролики, раскрывающие основные нюансы сетевых атак на СУБД.

Так же, стоит сразу предупредить, что веб-приложения и веб-уязвимости намеренно были оставлены за бортом и не были рассмотрены.
Читать дальше →
Total votes 16: ↑12 and ↓4+8
Comments9

Программирование многопользовательских игр

Reading time4 min
Views24K
Добрый день, Хабр!

Мы только что выпустили книгу по Юнити, и нам стало интересно насколько вообще актуальна тема программирования игр. Казалось бы книг на эту тему должно быть выпущено огромное множество, но это не так.

Только что вышла книга «Multiplayer Game Programming: Architecting Networked Games (Game Design)».

image

Насколько актуален ее перевод на русский язык? Подробности под катом. Ждем ваши комментарии.
Читать дальше →
Total votes 17: ↑16 and ↓1+15
Comments15

Парсинг формул в 50 строк на Python

Reading time4 min
Views43K
Вдохновение — задача с собеседования Яндекса и статья «Парсинг формул в 40 строк».

Моей целью было посмотреть, как будет выглядеть «pythonic» решение этой задачи. Хотелось, чтобы решение было простым, код читаемым и разделённым. В итоге ещё получился и пример применения цепочки генераторов (generators pipeline).
Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments9

Математические тайны «больших данных»

Reading time5 min
Views19K
image

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

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

Мне всегда нравился такой подход; ведь благодаря ему становится понятно, что прикладные математики всегда сумеют задействовать новые концепции и структуры, которые то и дело появляются в рамках фундаментальной математики. Сегодня, когда на повестке дня стоит вопрос изучения «больших данных» – слишком объемных или сложных блоков информации, которые не удается понять, используя лишь традиционные методы обработки данных – тенденция тем более не утрачивает своей актуальности.
Читать дальше →
Total votes 25: ↑21 and ↓4+17
Comments2

Десктопные приложения на JavaScript. Часть 1

Reading time6 min
Views156K
Ни для кого не секрет, что в наше время JavaScript стал одним из самых популярных языков программирования. В далекие 90е годы, в момент зарождения языка, когда он был создан с единственной целью добавить интерактивность веб страницам и улучшить процесс взаимодействия с пользователем, кто бы мог подумать, что он достигнет столь небывалых высот. Ведь сейчас на нем можно делать практически все что угодно. Хотите написать сайт: и бэкэнд и фронтэнд на JavaScript? пожалуйста! Хотите написать мобильное приложение на JavaScript? нет проблем. Программируете микроконтроллер – и тут вам на помощь придет JavaScript.

Есть конечно небольшие минусы в подходе использования JavaScript везде, но если поразмыслить, то сколько времени и сил можно сэкономить, изучив всего лишь одни язык, особенно, если то же самое приложение должно работать на разных платформах. Разных платформах говорите? Хм… Точно – разных платформах – теперь JS может позволить себе десктопные приложения для Windows, Linux, Mac, как спросите вы? Ответ прост: встречайте – NW.js.

По первым буквам можно прочитать – Node.js + Webkit, если данные понятия вам пока не знакомы, то скоро вы поймете о чем идет речь.

Node.js – программная платформа, основанная на движке V8, который транслирует наш скрипт в машинный код. Данная платформа была создана в 2009 году преимущественно для работы с бэкэндом сайтов.

WebKit — свободный движок, разработанный компанией Apple. Впервые был анонсирован в составе Safari в 2003 году
Итак, коду, написанному на JS для данной технологии, будут доступны как Node.js модули, так и стандартный браузерный API (соответственно WebKit)
Читать дальше →
Total votes 31: ↑24 and ↓7+17
Comments24

Классический криптоанализ

Reading time9 min
Views159K
image

На протяжении многих веков люди придумывали хитроумные способы сокрытия информации — шифры, в то время как другие люди придумывали еще более хитроумные способы вскрытия информации — методы взлома.

В этом топике я хочу кратко пройтись по наиболее известным классическим методам шифрования и описать технику взлома каждого из них.
Читать дальше →
Total votes 26: ↑25 and ↓1+24
Comments5

Нейросеть в 11 строчек на Python

Reading time8 min
Views535K

О чём статья


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

Дайте код!


X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])
y = np.array([[0,1,1,0]]).T
syn0 = 2*np.random.random((3,4)) - 1
syn1 = 2*np.random.random((4,1)) - 1
for j in xrange(60000):
    l1 = 1/(1+np.exp(-(np.dot(X,syn0))))
    l2 = 1/(1+np.exp(-(np.dot(l1,syn1))))
    l2_delta = (y - l2)*(l2*(1-l2))
    l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1))
    syn1 += l1.T.dot(l2_delta)
    syn0 += X.T.dot(l1_delta)


Слишком сжато? Давайте разобьём его на более простые части.
Читать дальше →
Total votes 47: ↑44 and ↓3+41
Comments17

Взломать Wi-Fi за 10 часов

Reading time12 min
Views1.5M
Еще не так давно казалось, что беспроводная сеть, защищенная с помощью технологии WPA2, вполне безопасна. Подобрать простой ключ для подключения действительно возможно. Но если установить по-настоящему длинный ключ, то сбрутить его не помогут ни радужные таблицы, ни даже ускорения за счет GPU. Но, как оказалось, подключиться к беспроводной сети можно и без этого — воспользовавшись недавно найденной уязвимостью в протоколе WPS.


Читать дальше →
Total votes 304: ↑294 and ↓10+284
Comments164

Вкладки (страницы) на одной странице на html/css с помощью :target

Reading time2 min
Views144K
Рассмотрим один из вариантов создания нескольких страниц или вкладок (в том числе вложенных) на html и css без скриптов, списков и таблиц, на одной html странице. Только дивы, только хардкор. Подходит для небольших портфолио и элементов интерфейса. Не будьте буратинами используя это везде подряд.
Суть:

image
Читать дальше →
Total votes 56: ↑46 and ↓10+36
Comments35

HackedSim. Звонок с любого номера — вымысел или реальность?

Reading time11 min
Views299K
imageНа прошлой неделе на Хабре появилась статья про HackerSIM с интригующим названием и многообещающем содержанием. Суть статьи сводилась к следующему: за существенную сумму, на порядок превышающую стоимость обычной sim-карты, некие ребята предоставляют Вам свою sim-карту, которая позволяет «безопасно звонить с любого номера из любой страны с любым голосом на выбранные номера» (в кавычках потому, что здесь цитируется агрегация тезисов из ранее упомянутой статьи). Посмотрев комментарии, выяснилось, что к данной теме проявляется живой интерес, но ни у кого нет точного понимания, как это работает и работает ли вообще.

Немного подумав с коллегами, мы решили рассказать, как данная услуга осуществима в реальной жизни.
Читать дальше →
Total votes 55: ↑48 and ↓7+41
Comments37

Information

Rating
Does not participate
Location
Баку, Азербайджан, Азербайджан
Date of birth
Registered
Activity