Search
Write a publication
Pull to refresh
42
0
Send message

UA Web Challenge V

Reading time2 min
Views7.7K
image

В октября-ноябре проходит юбилейный, пятый всеукраинский чемпионат для веб-специалистов.

До конца регистрации осталось всего 3 дня и поэтому (и не только) я решил написать на хабр про наше мероприятие. Хотелось бы, чтобы как можно больше людей узнало про чемпионат (если еще не знает) и смогли поучаствовать, а в события не все регулярно заглядывают.
Читать дальше →

Управляем веб-камерой с помощью джойстика

Reading time10 min
Views31K

Введение


Лирика

Добрый день. Мотивированный многочисленными постами на Хабре о самодельных роботах решил сделать и что-нибудь свое более менее стоящее и интересное.

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

Под рукой у меня оказалась платка Arduino Diecimila, несколько сервоприводов, веб-камера, джойстик и ультразвуковой дальномер. Соответственно сразу возникло желание сделать «компьютерное зрение» на основе веб-камеры, с возможностью как автономной работы, так и ручного управления (джойстиком).
Читать дальше →

Метод генерации тестовых заданий на основе деревьев И/ИЛИ и его программная реализация

Reading time6 min
Views11K
Первый мой топик на Хабре будет посвящен моим научным исследованиям, которые связаны с методами построения алгоритмов генерации тестовых заданий для организации контроля знаний обучаемых.

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

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

Подробности

Старая, добрая «The Matrix» или визуализатор для матрицы версии один

Reading time5 min
Views35K
На Хабре неоднократно появлялись статьи с описанием приложения из известного фильма «The Matrix». Как известно, все они принадлежат так называемому классу View Matrix, позволяют визуализировать состояние мира в котором проживают главные герои фильма. Но в отличие от предыдущих версий данных программ для ЭВМ, я хочу рассказать о визуализаторе матрицы первой версии (о которой в фильме упоминал герой с именем Морфеус в первой части трилогии).



Дорогие друзья, эта статья посвящена всем кто помнит что такое Dos, видео режим 80x25 и прочие «замечательные мелочи» олд скульного разработчика приложений. А так же кому интересно с этим познакомиться.
Follow the white rabbit.

Под капотом у Dictionary и ConcurrentDictionary

