Как стать автором
Обновить
78
0
Лахман Константин @klakhman

Computer Vision

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

Машина времени в git

Время на прочтение5 мин
Количество просмотров192K
В последнее время мои коллеги начинают знакомство с git'ом. И один из интересующих их вопросов — как откатиться до определённой ревизии. В интернете можно найти набор команд, но хочется, чтобы было понимание каждой из них. Баловство с комадами git'а без понимания может привести к потере истории разработки.

В этой статье я хочу рассказать о командах git checkout и git reset с ключами --soft и --hard.
Читать дальше →
Всего голосов 127: ↑122 и ↓5+117
Комментарии39

Вся правда о целочисленных типах в C

Время на прочтение3 мин
Количество просмотров138K
Для начала несколько вопросов:

  1. Тип char по умолчанию знаковый или нет? А int?
  2. Законно ли неявное приведение (signed char *) к (char *)? А то же для int?
  3. Сколько бит в unsigned char?
  4. Какое максимальное число гарантированно можно поместить в int? А минимальное?
  5. Тип long определённо больше, чем char, не так ли?

Разумеется, экспериментально искать ответы на эти вопросы с помощью вашего любимого компилятора в вашей любимой системе на вашем любимом компьютере1) — не лучшая идея. Мы говорим о стандарте языка (С99 и новее).

Если вы уверенно сможете правильно ответить на эти вопросы, тогда эта статья не для вас. В противном случае десять минут, потраченные на её чтение, будут весьма полезны.

Предположу, что вы ответили
  1. Знаковые оба.
  2. Законны оба.
  3. 8.
  4. 2147483647. -2147483648.
  5. Конечно, Кэп.


А правильные ответы такие
  1. char — не регламентируется, int — знаковый.
  2. Для int — законно, а для char — нет.
  3. Не менее 8.
  4. 32767. -32767
  5. Вообще говоря, нет.



Читать дальше →
Всего голосов 74: ↑69 и ↓5+64
Комментарии54

Алгоритмы и структуры данных — шпаргалка

Время на прочтение1 мин
Количество просмотров199K
Пару недель назад, необходимо было освежить информацию в голове информацию по структурам данных и алгоритмам для собеседования. Первым делом полез на www.coursera.org, где хотел пробежаться по некоторым лекциям курса Алгоритмы, там же были две сводные таблички, которые в процессе изучения курса взял на заметку — отлично помогали запомнить сложность операций. Но, к моему удивлению, материалы пройденного курса стали недоступны. Быстрое гугление, в надежде, что кто-нибудь выложил лекции на торрентах, к сожалению, не дало результатов. В итоге, я нашел полную коллекцию слайдов по данному курсу. Спешу поделиться. Самое главное, что взял из этих слайдов, — это вышеупомянутые сводные таблички. Думаю многим пригодится.
Читать дальше →
Всего голосов 76: ↑61 и ↓15+46
Комментарии43

Разбор задачи с IOI2012

Время на прочтение8 мин
Количество просмотров24K
imageВсем привет! В сентябре прошла международная олимпиада по программированию, IOI 2012. И мы, сборная России, на неё весьма успешно съездили, как вы могли видеть.

Я — Макс Ахмедов. Мне предложили поделиться с общественностью, что представляют собой подобные соревнования и какие задачи нам приходится решать. Я расскажу о последней задаче второго тура «Jousting Tournament». Английский вариант условия можно найти здесь. К слову, это наиболее простая из трёх задач в тот день :-)

Легенда


В задаче идёт речь о церемонии обручения герцога Лодовико Сфорца, наместника Милана, и герцогини Беатриче д’Эсте, произошедшей в 1491. Организовывать празднества и управлять культурной программой герцог пригласил своего хорошего друга Леонардо да Винчи, который ему предложил, в частности, устроить шикарный рыцарский турнир.

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

Такая вот захватывающая история.

Интересно, какая задача скрывается за этой легендой?
Всего голосов 77: ↑74 и ↓3+71
Комментарии11

Легкий способ записывать лекции по техническим предметам с LibreOffice Math

Время на прочтение3 мин
Количество просмотров60K
Проблема:
Я регулярно езжу на работу в метро, и вижу молодых людей, вероятно, студентов, с макбуками, планшетами, айфонами и айпадами. Ну, то есть, понятно, что они живут в ногу со временем — твиттер там, фейсбук наверняка, инстаграмм. Может, даже наверное смотрят лекции на Coursera. Удивляет то, что при всем при этом, студенты читают конспекты рукописных лекций в тетрадке — с сокращениями, таблицами, подчеркнутыми снизу определениями терминов и т.п. И вот эти рукописные тетрадки вызвают у меня когнитивный диссонанс — ну почему нельзя в 2012 году писать лекции на ноутбуке?

