Pull to refresh
56
0
Сергей Садовников @FlexFerrum

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

Send message

Частичное применение и каррирование в C++

Reading time12 min
Views16K
Приветствую.

Уж не знаю, как так вышло, но игрался я на досуге с лямбда-выражениями в С++11 (о которых, к слову, я уже писал статью, снискавшую пару лет назад на удивление достаточно неплохую популярность), и под наркотическим воздействием впечатлением от языка Haskell начал разбираться с такими понятиями, как частичное применение и каррирование в контексте языка С++. И для начала, пожалуй, неплохо бы нам определиться с этими терминами.

Читать дальше →
Total votes 57: ↑54 and ↓3+51
Comments45

Аналог scope(exit) на С++

Reading time2 min
Views6.2K
Прочитал, недавно, на хабре, статью про scope(exit) в языке D и проникся красотой идеи.
Ведь так часто бывает, что нужно выполнить какой-либо код по выходу из функции, а создавать каждый раз страж — утомительно, да и не всегда возможно.
Но, использую новый стандарт, в С++ можно сделать не хуже, кому интересно — прошу под кат.
Читать дальше →
Total votes 23: ↑20 and ↓3+17
Comments36

Парсим русский язык

Reading time8 min
Views70K

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

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

"Мама мыла раму":

(предложение
    (именная гр. (сущ мама))
    (глаг. гр. (глаг мыла)
        (именная гр. (сущ раму)))
    (. .)))


Это называется синтаксическим деревом предложения. В графическом виде его можно представить следующим образом (в упрощенном виде):

Читать дальше →
Total votes 128: ↑124 and ↓4+120
Comments97

20 сервисов и советов для веб разработчиков

Reading time6 min
Views5.6K
Ниже представлены полезные ссылки и советы исходя из моего личного опыта. Старался указать только то что может быть новым для разработчиков, поэтому ресурсов типа FireBug и других общеизвестных в списке нет.

NounProject — лучшая и наибольшая коллекция SVG картинок

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

Codebeautifier — кроссбраузерная подготовка CSS файлов c уменьшением веса самого CSS файла.

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

Iterm2 — лучшая консоль для mac OS и замена страндартному терминалу.

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

Spritebaker — кодирует изображения и шрифты в base64 для последующей возможной вставки в CSS, что увеличивает скорость загрузки

Web developer — плагин для Firefox дающее множество возможностей.

Например, смотреть/вносить/редактировать куки, просматривать топографию для симметрии, инфо по картинкам и прочее.

ColorZilla — плагин для firefox позволяющий кликнуть мышкой на любой точке экрана и получить код цвета.

Не нужно делать скриншот, потом закидывать в фотошоп и кликать на цвете. Просто устанавливаем плагин и все. Очень удобно.

DataUrl — генерирует код из изображения.

Просто перетаскиваем картинку и получаем строковый код. Очень удобно, можно например передавать картинку как строку между скриптами, или хранить в базе данных в виде строки, то есть вообще файл не сохранять.

Pjax — плагин которой позволяет изменять содержимое страницы без ее перезагрузки.
Читать дальше →
Total votes 21: ↑9 and ↓12-3
Comments19

Ropes — быстрые строки

Reading time5 min
Views24K
Здравствуй, Хабр.
Большинство из нас так или иначе работает со строками. Этого не избежать — если ты пишешь код, ты обречен каждый день складывать строки, разбивать их на составные части и обращаться к отдельным символам по индексу. Мы давно привыкли что строки — это массивы символов фиксированной длины, а это влечет за собой соответствующие ограничения в работе с ними.
Так, мы не можем быстро объединить две строки — для этого нам потребуется сначала выделить необходимое количество памяти, а потом скопировать туда данные из конкатенируемых строк. Очевидно, что такая операция имеет сложность порядка О(n), где n — суммарная длина строк.
Именно поэтому код

string s = "";
for (int i = 0; i < 100000; i++) s += "a";

работает так медленно.

Хочешь выполнять конкатенацию гигантских строк быстро? Не нравится, что строка требует для хранения непрерывную область памяти? Надоело использовать буферы для построения строк?

Хватит это терпеть!
Total votes 87: ↑83 and ↓4+79
Comments36

Вышел бесплатный профессиональный видеоредактор Lightworks

Reading time3 min
Views101K
“Бэтмен навсегда”, “Остров проклятых”, “Отступники”, “Король говорит”, “Авиатор”, “Карты, деньги, два ствола”, “Криминальное чтиво” — это далеко не полный список фильмов, смонтированных с помощью Lightworks за его более чем двадцатилетнюю историю. С 1989 года Lightworks сменил несколько владельцев, пока в 2009 его не приобрела компания EditShare — производитель систем хранения видео для ТВ и киностудий. Новые хозяева решили порвать с традицией продавать подобный софт за тысячи долларов, и теперь профессиональная версия Lightworks стоит 60$, а базовая — бесплатна. Причём эта “базовая” версия мало чем отличается от платной и не уступит многим профессиональным версиям других редакторов. Но и это ещё не всё — EditShare собирается в ближайшем будущем выпустить версии для Linux и Mac (именно в таком порядке) и открыть исходники.