Reading time5 min
Views183K
Некоторое время назад, я решил, что хочу знать больше подробностей о работе многопоточности в .NET и что я уделял этому незаслуженно мало внимания в прошлом. Информации на эту тему великое множество (отправной точкой я для себя выбрал этот раздел книги «C# in a nutshell»), но, как оказалось, только малая часть ресурсов пытаются объяснить что-то в деталях.

Каждый мастер должен знать свои инструменты, а что может использоваться чаще коллекций? Поэтому я решил сделать небольшой обзор многопоточных коллекций и начать с ConcurrentDictionary (беглый обзор уже встречался здесь, но его там совсем мало). Вообще, я несколько удивился, что такой статьи для .NET еще нет (зато хватает по Java).

Итак, поехали.
Читать дальше →

Как воспользоваться возможностями R в C++

Reading time5 min
Views11K
R — язык программирования для статистической обработки данных и работы с графикой, а также свободная программная среда вычислений с открытым исходным кодом в рамках проекта GNU © Wikipedia.

В R собрано огромное число статистических алгоритмов на все случаи жизни и их можно использовать не только из родной програмной среды: его поддерживают такие известные математические пакеты, как SPSS, Statistica, SAS, Wolfram Mathematica и некоторые другие. Как же можно интегрировать R в свои приложения?
На хабрахабре уже была статья про использование R в С++, однако она осветила всего один из способов, который возможно использовать только если ваш код распространяется под GPL-совместимой лицензией. Но и в противном случае есть выход — использование пакета Rserve.
Читать дальше →

Локализация приложений Node.js. Часть 2: инструментарий и процесс

Reading time7 min
Views6.9K
От переводчика: Это деcятая статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona.





В прошлой статье о локализации приложений Node.js мы узнали, как использовать модуль i18n-abide в нашем коде. Наша работа, как программистов, фактически закончилась на том, что мы обернули строки в шаблонах и коде приложения в вызовы gettext(). Но работа по локализации и переводу приложения только начинается.

Инструментарий


Инструментарий локализации команды Mozilla Persona совместим с теми инструментами, которые используются в остальном сообществе Mozilla, и при этом сохраняет преимущества в дружественности и гибкости, присущие Node.

Проекту Mozilla уже почти 15 лет, и наша команда локализаторов и переводчиков одна из самых больших (и клёвых) в мире Open Source. Поэтому у нас широко используются давно привычные, можно даже сказать старинные и причудливые инструменты.
Читать дальше →

Новый вид DDoS-атаки: найден баг протокола ТСР в Windows

Reading time2 min
Views66K
Уважаемые хабро-читатели, прежде чем перейти к сути хочу сразу сказать, что автор не является каким бы то ни было хакером или зловредным программером, исследующим со свечкой каждый темный угол драйвера или чего-либо другого программного, поэтому если об этой уязвимости уже известно, то не судите строго, а лучше посоветуйте патч.

Итак, в процессе отладки стека протоколов для сетей MANET, где тестировалось модифицированное ТСР-соединение радиосети с компьютером через Ethernet-шлюз, было случайно выявлено, что путем некорректного закрытия соединения клиентом на стороне сервера возможно удерживание ресурсов сокета бесконечно долго!

Началось всё с этого:


На скрин-шоте представлено ТСР-соединение между клиентом 192.168.0.108 (Ethernet шлюз) и сервером 192.168.0.187 (OS Windows Vista).

Как видно, при неправильном указании номера последовательности в пакете FIN ACK клиента, Windows сервер не закрыл сокет и не освободил ресурсы. Попытка соединиться еще раз с того же порта клиента (source port 40400) на порт сервера (destination port 31000) оказалась неуспешной. Сервер упорно требовал ACK в ответ на новый SYN от клиента.

Сначала, я решил что это просто какой-то баг на стороне стека MANET (помимо, конечно же, неправильного seqno в FIN ACK), но проанализировав поток по номерам sequence / acknowledgement и повторив этот же эксперимент для других портов оказалось, что таки да, Windows…

Пример другого порта сервера (30000):



Потом, перегрузив комп и повторили все еще раз. На этот раз соединение закрывал клиент, а сервер слушал порт 32000.



Результат тот же.
Читать дальше →

Знакомство с Go, часть 2: пишем граббер изображений с балансировщиком и извращениями

Reading time13 min
Views23K

Задание


Недавно я рассказывал, как выполнял секретную миссию и с помощью Go загружал дамп цитат с «пустоты». Пришло время снова вступить в бой, на этот раз дело касается «Ататы», и не только потому что в рифму с пустотой.

Для тех кто пропустил — в свое время «Тематические Медиа» (да-да, хозяева хабра) запустили проект «Респектива» ( этакую гламурную имиджборду\тумблр с одним разделом), хитроумными баннерами заманили туда девушек и программистов и стали ждать, видимо надеясь что срастется. Не срослось, и через некоторое время «Респективу» мутировали в «Атату», которая уже имела функционал для создания пользовательских бордпотоков, хабов для объединения тематических потоков и так далее. Какое-то время проект развивался, но Девушки ушли, остались программисты, да и их стало куда меньше. Сейчас это место почти покинуто, там чумные ветра, брошенные поезда, темнота и только редкие вопли нескольких выживших старожилов изредка прорезают хтмл в ночи.

И ладно, атата с ней, с этой ататой. Но отличного контента в виде картинок там осталось немало, один тред с обоями чего стоит! Поэтому неудивительно, что следующее задание из штаба выглядело следующим образом:
«Срочно сохранить для потомков все изображения из потока #949 #291. ps. Извращенно.»

Ну, что же, есть задание — нужно работать. Вообще-то по извращенным структурам у нас уже есть некий кофейный чемпион, но и на Go тоже можно что-нибудь сообразить! После 9 часов работы в Paint у меня родился следующий план атаки:



Степень изврата поражает, начальство будет довольно! Рассмотрим что тут и как:

«Генератор» будет загружать с ататы хтмл код страниц, выдергивать урлы картинок и передавать их «Балансировщику», который раскидывает эти урлы некоторому количеству «Рабочих» (каждый из которых имеет свою небольшую очередь заданий) следя за тем, чтобы все рабочие были равномерно нагружены. Ну а «рабочие» загружают картинки и радуют глаз умиленного балансировщика. Выглядит избыточно, но зато про войну! Поехали:
Читать дальше →

Создаем первое приложение на NancyFX. Часть вторая. Bootstrapper

Reading time3 min
Views9.3K
В прошлой статье «Создаем первое приложение на NancyFX» мы сделали первые шаги в изучении фреймворка NancyFX. В данной статье мы познакомимся со встроенными в Nancy по умолчанию TinyIoC и Nancy Bootstrapper.
Читать дальше →

Эмулятор x86 на JavaScript

Reading time1 min
Views38K
Virtual x86 — еще один эмулятор платформы x86 на языке программирования JavaScript. Как и JSLinux от Фабриса Беллара, для запуска Linux здесь достаточно только браузера. После загрузки образа нормально работают все встроенные команды Linux, работают компилированные программы, файловая система и проч., хотя сетевых интерфейсов пока нет.


Читать дальше →

Организация памяти в текстовом редакторе

Reading time6 min
Views36K
Каждый, кто пытался запрограммировать хотя бы простейший редактор текста на низком уровне, сталкивался с задачей организации памяти для хранения редактируемого текста. Структура данных для хранения текста должна удовлетворять следующим требованиям:
  1. иметь малые накладные расходы по памяти. Большая часть доступной памяти должна использоваться для хранения текста, а не служебной информации;
  2. допускать эффективную вставку и удаление в произвольном месте текста.

Удовлетворить эти требования одновременно непросто. Если рассмотреть широкоизвестные структуры данных, такие как массивы, списки, деревья, стеки, очереди, кольцевые буфера — то такой структуры, которая бы позволила эффективно выполнить оба требования, не встречается. В случае массива имеем незначительные накладные расходы по памяти, но операция вставки имеет сложность O(n), где n — размер редактируемого текста. В случае списка сложность вставки и удаления составляет O(1), однако накладные расходы по памяти в несколько раз превышают размер собственно текста. Деревья, кучи, кольцевые буфера, ассоциативные массивы и прочие структуры и вовсе неприменимы для хранения текста в редакторе.

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

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

Несмотря на то, что эта структура данных была открыта давно и использовалась в текстовых редакторах на старых ЭВМ в 8-битную эпоху, это тайное знание предков было в значительной мере утеряно и в современных редакторах встречается редко. Попробуйте открыть файл, состоящий из одной строки мегабайт на 10, в Notepad или Far. Вставка и удаление символов будет длиться секундами.
Читать дальше →

2 «простых» вопроса по джаве

Reading time3 min
Views64K

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

Когда-то давно на хабре была пара статей как не надо писать на java с интересными задачками по java.
Часть 1, Часть 2
Они очень интересные, но, к сожалению, автор не стал продолжать.

Представляю вашему вниманию еще 2 задачки (на большее не хватило сил. Оказывается, писать статьи не так-то просто.)

В конце статьи, разумеется, будут ответы с разъяснениями, а также дополнительные задания для самых сильных.
Читать дальше →

Пишем платформер на Python. Часть 2. Подчасть 1, подготовка к созданию редактора уровней

Reading time9 min
Views65K

Привет, друзья!

Продолжаем разбираться с нашим МариоБоем. Начало тут, продолжение тут. В этой подчасти второй части мы сделаем приготовление для создания редактора уровней, а именно: добавим турбо режим бега герою, смертельно опасные платформы, движущиеся монстры, телепортеры, принцессу и парсер уровней, дабы во второй подчасти не отвлекаться на всё это.
Внимание! Картинки!

Создание кроссбраузерной визуализации аудио

Reading time2 min
Views14K
Примерно год назад появилась задача сделать красивый html5 аудио-плеер. Дизайнеры нарисовали простейшую визуализацию:

image

Самый простой вариант — рисовать на фоне «шум», никак не связанный с играющей музыкой. Но мы не ищем лёгких путей.

На хабре нашлась статья визуализация аудио в HTML5, в которой подробно рассмотрен вопрос визуализации с помощью javascript. Существует 2 стандарта получения информации об аудио:


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

Упрощенное демо
Читать дальше →

Введение в анализ сложности алгоритмов (часть 3)

Reading time6 min
Views128K
От переводчика: данный текст даётся с незначительными сокращениями по причине местами излишней «разжёванности» материала. Автор абсолютно справедливо предупреждает, что отдельные темы могут показаться читателю чересчур простыми или общеизвестными. Тем не менее, лично мне этот текст помог упорядочить имеющиеся знания по анализу сложности алгоритмов. Надеюсь, что он окажется полезен и кому-то ещё.
Из-за большого объёма оригинальной статьи я разбила её на части, которых в общей сложности будет четыре.
Я (как всегда) буду крайне признательна за любые замечания в личку по улучшению качества перевода.


Опубликовано ранее:
Часть 1
Часть 2

Логарифмы


image
Если вы знаете, что такое логарифмы, то можете спокойно пропустить этот раздел. Глава предназначается тем, кто незнаком с данным понятием или пользуется им настолько редко, что уже забыл что там к чему. Логарифмы важны, поскольку они очень часто встречаются при анализе сложности. Логарифм — это операция, которая при применении её к числу делает его гораздо меньше (подобно взятию квадратного корня). Итак, первая вещь, которую вы должны запомнить: логарифм возвращает число, меньшее, чем оригинал. На рисунке справа зелёный график — линейная функция f(n) = n, красный — f(n) = sqrt(n), а наименее быстро возрастающий — f(n) = log(n). Далее: подобно тому, как взятие квадратного корня является операцией, обратной возведению в квадрат, логарифм — обратная операция возведению чего-либо в степень.
Читать дальше →

Введение в анализ сложности алгоритмов (часть 4)

Reading time5 min
Views101K
От переводчика: данный текст даётся с незначительными сокращениями по причине местами излишней «разжёванности» материала. Автор абсолютно справедливо предупреждает, что отдельные темы могут показаться читателю чересчур простыми или общеизвестными. Тем не менее, лично мне этот текст помог упорядочить имеющиеся знания по анализу сложности алгоритмов. Надеюсь, что он окажется полезен и кому-то ещё.
Из-за большого объёма оригинальной статьи я разбила её на части, которых в общей сложности будет четыре.
Я (как всегда) буду крайне признательна за любые замечания в личку по улучшению качества перевода.


Опубликовано ранее:
Часть 1
Часть 2
Часть 3

Оптимальная сортировка


Поздравляю! Теперь вы знаете о том, как анализировать сложность алгоритмов, что такое асимптотическая оценка и нотация «большое-О». Вы также в курсе, как интуитивно выяснить является ли сложностью алгоритма O( 1 ), O( log( n ) ), O( n ), O( n2 ) и так далее. Вы знакомы с символами o, O, ω, Ω, Θ и понятием «наихудшего случая». Если вы добрались до этого места, то моя статья уже выполнила свою задачу.

Этот финальный раздел — опциональный. Он несколько сложнее, так что можете не стесняясь пропустить его, если хотите.От вас потребуется сфокусироваться и потратить некоторое время на решение упражнений. Однако, так же здесь будет продемонстрирован очень полезный и мощный способ анализа сложности алгоритмов, что, безусловно, стоит внимания.
Читать дальше →

С камерой в облака. Часть 1

Reading time6 min
Views242K


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

Пост состоит из 2 частей. В первой — ответы на основные вопросы. Их легко найти в интернете по-отдельности, но сложно вместе: дальность полета (чем ограничивается и какая максимальная), качество картинки, грузоподъемность, стоимость и сроки (от выделения бюджета до первого полета).

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

Ну что же, перейдем сразу к делу.
Читать дальше →

Место сценариста в команде разработки игр

Reading time8 min
Views92K


Здравствуйте, меня зовут Мария Кочакова, я сценарист проекта Skyforge в Allods Team. Эта статья подытоживает два года моей работы игровым сценаристом. Все это суровые реалии жизни сценаристов компьютерных игр, то, с чем мы сталкиваемся ежедневно. Категоричность формы продиктована важностью содержания.

Сценарий компьютерной игры

Нарративная (повествовательная) часть игры состоит из сеттинга, сюжета и текста.

Сеттинг — это мир игры, его законы и реалии. Примеры сеттинга: постапокалипсис, фэнтези-средневековье, киберпанк…
Читать дальше →

Поддержка PHP в Google App Engine!

Reading time1 min
Views15K
3 дня назад, 8 октября, Google анонсировал поддержку PHP в App Engine для всех пользователей. Ранее она была доступна только ограниченному кругу лиц для тестирования.
В API есть некоторые ограничения, но, в общем-то, популярные приложения работают!

Итак, точно поддерживаются:
  • phpMyAdmin
  • Drupal
  • phpBB
  • Wordpress
Фреймворки:
  • Laravel
  • Silex
  • Codeigniter

Также, доступны API для взаимодействия с Google Drive и Google+, Google Storage, App Engine Task Queues и App Engine Modules

Information

Rating
Does not participate
Registered
Activity