Ведь решение давно известно — OpenOffice/LibreOffice.
Читать дальше →
Всего голосов 75: ↑66 и ↓9+57
Комментарии137

Подробно о генераторах случайных и псевдослучайных чисел

Время на прочтение11 мин
Количество просмотров315K
На Хабре и в сети часто начали появляться статьи, посвященные уязвимостям генераторов случайных чисел. Данная тема крайне обширна и является одной из основных в криптографии. Под катом находится описание случайных чисел от A до Z. Статья является результатом свободного перевода цикла статей из одного западного блога и личных дополнений автора. Основная цель — получить feedback и поделиться знаниями.
image
Читать дальше →
Всего голосов 75: ↑71 и ↓4+67
Комментарии22

Как правильно скопировать массив и при чем тут SFINAE

Время на прочтение6 мин
Количество просмотров28K
Копировать элементы из одного контейнера в другой? Нет ничего проще, универсальный алгоритм помещается в 5 строк:
template<class InputIterator, class OutputIterator>
OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result) {
    while(first != last) *result++ = *first++;
    return result;
}
Возможно вы узнали реализацию std::copy с cplusplus.com. Почему же реализация std::copy из GNU STL занимает 139 строк? Давайте разберемся.
Читать дальше →
Всего голосов 54: ↑48.5 и ↓5.5+43
Комментарии26

АВЛ-деревья

Время на прочтение9 мин
Количество просмотров403K
Если в одном из моих прошлых постов речь шла о довольно современном подходе к построению сбалансированных деревьев поиска, то этот пост посвящен реализации АВЛ-деревьев — наверное, самого первого вида сбалансированных двоичных деревьев поиска, придуманных еще в 1962 году нашими (тогда советскими) учеными Адельсон-Вельским и Ландисом. В сети можно найти много реализаций АВЛ-деревьев (например, тут), но все, что лично я видел, не внушает особенного оптимизма, особенно, если пытаешься разобраться во всем с нуля. Везде утверждается, что АВЛ-деревья проще красно-черных деревьев, но глядя на прилагаемый к этому код, начинаешь сомневаться в данном утверждении. Собственно, желание объяснить на пальцах, как устроены АВЛ-деревья, и послужило мотивацией к написанию данного поста. Изложение иллюстрируется кодом на С++.

Читать дальше →
Всего голосов 69: ↑62 и ↓7+55
Комментарии50

Советы себе в прошлом

Время на прочтение4 мин
Количество просмотров23K
У меня очень мало опыта (суммарно программистом я проработал 16 месяцев), тем не менее, я хотел бы дать несколько советов себе-в-прошлом, ну, или иными словами всем тем, кто сейчас учится в университете и планирует стать разработчиком ПО. Ни в коей мере не претендую на мудрость или опытность. Немного подумав, я понял, что все эти советы как никогда актуальны для меня и сегодня тоже. Первую заметку я опубликовал в своем блоге в прошлом году, а сейчас публикую здесь список, расширенный советами читателей блога.

Все советы автономны и их порядок не имеет значения.
Читать дальше →
Всего голосов 219: ↑193 и ↓26+167
Комментарии311

Путешествия во времени и программирование

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

Сейчас о путешествиях во времени пишут не только фантасты. После размышлений античных философов, формул общей теории относительности, моделей червоточин продолжают появляться новые теории, и даже проекты. Многие из них, правда, требуют для своей работы черные дыры, бесконечно длинные цилиндры, материю с отрицательной массой и прочие артефакты. Приближает ли все это нас к созданию машины времени? Об этом трудно говорить предметно, не понимая сути вопроса – что такое время. За несколько веков это понимание увеличилось, на самом деле, незначительно. Быть может с приходом программирования ситуация изменится? Ведь именно там нас ожидают многие ответы.
Читать дальше →
Всего голосов 122: ↑89 и ↓33+56
Комментарии149

Руководство новичка по эксплуатации компоновщика

Время на прочтение32 мин
Количество просмотров203K
David Drysdale, Beginner's guide to linkers (http://www.lurklurk.org/linkers/linkers.html).