Читать дальше →
Total votes 165: ↑160 and ↓5+155
Comments112

Разработка ПО авионики

Reading time14 min
Views78K
В основе разработки ПО авионики лежит основополагающий стандарт RTCA\DO-178B. Несмотря на первый взгляд на его отстранённость от непосредственной рутины программиста, он описывает весь процесс разработки и выдвигает требования к подобному ПО. Тем не менее, в данной статье речь пойдёт и о том, как всё происходит на самом деле, на основе личного опыта разработки систем контроля и управления полётом, систем посадки и пр. для самолётов и вертолётов.

image
Читать дальше →
Total votes 225: ↑220 and ↓5+215
Comments96

Обзор LLVM

Reading time13 min
Views85K
LLVM (Low Level Virtual Machine) — это универсальная система анализа, трансформации и оптимизации программ или, как её называют разработчики, «compiler infrastucture».

LLVM — не просто очередной академический проект. Его история началась в 2000 году в Университете Иллинойса, а теперь LLVM используют такие гиганты индустрии как Apple и Adobe. В частности, на LLVM основана подсистема OpenGL в MacOS X 10.5, а iPhone SDK использует GCC с бэкэндом на LLVM. Apple является одним из основных спонсоров проекта, а вдохновитель LLVM — Крис Латтнер — теперь работает в Apple.

В основе LLVM лежит промежуточное представление кода (intermediate representation, IR), над которым можно производить трансформации во время компиляции, компоновки (linking) и выполнения. Из этого представления генерируется оптимизированный машинный код для целого ряда платформ, как статически, так и динамически (JIT-компиляция). LLVM поддерживает генерацию кода для x86, x86-64, ARM, PowerPC, SPARC, MIPS, IA-64, Alpha.

LLVM написана на C++ и портирована на большинство *nix-систем и Windows. Система имеет модульную структуру и может расширяться дополнительными алгоритмами трансформации (compiler passes) и кодогенераторами для новых аппаратных платформ. Пользовательский фронтенд, как правило, линкуется с LLVM и использует C++ API для генерации кода и его преобразований. Однако LLVM включает в себя и standalone утилиты.

Для тех, кто не без оснований считает C++ не лучшим языком для написания компиляторов, с недавних пор в LLVM включена обертка API для OCaml.

Чтобы понять, что можно сделать с помощью LLVM, и на каком уровне придётся работать, давайте разберёмся,
что из себя представляет LLVM IR.
Total votes 52: ↑51 and ↓1+50
Comments25

Параллельная компиляция Qt в Windows

Reading time3 min
Views14K
Параллельная компиляция Qt-проектов под Windows с использованием QtCreator — зверь загадочный и очень привередливый. В этой небольшой статье я расскажу, как же все-таки его приручить. Параллельная компиляция может быть выполнена достаточно просто в теории, на практике дела обстоят не совсем гладко, чему в подтверждение бесконечное число тем на форумах, где предлагаются всевозможные решения. Ни одно из них, к сожалению, нам не помогло.

Читать дальше →
Total votes 27: ↑26 and ↓1+25
Comments20

Поля класса доступные по имени с setter и getter в C++

Reading time9 min
Views25K
Как известно, в C++ нет средства описания полей класса с контролируемым доступом, как например property в C#. На Хабрахабре уже пробегала статья частично на эту тему, но мне решительно не нравится синтаксис. К тому же очень хотелось иметь возможность обращаться к полям из ран-тайма по имени.
Читать дальше →
Total votes 55: ↑42 and ↓13+29
Comments44

Рейтрейсер на JavaScript

Reading time8 min
Views21K
TitleImage

Знаете ли вы что такое рейтрейсер? Это программа которая рисует трёхмерную сцену на экране так, как её бы увидели вы. Конечно, не совсем так, но некоторые рейтрейсеры умеют рисовать очень правдоподобные картинки, например как в "Аватаре".

Идея рейтрейсера очень простая и в этой статье я раcскажу как устроен этот алгоритм и даже напишу его на JavaScript. Картинки и пример прилагаются.

Читать дальше →
Total votes 249: ↑247 and ↓2+245
Comments102

Сборка Mingw в Windows своими руками

Reading time8 min
Views70K
В сети можно найти много описаний сборки mingw и GNU утилит под ним. Я тоже решил написать свой вариант, так как во-первых он на русском. Во-вторых используются последние стабильные исходники (по состоянию на 27.01.2011). В третьих добавлена оптимизация циклов (graphite loop optimizations). В четвертых я описываю причины выбора тех или иных опций конфигурации исходников. В пятых, чтобы не забыть.
Читать дальше →
Total votes 34: ↑30 and ↓4+26
Comments29

Не только «по необходимости»

