Как стать автором
Обновить
4
0
Павел Левченко @IkaR49

Инженер-программист

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

Полиномиальные хеши и их применение

Время на прочтение9 мин
Количество просмотров88K
Здравствуй, хабр. Сегодня я напишу, как можно использовать полиномиальные хеши (далее просто хеши) при решении различных алгоритмических задач.

Введение


Начнем с определения. Пусть у нас есть строка s0..n-1. Полиномиальным хешем этой строки называется число h = hash(s0..n-1) = s0 + ps1 + p2s2 +… + pn-1sn-1, где p — некоторое натуральное число (позже будет сказано, какое именно), а si — код i-ого символа строки s (почти во всех современных языках он записывается s[i]).

Хеши обладают тем свойством, что у одинаковых строк хеши обязательно равны. Поэтому основная операция, которую позволяют выполнять хеши — быстрое сравнение двух подстрок на равенство.
Читать дальше →
Всего голосов 74: ↑69 и ↓5+64
Комментарии41

Функциональное программирование для всех

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

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

Мнение переводчика может иногда не совпадать с мнением автора, но переводить статью было крайне занимательно.

UPD: альтернативный вариант перевода вы можете найти на rsdn (спасибо flamingo за ссылку).
Читать дальше →
Всего голосов 188: ↑181 и ↓7+174
Комментарии151

Все о Лазерах

Время на прочтение7 мин
Количество просмотров293K
Вы все любите лазеры. Я то знаю, я от них тащусь больше вашего. А если кто не любит – то он просто не видел танец сверкающих пылинок или как ослепи- тельный крошечный огонек прогрызает фанеру

А началось все со статьи из Юного техника за 91-й год о создании лазера на красителях – тогда повторить конструкцию для простого школьника было просто нереально… Сейчас к счастью с лазерами ситуация проще – их можно доставать из сломанной техники, их можно покупать готовые, их можно собирать из деталей… О наиболее приближенных к реальности лазерах и пойдет сегодня речь, а также о способах их применения. Но в первую очередь о безопасности и опасности.
Читать дальше →
Всего голосов 266: ↑254 и ↓12+242
Комментарии236

Процесс изготовления печатной платы на дому

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

Введение


Кому не приходилось изготавливать печатную плату? Дело это не очень сложное, а результат придаёт проекту завершённость. В этом посте я бы хотел рассказать о процессе создания печатной платы на дому. Я опишу фоторезистивный метод создания платы. Он довольно прост в применении и позволяет печатать весьма сложные платы. Более того, я обошёлся струйным принтером.

Пост содержит фотографии, видео и схемы.
Читать дальше →
Всего голосов 135: ↑122 и ↓13+109
Комментарии244

Храните мелкие картинки в CSS

Время на прочтение10 мин
Количество просмотров147K
Храните мелкие картинки, которые нельзя засунуть в спрайты, в data:image base64 в CSS — это экономит кучу запросов к вебсерверу.
Читать дальше →
Всего голосов 144: ↑105 и ↓39+66
Комментарии131

Переменные в CSS

Время на прочтение2 мин
Количество просмотров49K
Если вы разработчик, то вы точно хорошо знакомы с переменными, и возможно, они одни из ваших лучших друзей. По определению, переменная — это временное хранилище, которое содержит некое значение величины или информации.
Но каким образом это относится к тому CSS, который мы все знаем? Год назад на Хабре был пост о планируемых новшествах в CSS, которые были оглашены членом рабочей группы CSS и команды Google Chrome. Среди этих новшеств было введение поддержки переменных.
И вот, буквально на днях, поступили новости о выходе первого релиза рабочего черновика CSS Переменных (CSS Variables).


Читать дальше →
Всего голосов 56: ↑50 и ↓6+44
Комментарии60

Упражнения по взлому Linux-систем

Время на прочтение2 мин
Количество просмотров16K
Для тех, кто интересуется вопросами безопасности и уязвимостями Linux, создан обучающий проект exploit-exercises.com с подборкой виртуальных Linux-машин, описаниями уязвимостей, документацией и практическими заданиями.

