Одним дождливым питерским днем мой проект в UE4 перестал загружаться, и из-за этого я захотел сделать свой собственный движок. И одна новелла подтолкнула меня сделать движок именно для новелл. Если вам хочется узнать побольше и вы не боитесь goto, gosub и других ужасов, добро пожаловать под кат.
Октай Иманов @CImanov
Программист
Как я сделал снегоуборщик 3.0 с управлением по Bluetooth с Android смартфона
3 min
27KЭто кратчайшая история времени превращения робота-газонокосилки в DIY снегоуборщик с управлением по Bluetooth с Android телефона.
+12
Прямой доступ к диску из python
6 min
28KРасскажу я вам сегодня о том, как пытался я добраться из питона до интерфейса жесткого диска, и что из этого получилось.
Появляется у меня периодически необходимость тестирования большого количества жестких дисков. Обычно для этого используется досовая Victoria загружающаяся по сети. Она тестирует диски по одному, что не очень удобно. К тому же последнее время пошли платы не имеющие режима IDE, что дополнительно усложняет задачу. По началу у меня возникла идея взять готовый софт под линукс с открытыми исходниками и добавить ему возможность параллельного тестирования нескольких дисков. После беглого поиска выяснилось удручающее состояние этой области в линуксе. Из софта, ведущего при тестировании статистику по времени доступа к секторам и типам ошибок нашел только whdd. Попытка разобраться с кодом whdd закончилась полным провалом. Для меня, ни разу не программиста, код показался очень запутанным. К тому же большую его часть занимает совсем не работа с железом.
Поняв, что простого решения не предвидится я решил попробовать написать подобную программу самостоятельно. Понимая, что подобный проект на C я не осилю я начал изучать возможность прямой работы с дисками из python, которым я частенько пользуюсь для решения простых задач и люблю за простоту и понятность. Информации по этому вопросу в сети кот наплакал, но все же я выяснил, что существует модуль fcntl который в том числе позволяет отправлять устройству ioctl запросы. Теперь у меня появилась возможность отправлять команды диску. Но в линуксе все диски считаются scsi дисками, а для тестирования нужно передавать диску непосредственно ata команды. Оказалось существует механизм ATA Command Pass-Through, позволяющий обернуть ata команду в scsi запрос. Основную информацию о том, как это использовать удалось почерпнуть из исходных текстов проекта sg3_utils. Осталось попробовать реализовать это все на питоне.
+30
Как создать убедительную механику смерти и не облажаться
8 min
34KTranslation
Играм, в которых нельзя умереть (или, если угодно, проиграть), недостает глубины. Если проиграть невозможно, зачем пытаться выиграть? Иначе говоря, если вы не боитесь поражения, стремление к победе теряет всякий смысл. Однако после смерти персонажа игроку необязательно кусать локти и переигрывать все по новой. Механику смерти можно интегрировать в сюжет или геймплей, но главное – сделать это правильно.
+28
Большой обзор красивых многоуровневых меню с codepen
4 min
195KХабр, привет!
На Сodepen появляется много хороших решений от разных специалистов, и я считаю, что лучшие из них нужно собирать в одном месте. Поэтому 2 года назад начал сохранять у себя на компьютере интересные скрипты по разным тематикам.
Раньше я их выкладывал в группе продукта облачной IDE mr. Gefest, это были сборки из 5-8 решений. Но теперь у меня стало скапливаться по 15-30 скриптов в разных тематиках (кнопки, меню, подсказки и так далее).
Такие большие наборы следует показывать большему числу специалистов. Поэтому выкладываю их на Хабр. Надеюсь они будут Вам полезны.
+16
Делаем включение ПК по хлопку за вечер
10 min
38KПредисловие
В детстве, смотря многие американские фильмы, был в восторге от того, как актеры выключали свет в помещении «хлопнув в ладоши», всегда хотелось такую же штуку у себя дома. В последние годы ПК стал неотъемлемой частью моей жизни: приходя домой и разувшись, первым делом идешь включать своего «железного коня» и ждать его загрузки. Конечно в последние годы с появлением SSD это ожидание свелось к минимуму, но тем не менее вместе с самим подходом к компьютеру все же какое-то время теряется. Да и собственно зачем вообще идти в комнату, бить с ноги по кнопке, если можно сделать какой-то дистанционный способ включения «моей прелести».
Собственно так со временем и слились две «мечты»: включать ПК по хлопку. На данный момент я учусь в университете и как раз пришло время делать курсовой по схемотехнике, причем преподаватель заявил о том, что можно сделать его в железе, а не на бумаге, что на мой взгляд интереснее. Таким образом подвернулся шанс «убить сразу двух зайцев» — реализовать старую идею и сдать курсовой проект. Первоначальной идеей было сделать некое устройство, которое можно будет разместить на корпусе, запитать его от блока питания, подключить через реле к кнопке и по хлопку замыкать цепь. Как итог решили немного отойти от этой идеи немного расширив ее: система теперь будет состоять из двух блоков, соединенных посредством Bluetooth. Один блок будет улавливать хлопок и посылать специальный сигнал на второй блок, второй же блок будет принимать этот сигнал и замыкать реле.
+16
Управление мультимедиа центрами с помощью HTTP GET запросов
4 min
11KВ этой статье хотелось бы рассказать о том, как можно управлять на данный момент наиболее популярными мультимедиа центрами — KODI (XBMC) и Dune HD, с помощью HTTP GET запросов.
Здесь будут описаны только самые наиболее востребованные запросы, которыми можно управлять удаленно (например: в пределах домашней WiFi сети или при соответствующих настройках роутера из сети INTERNET), не только с помощью заранее написанных скриптов, но и простым вводом их в адресную строку браузера. Все запросы описывать здесь я не буду, так как: во — первых, многие из них используются крайне редко, а во — вторых, для этого есть полная документация. Данные запросы можно использовать так же, для управления мультимедиа центрами, при построении систем «Умный Дом», чем я собственно говоря и воспользовался при разработке своей.
Вот собственно те самые запросы:
1. Запуск файла на воспроизведение.
Ссылки на файлы должны быть прямыми, то есть явно указывать на воспроизводимый файл или поток, ссылки с Youtube таковыми не являются, поэтому работать не будут. Как получить прямую ссылку на ролик с Youtube можно посмотреть здесь.
Здесь и далее по тексту:
LOGIN — логин установленный в настройках KODI (Веб-сервер -> Разрешить управление Kodi по HTTP).
PASSWORD — пароль установленный в настройках KODI (Веб-сервер -> Разрешить управление Kodi по HTTP).
URL — сетевой или интернет адрес воспроизводимого ресурса.
ip-address — IP адрес устройства в домашней или INTERNET сети.
Если настроить Dune HD так, что при нажатии кнопки POWER на пульте он уходит в режим Standby, то при запросе на воспроизведение файла он включится автоматически.
Здесь будут описаны только самые наиболее востребованные запросы, которыми можно управлять удаленно (например: в пределах домашней 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, то при запросе на воспроизведение файла он включится автоматически.
+7
Требования к игровому функционалу
7 min
20KTranslation
Развлекательная функция игр – вещь абстрактная. И чтобы создавать игровые миры, в которые пользователю захочется погружаться с головой снова и снова, придется очень многое продумать. Сара Сантиллан, Lead Designer в Boomzap Entertainment, рассказывает о требованиях к созданию игрового функционала. Что понадобится, а что – нет в этом творческом процессе?
+7
Открытая лекция: задача выполнимости булевых формул
1 min
8.5K(Скриншот из презентации: slideplayer.com/slide/3238789)
Приглашаем всех на открытую лекцию Computer Science центра, посвященную задаче выполнимости булевых формул — одной из самых известных и важных алгоритмических задач. Лекция пройдёт в рамках встречи со слушателями онлайн-курса «Алгоритмы: теория и практика. Методы». Время и место проведения: 25 декабря, 19:00, БЦ Таймс (г. Санкт-Петербург, ул. Кантемировская 2А, 4 этаж). Участие бесплатное, но требуется регистрация: goo.gl/IiNvV8
Задача выполнимости — каноническая трудная задача, по которой проводится огромное количество исследований: как практических, так и теоретических. В частности, этой задаче посвящена ежегодная международная конференция. Каждый год проходят соревнования программ для данной задачи (так называемых сат-солверов). Такие программы активно используются во многих прикладных областях. Буквально несколько месяцев назад Дональд Кнут дописал том 4B монографии «Искусство программирования», треть которого посвящена задаче выполнимости.
+7
Умножение по методу русских крестьян
3 min
54KTranslation
Иногда этот метод называют «крестьянское умножение», иногда «древнеегипетское», иногда «эфиопское», иногда «умножение через удвоение и деление пополам». Некоторым он хорошо известен, некоторым – непонятен, но при этом он достаточно полезен и может использоваться не только для умножения, но и для возведения в степень и расчётов матриц.
Запишем два перемножаемых числа рядом – они станут заголовками двух столбцов. Третий столбец будет содержать нарастающую сумму.
Если число в левом столбце нечётное, мы добавляем число из правого столбца в нарастающую сумму. Изначально она будет равна нулю.
Затем в левом столбце ниже мы записываем число из заголовка, делённое пополам (с отбрасыванием остатка). 13 / 2 = 6. А во втором столбце мы пишем число, равное удвоению заголовка столбца, 19*2 = 38.
Поскольку число в левом столбце чётное, мы не увеличиваем нарастающую сумму.
Алгоритм
13 x 19 -> 0
6 38 19
3 76 ->
1 152 -> 95
0 304 247
^^^
Запишем два перемножаемых числа рядом – они станут заголовками двух столбцов. Третий столбец будет содержать нарастающую сумму.
Если число в левом столбце нечётное, мы добавляем число из правого столбца в нарастающую сумму. Изначально она будет равна нулю.
Затем в левом столбце ниже мы записываем число из заголовка, делённое пополам (с отбрасыванием остатка). 13 / 2 = 6. А во втором столбце мы пишем число, равное удвоению заголовка столбца, 19*2 = 38.
Поскольку число в левом столбце чётное, мы не увеличиваем нарастающую сумму.
+25
DB hacking или экскурс в мир СУБД
2 min
14KTutorial
Этот обзор посвящен типовым ошибкам развертывания разнообразных СУБД, от самых известных и используемых на тысячах серверов, до специализированных и относительно редко встречающихся. Задачи создать всеобъемлющий курс по всем возможным векторам и уязвимостям не было, поэтому получились небольшие видео-ролики, раскрывающие основные нюансы сетевых атак на СУБД.
Так же, стоит сразу предупредить, что веб-приложения и веб-уязвимости намеренно были оставлены за бортом и не были рассмотрены.
+8
Программирование многопользовательских игр
4 min
24KДобрый день, Хабр!
Мы только что выпустили книгу по Юнити, и нам стало интересно насколько вообще актуальна тема программирования игр. Казалось бы книг на эту тему должно быть выпущено огромное множество, но это не так.
Только что вышла книга «Multiplayer Game Programming: Architecting Networked Games (Game Design)».
Насколько актуален ее перевод на русский язык? Подробности под катом. Ждем ваши комментарии.
Мы только что выпустили книгу по Юнити, и нам стало интересно насколько вообще актуальна тема программирования игр. Казалось бы книг на эту тему должно быть выпущено огромное множество, но это не так.
Только что вышла книга «Multiplayer Game Programming: Architecting Networked Games (Game Design)».
Насколько актуален ее перевод на русский язык? Подробности под катом. Ждем ваши комментарии.
+15
Парсинг формул в 50 строк на Python
4 min
43KВдохновение — задача с собеседования Яндекса и статья «Парсинг формул в 40 строк».
Моей целью было посмотреть, как будет выглядеть «pythonic» решение этой задачи. Хотелось, чтобы решение было простым, код читаемым и разделённым. В итоге ещё получился и пример применения цепочки генераторов (generators pipeline).
Моей целью было посмотреть, как будет выглядеть «pythonic» решение этой задачи. Хотелось, чтобы решение было простым, код читаемым и разделённым. В итоге ещё получился и пример применения цепочки генераторов (generators pipeline).
+26
Математические тайны «больших данных»
5 min
19KTranslation
Так называемое машинное обучение не перестает удивлять, однако для математиков причина успеха по-прежнему не совсем понятна.
Как-то пару лет назад за ужином, на который меня пригласили, выдающийся специалист в области дифференциальной геометрии Эудженио Калаби вызвался посвятить меня в тонкости весьма ироничной теории о разнице между приверженцами чистой и прикладной математики. Так, зайдя в своих исследованиях в тупик, сторонники чистой математики нередко сужают проблематику, пытаясь таким образом обойти препятствие. А их коллеги, специализирующиеся на прикладной математике, приходят к выводу, что сложившаяся ситуация указывает на необходимость продолжить изучение математики с целью создания более эффективных инструментов.
Мне всегда нравился такой подход; ведь благодаря ему становится понятно, что прикладные математики всегда сумеют задействовать новые концепции и структуры, которые то и дело появляются в рамках фундаментальной математики. Сегодня, когда на повестке дня стоит вопрос изучения «больших данных» – слишком объемных или сложных блоков информации, которые не удается понять, используя лишь традиционные методы обработки данных – тенденция тем более не утрачивает своей актуальности.
+17
Десктопные приложения на JavaScript. Часть 1
6 min
156KНи для кого не секрет, что в наше время 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)
Есть конечно небольшие минусы в подходе использования JavaScript везде, но если поразмыслить, то сколько времени и сил можно сэкономить, изучив всего лишь одни язык, особенно, если то же самое приложение должно работать на разных платформах. Разных платформах говорите? Хм… Точно – разных платформах – теперь JS может позволить себе десктопные приложения для Windows, Linux, Mac, как спросите вы? Ответ прост: встречайте – NW.js.
По первым буквам можно прочитать – Node.js + Webkit, если данные понятия вам пока не знакомы, то скоро вы поймете о чем идет речь.
Node.js – программная платформа, основанная на движке V8, который транслирует наш скрипт в машинный код. Данная платформа была создана в 2009 году преимущественно для работы с бэкэндом сайтов.
WebKit — свободный движок, разработанный компанией Apple. Впервые был анонсирован в составе Safari в 2003 году
Итак, коду, написанному на JS для данной технологии, будут доступны как Node.js модули, так и стандартный браузерный API (соответственно WebKit)
+17
Классический криптоанализ
9 min
159KНа протяжении многих веков люди придумывали хитроумные способы сокрытия информации — шифры, в то время как другие люди придумывали еще более хитроумные способы вскрытия информации — методы взлома.
В этом топике я хочу кратко пройтись по наиболее известным классическим методам шифрования и описать технику взлома каждого из них.
+24
Нейросеть в 11 строчек на Python
8 min
535KTranslation
О чём статья
Лично я лучше всего обучаюсь при помощи небольшого работающего кода, с которым могу поиграться. В этом пособии мы научимся алгоритму обратного распространения ошибок на примере небольшой нейронной сети, реализованной на 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)
Слишком сжато? Давайте разобьём его на более простые части.
+41
Взломать Wi-Fi за 10 часов
12 min
1.5MЕще не так давно казалось, что беспроводная сеть, защищенная с помощью технологии WPA2, вполне безопасна. Подобрать простой ключ для подключения действительно возможно. Но если установить по-настоящему длинный ключ, то сбрутить его не помогут ни радужные таблицы, ни даже ускорения за счет GPU. Но, как оказалось, подключиться к беспроводной сети можно и без этого — воспользовавшись недавно найденной уязвимостью в протоколе WPS.
+284
Вкладки (страницы) на одной странице на html/css с помощью :target
2 min
144KTutorial
Рассмотрим один из вариантов создания нескольких страниц или вкладок (в том числе вложенных) на html и css без скриптов, списков и таблиц, на одной html странице. Только дивы, только хардкор. Подходит для небольших портфолио и элементов интерфейса. Не будьте буратинами используя это везде подряд.
Суть:
Суть:
+36
HackedSim. Звонок с любого номера — вымысел или реальность?
11 min
299KНа прошлой неделе на Хабре появилась статья про HackerSIM с интригующим названием и многообещающем содержанием. Суть статьи сводилась к следующему: за существенную сумму, на порядок превышающую стоимость обычной sim-карты, некие ребята предоставляют Вам свою sim-карту, которая позволяет «безопасно звонить с любого номера из любой страны с любым голосом на выбранные номера» (в кавычках потому, что здесь цитируется агрегация тезисов из ранее упомянутой статьи). Посмотрев комментарии, выяснилось, что к данной теме проявляется живой интерес, но ни у кого нет точного понимания, как это работает и работает ли вообще.
Немного подумав с коллегами, мы решили рассказать, как данная услуга осуществима в реальной жизни.
Немного подумав с коллегами, мы решили рассказать, как данная услуга осуществима в реальной жизни.
+41
Information
- Rating
- Does not participate
- Location
- Баку, Азербайджан, Азербайджан
- Date of birth
- Registered
- Activity