Reading time8 min
Views11K
24 сентября Дума рассмотрела и приняла в третьем чтении поправки в четвертую часть Гражданского кодекса РФ. 29 сентября поправки были одобрены Советом Федерации. На очереди — подпись Президента, после чего они станут законом. Из-за двусмысленной формулировки «по необходимости», которую законодатели планируют добавить в статью ГК РФ, разрешающую копировать произведения для личных целей, законопроект уже стал предметом широкого обсуждения. Не написал о нем разве что ленивый блогер…

Однако, кроме «необходимости» в этом документе есть много других интересных изменений, от которых нам всем может поплохеть не меньше…
Читать дальше →
Total votes 67: ↑60.5 and ↓6.5+54
Comments26

Не забываем о языковых и культурных особенностях

Reading time6 min
Views24K
Рано или поздно все сталкиваются с проблемами связанными с языковым и культурным разнообразием при написании программ. Я был сильно удивлен узнав, что часть моих знакомых, пишущих на C++, решают эти проблемы своими велосипедами. Для тех, кто еще не знает что такое std::locale я хотел бы кратко на примере показать как c ним работать и что бывает, если о нем забыть…
Читать дальше
Total votes 68: ↑66 and ↓2+64
Comments27

Небо видело всё

Reading time1 min
Views2.2K
К вашему вниманию трейлер постапокалиптического короткометражного фильма, снимаемого независимой съемочной группой, без чьей либо поддержки и финансирования.

А ведь могут делать классные вещи и без сумсашедших денег, при чем у нас, в России.
Ждем к осени. Очень интересно, что же из этого получится.
Total votes 146: ↑118 and ↓28+90
Comments127

Дополнительные 24 часа в сутках. Игры со временем -2

Reading time8 min
Views8.7K
В первой части материала разговор шел об относительности времени, много внимания уделено ведению списка дел. Пожалуйста, прочитайте, тот материал, чтобы повествование не было отрывочным, а вы могли окинуть взглядом все приемы эффективного уплотнения времени.

Начало материала

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

Линейный конвейер. Путь из точки А в точку Б.
С раннего детства наш мир упорядочен, все примеры, которые нам подкидывает жизнь, родители, школа, сугубо линейны. Исключения редки, воспринимаются как нечто выбивающиеся из правил. Помните, школьные задачки про путь из пункта А в пункт Б, в которых еще встречались промежуточные точки. Это ключевой алгоритм всех действий, которым обучают в обычной, среднестатистической школе. Мы с детства знаем, что для достижения результата, надо сделать то-то и то-то. В этом нет ничего плохого, ведь линейность действий проста, понятна, предсказуема. Вот только есть небольшая проблема, не всегда линейные действия и поведение наиболее эффективно в реальной жизни.

Читать дальше →
Total votes 131: ↑82 and ↓49+33
Comments58

Код, который невозможно поддерживать (часть 2)

Reading time7 min
Views3.4K
Продолжение этого топика — вторая и третья главы эссе «Unmaintainable Code». Несколько перекликается с первой, но описанные методы уже не так очевидны (а некоторые отличаются поистине дьявольской изобретательностью и не меньшей злокозненностью). Ах да, с заявленного в прологе языка Java автор незаметно переключился на C/C++.

Камуфляж



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

Читать дальше →
Total votes 82: ↑62 and ↓20+42
Comments57

Профилирование приложений в Visual Studio 2010

Reading time6 min
Views46K
Сегодня мы будем замерять производительность нашего приложения с помощью Visual Studio Profiling Tool.

Visual Studio Profiling Tool позволяет разработчикам измерять, оценивать производительность приложения и кода. Эти инструменты полностью встроены в IDE, чтобы предоставить разработчику беспрерывный контроль.
В этом руководстве мы по шагам профилируем приложение PeopleTrax используя Sampling и Instrumentation методы профилирования, чтобы выявить проблемы в производительности приложения.

image

Много картинок.
Читать дальше →
Total votes 63: ↑48 and ↓15+33
Comments24

Дополнительные 24 часа в сутках. Игры со временем

Reading time8 min
Views16K
Мечта многих моих друзей и знакомых, чтобы у них было больше времени. На что, вопрос второй. Кому-то время нужно на семью, кому-то на любимую работу, кому-то на отдых. Но время, это тот ресурс, которого не хватает у нас всех. Мне удалось спрессовать время и получить в сутках, вначале лишние десять минут, потом час, потом еще несколько часов. За десять лет, время спрессовалось так, что в моих сутках около 48 часов. За неделю я успеваю сделать столько, сколько многие люди за две, три, а то и месяц. Без ущерба личной жизни, качеству работы, не с помощью бессонных ночей и постоянных авралов. В небольшой заметке постараюсь изложить основные положения той системы, которой придерживаюсь, чем она помогает мне, какие слабые и сильные стороны в ней есть. Чтобы изложить все приемы и уловки, понадобится не один материал, рассматривайте эту заметку, как вводную. Если вам понравится, и вы скажете, что желаете прочитать продолжение, то оно появится.

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

Время это не только физическая величина, но и психологическая

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

Читать дальше →
Total votes 269: ↑207 and ↓62+145
Comments100

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Date of birth
Registered
Activity