1. Виртуальная машина Nebula
торрент-файл
прямая ссылка

Самые общие уязвимости, связанные с эскалацией привилегий в Linux: это SUID-файлы, разрешения, состояние гонки (race conditions), метапеременные оболочки, уязвимости $PATH, уязвимости скриптовых языков, ошибки компиляции бинарных файлов.
Читать дальше →
Всего голосов 107: ↑102 и ↓5+97
Комментарии19

Введение в CSS3 Grid Layout. Работаем с сетками

Время на прочтение10 мин
Количество просмотров113K
Update: Часть сведений в данной статье устарели. Рекомендую свежие материалы на css-live.ru.

Введение


intuition game grid

Модуль CSS3 Grid Layout — это один из самых интересных, на мой взгляд, модулей в семействе CSS3. Официальная история модуля в виде черновика спецификации насчитывает сегодня чуть менее года. О предварительном анонсе еще с названием CSS Grid Alignment на TPAC 2010 Владимир Юнев писал еще в декабре 2010. Надо также отметить, что с чуть другим названием и несколько отличным синтаксисом, но с той же сутью, он был заявлен в качестве WD еще в 2007г. Сегодня работы по доводке модуля идут полным ходом, предварительная реализация уже есть в Internet Explorer 10 и есть надежда, что поддержка новых возможностей также появится в будущих версиях других популярных браузеров.

Зачем нужен Grid Layout?


Задача, которую решает модель CSS3 Grid Layout, очень проста и понятна любому веб-верстальщику (да и не только ему): предоставить удобный механизм расположения контента по виртуальной сетке.

В отличие от старых табличных подходов, основанных на использовании table, здесь не замусоривается семантика документа и представление четко отделено от содержания. В отличие от различных вариаций блочной верстки со становящимися при сколь-нибудь сложной структуре безумными и многоэтажными float'ами в сочетании с вручную просчитанными отступами, здесь описание стилей становится тривиально простым и прозрачным. В отличии от абсолютного позиционирования с привязкой к координатам, здесь сохраняется гибкость. В отличие от популярных сегодня css/js-библиотек для разметки по сетке путем указания соответствующих классов (взять хоть те же bootstrap или yui css grids), здесь не замусоривается привязка классов.

Сплошное удовольствие! Осталось только дождаться широкой поддержки :) Впрочем, если вы планируете делать приложения в стиле Metro для Windows 8 на html/js, ключевые возможности, описываемые в модуле CSS3 Grid Layout, уже работают — и можно двигаться вперед, используя удобные и практичные механизмы.
Читать дальше →
Всего голосов 98: ↑92 и ↓6+86
Комментарии74

Переводим числа между двоичной и десятичной системами «на лету», объяснение «на пальцах»

Время на прочтение2 мин
Количество просмотров73K
Здравствуйте, Хабровцы.
Пост можно было бы назвать: «Для любителей посчитать на пальцах», но это мы узнаем дальше.

Вступление: А что-же тянуть. Все что будет дальше, пойдет на тему подсчета в двоичной системе на пальцах. Кто еще не знает, постараюсь обьяснить, что это, как и зачем это осваивать.
Начну, пожалуй, с преимуществ:
1. Удобно переводить любое число с десятичной в двоичную системы и наоборот, не используя калькулятор.
2. Развивается моторика пальцев.
3. Развивается визуальное восприятие двоичных чисел.
Минусы:
1. Немного тренировки.
2. Нельзя в публичных местах показывать числа 26,27,352,378 и 891.
Читать дальше →
Всего голосов 68: ↑42 и ↓26+16
Комментарии16

Итак, тебе нужен шрифт…

Время на прочтение1 мин
Количество просмотров20K
Случайно наткнулся на схему для выбора шрифтов. Думаю, кому-нибудь будет полезна.



Картинка кликабельна.

PS: Оригинал на английском здесь. Переводил на русский — не я.
Всего голосов 167: ↑135 и ↓32+103
Комментарии39

Реактивное программирование