Цель данной статьи — помочь C и C++ программистам понять сущность того, чем занимается компоновщик. За последние несколько лет я объяснил это большому количеству коллег и наконец решил, что настало время перенести этот материал на бумагу, чтоб он стал более доступным (и чтоб мне не пришлось объяснять его снова). [Обновление в марте 2009: добавлена дополнительная информация об особенностях компоновки в Windows, а также более подробно расписано правило одного определения (one-definition rule).

Типичным примером того, почему ко мне обращались за помощью, служит следующая ошибка компоновки:
g++ -o test1 test1a.o test1b.o
test1a.o(.text+0x18): In function `main':
: undefined reference to `findmax(int, int)'
collect2: ld returned 1 exit status

Если Ваша реакция — 'наверняка забыл extern «C»', то Вы скорее всего знаете всё, что приведено в этой статье.
Читать дальше →
Всего голосов 194: ↑193 и ↓1+192
Комментарии38

Интервью с Чарльзом Уэзереллом, автором книги «Этюды для программистов»

Время на прочтение2 мин
Количество просмотров29K
Не секрет, что не одно поколение программистов зачитало до дыр книгу «Этюды для программистов» Чарльза Уэзерелла, оригинал которой на английском вышел аж в 1978.



Книга содержит 27 “этюдов”. Каждый этюд – это законченная содержательная задача для обучающихся программированию. Удивительно, книге более 30 лет, но любой из этюдов может быть до сих пор использован по назначению. Сам, будучи фанатом книги, до сих пор храню родной бумажный вариант русского издания, а относительно недавно таки приобрел оригинал на английском.

Увы, о самом авторе было очень мало информации, и более того — не было продолжения или новых книг, чтобы крайне странно после столь хорошей первой книги.

Волею судеб, недавно у меня появилась возможность связаться с Чарльзом и взять у него интервью.
Читать дальше →
Всего голосов 76: ↑67 и ↓9+58
Комментарии15

Особенности поиска и устройства на работу программистом. И что плохого в современных хедхантерах

Время на прочтение5 мин
Количество просмотров31K
Ни для кого не секрет, что программисты сейчас востребованы, и найти работу программисту с опытом не составляет труда. Спрос нынче больше предложения.
В этом посте я хочу описать свой опыт и наблюдения, которые я сделал после прохождения нескольких собеседований. Буду рад, если его прочитают не только соискатели, но и работодатели.

Небольшой дискламмер. Я программист и пишу с точки зрения программиста. Я сейчас не ищу работу. Я не представляю и не рекламирую ни одну из компаний, упомянутых в этом посте. Я получил оффер примерно от 6 из 9 компаний, где проходил собеседование. Я не вижу ничего плохого в том, чтобы открыто писать названия некоторых компаний, потому что они сами не делают тайны из своей деятельности и открыто публикуют свои вакансии. От моих рук ни один хедхантер не пострадал.
Читать дальше →
Всего голосов 249: ↑218 и ↓31+187
Комментарии152

N-е число Фибоначчи за O(log N)

Время на прочтение4 мин
Количество просмотров76K
Читая статью об устройстве на работу в ABBYY, встретил в ней упоминание задачи:
быстро – за O( log N ) арифметических операций над числами – найти N-е число Фибоначчи
Я задумался над ней и понял, что сходу в голову приходят только решения, работающие за время O(N). Однако позже решение было найдено.
Читать дальше →
Всего голосов 93: ↑77 и ↓16+61
Комментарии149

PyBrain работаем с нейронными сетями на Python

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

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

PyBrain — одна из лучших Python библиотек для изучения и реализации большого количества разнообразных алгоритмов связанных с нейронными сетями. Являет собой удачный пример совмещения компактного синтаксиса Python с хорошей реализацией большого набора различных алгоритмов из области машинного интеллекта.

Предназначен для:

  • Исследователей — предоставляет единообразную среду для реализации различных алгоритмов, избавляя от потребности в использовании десятков различных библиотек. Позволяет сосредоточится на самом алгоритме а не особенностях его реализации.
  • Студентов — с использованием PyBrain удобно реализовать домашнее задание, курсовой проект или вычисления в дипломной работе. Гибкость архитектуры позволяет удобно реализовывать разнообразные сложные методы, структуры и топологии.
  • Лекторов — обучение методам Machine Learning было одной из основных целей при создании библиотеки. Авторы будут рады, если результаты их труда помогут в подготовке грамотных студентов и специалистов.
  • Разработчиков — проект Open Source, поэтому новым разработчикам всегда рады.

Читать дальше →
Всего голосов 95: ↑92 и ↓3+89
Комментарии22

Еще раз о том, как уехать учиться за границу

Время на прочтение4 мин
Количество просмотров95K
Этой истории уже почти год, однако после недавнего общения с пригласившим меня на хабр andorro я все же решил выложить этот текст на Хабр. Тема как мне кажется достаточно актуальна — как бесплатно продолжить обучение зарубежом. Сейчас я учусь в аспирантуре Университета Мельбурна (Австралия) на факультете информационных систем. Надеюсь, мой опыт будет интересен и полезен.



Идея сделать карьеру в науке возникла у меня в январе 2011 года. На тот момент я уже был аспирантом ВШЭ, куда поступил в ноябре 2010, однако вариант ухода в науку с возможностью заниматься ей 2-3 часа после работы не устраивал совсем. Перед глазами у меня были примеры моих одногруппников и однокурсников, которые не особенно выделяясь во время учебы, уехали получать PhD в Швейцарию, Великобританию и США, получая при этом стипендии/зарплаты, сравнимые с доходами программистов 1-3 годами опыта. С этого момента я решил проследовать их путем.

Читать дальше →
Всего голосов 129: ↑121 и ↓8+113
Комментарии87

EvoJ — удобный фреймворк для генетических алгоритмов

Время на прочтение7 мин
Количество просмотров5.5K
Здравствуйте, коллеги!

Здесь часто появляются статьи на тему генетических алгоритмов, разрешите и мне внести свои пять копеек.

Вот уже пару лет я виде хобби разрабатываю Java-фреймворк EvoJ посвященный ГА. Когда я только начинал работу с ГА самое большое неудобство представляла необходимость векторизации переменных составляющих решение, поэтому в своем фреймворке я постарался сделать векторизацию переменных прозрачной для программиста, возложив всю грязную работу на плечи фреймворка. Кроме того, так как ГА очень хорошо поддается распараллеливанию, я постарался сделать переход к многопоточности не менее легким.
Читать дальше →
Всего голосов 34: ↑33 и ↓1+32
Комментарии10

Распределенные эволюционные вычисления

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


Одна из моих любимых тем в программировании – эволюционные вычисления и генетические алгоритмы в частности. Пару лет назад я поднимал эту (в целом уже заезженную) тему на Хабре, но сейчас глядя на то видео немного стыдно – слишком уж туманно и сумбурно было объяснение.

Сегодня я постараюсь объяснить генетические алгоритмы проще и нагляднее, а заодно рассказать вкратце о прототипе очень простого JavaScript-фреймворка для распределенных генетических вычислений degas.js. В двух словах – degas.js запускает генетический алгоритм в виде «треда» в браузере клиента используя web workers и обменивается информацией о полученных в ходе эволюции индивидуумах с сервером и другими клиентами с помощью web sockets. Сервер использует node.js.

Degas.js пока в супер-зародышевом состоянии, функционал еще примитивен, а код некрасив, но если кто-то захочет присоединиться к разработке – было бы здорово.
Всего голосов 31: ↑30 и ↓1+29
Комментарии5

Генетические алгоритмы. От теории к практике

Время на прочтение6 мин
Количество просмотров63K
Добрый день. В последнее время решил заняться самообразованием. Решено было начать с генетических алгоритмов.

Одно из замечатльных свойств ГА это то, что процедуры Селекции, Скрещивания и Мутации представления не имеют о Индивидах в Поколениях — для них это всего-лишь 0 и 1. Единстенная функция, которая знает, что же из себя представляют эти самые 0 и 1 — это ФитнессФункция.

Поэтому я решил, что было бы неплохо написать класс-каркас для любого ГА. Об это и будет данная статья. Предполагается, что вы уже знакомы с основами генетических алгоритмов.

Кому интресно, прошу под кат.
Читать дальше →
Всего голосов 48: ↑40 и ↓8+32
Комментарии36

Я не знаю Си

Время на прочтение4 мин
Количество просмотров50K
Цель этой статьи — заставить всех, особенно программистов на Си, сказать «я не знаю Си».
Хочется показать, что тёмные углы в Си значительно ближе, чем кажется и даже тривиальные строки кода несут в себе undefined behavior.
Читать дальше →
Всего голосов 285: ↑268 и ↓17+251
Комментарии309

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Работает в
Дата рождения
Зарегистрирован
Активность