Время на прочтение7 мин
Количество просмотров34K
Как известно, функциональный подход к программированию имеет свою специфику: в нём мы преобразовываем данные, а не меняем их. Но это накладывает свои ограничения, например при создании программ активно взаимодействующих с пользователем. В императивном языке намного проще реализовать такое поведение, ведь мы можем реагировать на какие либо события «в реальном времени», в то время как в чистых функциональных языках нам придётся откладывать общение с системой до самого конца. Однако относительно недавно стала развиваться новая парадигма программирования, решающая эту проблему. И имя ей — Functional Reactive Programming (FRP). В этой статье я попытаюсь показать основы FRP на примере написания змейки на Haskell с использованием библиотеки reactive-banana.
Читать дальше →
Всего голосов 27: ↑26 и ↓1+25
Комментарии18

Про вычислительную сложность алгоритмов HTML и CSS

Время на прочтение3 мин
Количество просмотров5.9K
HTML документ загруженный в browser есть дерево DOM элементов и набор CSS правил. Каждое CSS правило это пара — селектор (selector) и список свойств (list of properties).

Мы мало задумываемся над тем, а собственно чего стоит нарисовать HTML документ c вычислительной точки зрения? Знания про то что думатель — думает, а неонка у нея унутре ярко светит сквозь opacity:0.5 элементы бывает явно не достаточно.

Собственно про это и есть данные статьи — про вычислительную сложность (computational complexity) отображения HTML и CSS. Хочу отметить что я использую свой собственный опыт имплементации HTML/CSS rendering engines (HTMLayout и Sciter), но вычислительные проблемы в данной области универсальны — определяются самой природой HTML и CSS спецификаций.
Читать дальше →
Всего голосов 109: ↑85 и ↓24+61
Комментарии60

Хуки — это просто

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


Хуки — это технология перехвата вызовов функций в чужих процессах. Хуки, как и любая достаточно мощная технология, могут быть использованы как в благих целях (снифферы, аудио\видеограбберы, расширения функционала закрытого ПО, логирование, багфиксинг) так и со злым умыслом (трояны, кряки, кейлоггеры). О хуках уже не раз писали и на Хабре и не на Хабре. Но вот в чём беда — почему-то каждая статья о хуках буквально со второго абзаца начинает рассказывать о «таблице виртуальных функций», «архитектуре памяти» и предлагает к изучению огромные блоки ассемблерного кода. Известно, что каждая формула в тексте снижает количество читателей вдвое, а уж такие вещи — так и вовсе вчетверо. Поэтому нужна статья, которая расскажет о хуках просто. Под катом нет ассемблера, нет сложных терминов и буквально два десятка строк очень простого кода на С++. Если вы давно хотели изучить хуки, но не знали с чего начать — начните с этой статьи.
Читать дальше →
Всего голосов 94: ↑84 и ↓10+74
Комментарии63

С чего начинается устройство

Время на прочтение5 мин
Количество просмотров26K
Когда смотришь различные статьи радиолюбителей о изготовлении устройств, то там обычно устройство выполняет различные функции, делает это красиво и изящно. Но в 90% случаев само устройство представляет собой сколхоженное на коленке непонятное нечто с кучей проводов. Всё это связанно как правило с тем, что люди даже не задумываются как будет выглядеть их будущее устройство.




В качестве ответа к заголовку поста скажу, что любое устройство начинается с корпуса. И можно легко и просто сделать стильный качественный корпус, имея голову, немного денег и желание.
Читать дальше →
Всего голосов 88: ↑87 и ↓1+86
Комментарии111

На пути к Skein: просто и понятно про Blowfish

Время на прочтение9 мин
Количество просмотров50K
«От желудка иглобрюхих рыб отходят мешковидные выросты. При появлении опасности они наполняются водой или воздухом, из-за чего рыба становится похожой на раздувшийся шар
с торчащими шипиками. Шарообразное состояние делает рыб практически неуязвимыми. Если всё же достаточно крупный хищник попытается проглотить такой шар, то он застревает
в глотке у хищника, который впоследствии умирает»


                                Википедия, свободная энциклопедия.

К концу 1993 года в мире криптографии возникла очень неловкая ситуация. Алгоритм симметричного шифрования DES, со своим слабеньким 56-битным ключом, был близок к фиаско, а существующие
на тот момент альтернативные варианты, такие как Khufu, REDOC II, IDEA были защищены патентами
и не доступны для свободного использования. Алгоритмы RC2 и RC4, разработанные в то время компанией RSA Security, также требовали проведение процедуры лицензирования. И в целом, индустрия криптографии в рамках государственных организаций и крупных корпораций была
обращена в сторону использования секретных алгоритмов, таких как Skipjack.

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

И он появился.
Читать дальше →
Всего голосов 100: ↑98 и ↓2+96
Комментарии28

КартонБот v1.0 — утилизируем картон с пользой для мозга

Время на прочтение6 мин
Количество просмотров30K
Количество попыток собрать робота у меня – не счесть. Но, то материалов не хватало, то навыков их обработки, то каких-то узлов, то знаний, как все эти штуки связать вместе. Если знакома такая ситуация – я постараюсь рассказать свой опыт сборки робота из подручных материалов и каких-то узлов купленных на eBay.
image
Робот обошелся мне в 35$ и два дня отпуска, но восторг, испытанный от его первых движений, стоил намного больше. Если заинтересованы – прошу под кат (много картинок).
Читать дальше →
Всего голосов 148: ↑147 и ↓1+146
Комментарии60

Кроссбраузерный <progress>-бар

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

Доброе время суток, Хабро-сообщество!

Совсем недавно по работе мне попалась интересная задачка, которую я всё же реализовал. Нужно было соорудить прогресс-бар, который был бы полностью универсальный, поддающийся любой стилизации и плюс ко всему кроссбраузерный (начиная c IE7+)!

Здесь привожу конечный результат. Полный вариант статьи можно найти здесь

Читать дальше →
Всего голосов 37: ↑21 и ↓16+5
Комментарии35

Доска для записей — дёшево и быстро

Время на прочтение1 мин
Количество просмотров23K
Хочу поделиться способом «изготовления» доски для записей. Свою на работе активно использую уже несколько месяцев.

Всё, что нужно —
Читать дальше →
Всего голосов 149: ↑127 и ↓22+105
Комментарии62

Пишем драйвер для самодельного USB устройства

Время на прочтение13 мин
Количество просмотров177K
Целью этой статьи является пошаговая демонстрация процесса разработки всего набора программного обеспечения необходимого для организации связи самодельного устройства с компьютером посредством USB.

На данный момент, большинство радиолюбителей реализуют такой тип подключения используя чипы переходники USB в RS232 таким образом организуя связь со своим устройством посредством драйвера виртуального COM порта поставляемого с чипом переходником. Минусы такого подхода думаю понятны. Это как минимум лишний чип на плате и ограничения накладываемые этим чипом и его драйвером.
Мне же хочется осветить весь процесс организации такого взаимодействия так как оно и должно быть сделано, и как делается во всех серьезных устройствах.
В конце концов, сейчас 21-й век, модуль USB есть почти во всех микроконтроллерах. Именно о том, как наиболее быстро воспользоваться этим модулем и будет эта статья.
Читать дальше →
Всего голосов 152: ↑149 и ↓3+146
Комментарии29

Творим оригинальный подарок при помощи химии физики и электроники

Время на прочтение4 мин
Количество просмотров75K
Добрый день, уважаемые хабровчане. Так получилось, что я уже довольно долго занимаюсь разработкой электронных устройств на базе микроконтроллеров, микропроцессоров и ПЛИС. Одним из разработанных мной девайсов я хочу с вами поделиться.
Читать дальше →
Всего голосов 170: ↑167 и ↓3+164
Комментарии84

Информация

В рейтинге
5 386-й
Откуда
Тверь, Тверская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Software Developer, Backend Developer
Middle
От 300 000 ₽
Rust
C++
Linux
Cmake