Как стать автором
Обновить
5
0
Андрей @brainworm

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

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

Чем опасен rebase, или как получилось, что 2*3=5

Время на прочтение2 мин
Количество просмотров94K
Однажды старший программист Антон искал причину очередного бага в очень важном проекте компании:
git bisect start
git bisect bad
git bisect good
…

В компании использовали rebase, история коммитов была линейной, и поиск по ней доставлял Антону одно удовольствие.
— Ага, нашел. Ну конечно: в коде написано «2*3=5», ещё бы оно работало с этим бредом! Какой @#$%^ это написал?
Читать дальше →
Всего голосов 123: ↑108 и ↓15+93
Комментарии148

Как мы делали лазер из DVD-RW привода

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

Без особых прелюдий начну с того, какой привод лучше использовать.
  • Во-первых, это должен быть пишущий привод (RW);
  • Во-вторых, чем выше у него скорость записи, тем мощнее получится лазер;
  • Ну и, в-третьих, чем более ненужным он уже является, тем больше удовлетворения от этого можно получить. Я заметил прямую зависимость :)
Читать дальше →
Всего голосов 175: ↑150 и ↓25+125
Комментарии136

Дилемма заключенных: you are (not) alone

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

Недавно прочитал пост о диллемме заключенных, который заинтересовал сообщество.
В данном посте хочу показать взгляд на эту проблему со стороны теории игр, на основе опыта полученного после обучения на онлайн курсах ИИ университета в Беркли. После применения данного аппарата проблема становится понятной и разрешимой.
Читать дальше →
Всего голосов 65: ↑44 и ↓21+23
Комментарии18

Немного об использовании this

Время на прочтение2 мин
Количество просмотров2.1K
Доброго времени суток, господа!

В джаваскрипте существует очень много интересных нюансов, которые едва ли можно встретить в других языках программирования. Рассмотрим самый нужный, на мой взгляд, из них — this.
Данный пост поможет освежить знания по этой теме.
Я не буду долго объяснять теорию, лучше сразу перейдем к коду и подумаем, что же произойдет в результате его выполнения.
Читать дальше →
Всего голосов 17: ↑3 и ↓14-11
Комментарии6

Очень быстрое переключение пользователей Windows

Время на прочтение5 мин
Количество просмотров29K
Хочу поделиться с вами лайфхаком, которым пользуюсь ежедневно уже на протяжении нескольких лет. Работает безупречно, сберегает время. Так повелось, что у нас с женой разные учетные записи на одном домашнем компьютере. Это удобно: у каждого свой рабочий стол, свои обои, предпочтения, настройки приложений, кукисы в браузере. Я даже не представляю сейчас, как можно работать под одной учеткой. Но (без этого “но” не было бы и статьи), есть одна маленькая проблема. Переключение пользователей. Как это делается обычно: Пуск –> некая кнопочка, в зависимости от системы -> сменить пользователя. Появляется экран выбора пользователя. Тыкаем в нужного пользователя. Да, есть сочетание клавиш Win+L. После которого опять надо ткнуть смену пользователя и иконку. Итого минимум 3 действия. В Windows 8 сделали заметное улучшение в этом плане. нажимаем Win + иконку пользователя и в списке кликаем на другого. Но это без учета, что на учетке есть пароль. Вот тут-то уже начинаются существенные задержки. Вводить пароль каждый раз при каждом переключении надоест очень быстро. А пароль на свою учетку мне пришлось поставить, так как нужен был удаленный доступ. Да, можно было для удаленного доступа сделать другую учетку, но мой лайфхак уже был готов к тому моменту, и прекрасно работал вне зависимости от того, есть пароли на учетках или нет.
Читать дальше →
Всего голосов 71: ↑61 и ↓10+51
Комментарии46

Насколько плохим код должен быть?

Время на прочтение6 мин
Количество просмотров74K
Эрик Липперт — ветеран Microsoft, проработавший в компании 16 лет и стоящий за разработкой VBScript, JScript и C#.

На прошлой неделе в комментариях к одной из статей разгорелся спор о роли низкоуровневой оптимизации в программировании, и я вспомнил относящуюся к этому статью Эрика. Она была написана в конце 2003, и хотя реалии с тех пор несколько изменились — принципы остались теми же самыми. Можете мысленно заменить ASP и VBScript на PHP, JavaScript, или на другой скриптовый язык по вашему вкусу.

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


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

Например, за семь лет в Microsoft я получил десятки вопросов, аналогичных по своей сути этому, заданному в конце 1990-х:
У нас есть код на VBScript, и в одной часто вызываемой функции мы определяем оператором Dim несколько переменных, которые нигде в функции не используются. Не замедляется ли каждый вызов функции из-за объявления этих переменных?
Какой интересный вопрос! В компилируемом языке, таком как Си, объявление локальных переменных общим размером n байт всего лишь вычитает n из указателя стека при входе в функцию. Если n будет чуть больше или чуть меньше, затраты времени на вычитание никак не изменятся. Наверное, в VBScript точно так же? Оказалось, что нет! Вот что я написал автору вопроса:
Читать дальше →
Всего голосов 171: ↑146 и ↓25+121
Комментарии246

OpenMPT-программа, которая меня удивила

Время на прочтение4 мин
Количество просмотров12K
Трекерной музыкой я немного баловался лет десять назад.
И вот возникло желание попробовать сделать даже не музыку, а просто, скажем, звуковое оформление к видеоролику.
Читать дальше →
Всего голосов 15: ↑9 и ↓6+3
Комментарии17

Как сделать свой сервер для приема, обработки и передачи смс

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

Доброго времени суток, уважаемое хабросообщество!
Недавно в универе мне была поставлена задача создать сервис смс-рассылки уведомлений старостами (деканатом и прочими) своим группам.
Основные требования к сервису были следующими:
— Сервис должен быть многопользовательским (старост более 1) с возможностью одновременной обработки запросов
— Не должен быть привязан к online сервисам рассылки (дабы не утекли базы пользователей)
— Должен быть достаточно легким и мобильным
— Максимально малозатратным
— Должен использовать только открытое программное обеспечение
— Должен обеспечивать отправку уведомлений, даже если у отправляющей стороны нет доступа к Интернету и/или компьютеру. (т.е. не только отправлять, но и принимать входящие смс сообщения от старост + определять от кого конкретно они поступили и делать рассылку по их группам)

Как удалось это реализовать — смотрите под катом.
Читать дальше →
Всего голосов 112: ↑87 и ↓25+62
Комментарии83

Исключительная красота исходного кода Doom 3

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

Сегодня вас ждет рассказ об исходном коде Doom 3 и о том, насколько он красив.
Да, красив. Позвольте мне объясниться.
Читать дальше →
Всего голосов 281: ↑256 и ↓25+231
Комментарии245

3D на рабочий стол Windows (+исходники)

Время на прочтение2 мин
Количество просмотров91K
3D модели на рабочем столеС Рождеством дорогие Хабравчане!

Хочу бескорыстно поделиться своим скромным проектом.

Основные возможности:

  • вывод 3D графики (модели, сцены) на рабочий стол Windows;
  • переход в скринсейвер и обратно;
  • импорт моделей;
  • установка последнего 3D кадра картинкой рабочего стола;


Ну и что дальше
Всего голосов 97: ↑87 и ↓10+77
Комментарии35

Скачивание музыкальной коллекции vk.com

Время на прочтение7 мин
Количество просмотров58K
Привет, хабрахабр!

Решил я как-то скачать свою музыкальную коллекцию из vkontakte (а это без малого 1000 песен). Связываться с vk.api не хотелось, поэтому решил использовать python + библиотека request. Что из этого получилось — под катом!
Читать дальше →
Всего голосов 72: ↑46 и ↓26+20
Комментарии44

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

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

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

Легенда


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

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

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

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

Щелевая съёмка: сжатие времени по горизонтали

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

Фото: Jay Mark Johnson

Перед вами оригинальный снимок, без обработки в фоторедакторе или применения каких-то художественных эффектов. Исключительно точное документальное фото. Только это не картина одного момента, как в обычной фотографии. В кадре вместились события, которые происходили в течение около 30 секунд на промежутке пространства шириной 1 пиксел. Снимок сделан методом щелевой фотографии.
Читать дальше →
Всего голосов 150: ↑144 и ↓6+138
Комментарии74

Игра «Жизнь» и моделирование естественного отбора

Время на прочтение4 мин
Количество просмотров106K
Валялся я на прошлой неделе в больнице. И так как обсуждать с дедушками в холле рецепт яблок, мочёных в капусте, и как хорошо на Покров гулять по заливным лугам — особого желания не было, пришлось придумывать себе развлечение.

Я задумался об игре «Жизнь», которую на Хабре не так давно вспоминали. Мне стало обидно за несчастные клетки, которые живут и умирают в зависимости от одних только начальных условий, и ничего сами для своего выживания сделать не могут. В результате я придумал расширение для правил игры, с которым можно моделировать не только изменение численности популяции, но и естественный отбор внутри неё.

Самые нетерпеливые сразу могут посмотреть, что получилось, а остальных прошу под кат за рассказом.
Читать дальше →
Всего голосов 88: ↑77 и ↓11+66
Комментарии44

Ты правда хочешь продолжать заниматься этим, когда тебе исполнится 50 лет?

Время на прочтение2 мин
Количество просмотров80K
Когда я еще был профессиональным программистом, мой коллега однажды спросил меня: «Ты правда хочешь продолжать заниматься этим делом, когда тебе будет 50 лет?».

Я должен сказать, это заставило меня остановиться и подумать.
Читать дальше →
Всего голосов 173: ↑123 и ↓50+73
Комментарии321

Evil USB HID-эмулятор или просто Peensy

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


Интересным вектором атак является использование USB HID эмуляторов клавиатуры (и мышки) в корпусе стандартной USB флешки. И если autofun.inf на флешке мы уже научились как-то искать и уничтожать, то с HID эмуляторами все пока что плохо.

Для тех, кто не знаком ещё с этой темой, я рекомендую прочитать для начала хабростатью "Боевой HID-эмулятор на Arduino". Тут я не буду касаться вопросов установки и настройки среды программирования Arduino, а лучше чуть-чуть расскажу про продвинутое использование Peensy (Pentest+Teensy).
Читать дальше →
Всего голосов 30: ↑28 и ↓2+26
Комментарии14

Kaylee: распределённые вычисления в браузере

Время на прочтение3 мин
Количество просмотров14K
В 1999 году проект SETI@home предложил пользователям предоставлять ресурсы своих персональных компьютеров для анализа радиосигналов из космоса в целях поиска внеземного разума. В рамках этого проекта в университете Berkley была разработана платформа BOINC (Berkeley Open Infrastructure for Network Computing), на основе которой впоследствии были запущены уже упомянутый SETI@home, ABC@home (доказательство abc-гипотезы), Climateprediction.net (улучшение климатических моделей), LHC@home (симуляция столкновений высокоэнергетических частиц) и другие.

И всё бы хорошо, но для работы BOINC требуется выполнение одного обязательного условия: пользователю требуется скачать, настроить и запустить клиентскую часть. Как же быть, если по каким-либо причинам это невозможно сделать? И как было бы здорово просто кликнуть по ссылке в браузере и вмиг превратить компьютер в звено большой вычислительной сети!

С этими мыслями я взялся за написание Kaylee.

Читать дальше →
Всего голосов 54: ↑51 и ↓3+48
Комментарии49

Когда быть хорошим плохо

Время на прочтение4 мин
Количество просмотров65K
Я хотел бы начать с истории:

Учитель керамического дела объявил в день открытия, что разобьет класс на две группы. «Те, кто сидят слева» — сказал он: «будут оцениваться только по количеству проделанной работы, те, кто справа — только по её качеству». Его методика была проста, в последний день он принесет весы и взвесит работу группы «количество»: 50 фунтов горшков это «5», сорок фунтов горшков это «4» и так далее. Те, кто оцениваются по «качеству», однако, должны сделать один, пусть и совершенный, горшок, чтобы получить «5». Время сдачи пришло, и обнаружился любопытный факт: работы лучшего качества были сделаны в группе, оцениваемой по количеству. Похоже, в то время, как группа «количество» упорно штамповала свои работы и училась на своих ошибках, группа «качество» теоретизировали об идеале и, в конце концов, только и могла показать свои старания и грандиозные теории об идеале, а также кучу бесполезной глины.

Читать дальше →
Всего голосов 172: ↑157 и ↓15+142
Комментарии66

Решение задачи коммивояжёра на плоскости рекурсивным жадным алгоритмом

Время на прочтение3 мин
Количество просмотров21K
В предыдущей публикации был рассмотрен алгоритм решения задачи коммивояжёра на плоскости рекурсивным полным перебором. Результат получился любопытным, но итоговый маршрут содержал очевидные неоптимальные участки. В предлагаемой заметке рассмотрен улучшенный алгоритм, который я назвал «рекурсивным жадным алгоритмом». Признаюсь сразу, итоговый маршрут в сравнении с рекурсивным полным перебором получается лучше, в среднем, на 8%.
Читать дальше →
Всего голосов 22: ↑18 и ↓4+14
Комментарии9

Изменяемые числовые объекты

Время на прочтение2 мин
Количество просмотров14K
Как известно, в Java существуют примитивные типы для чисел (byte, short, int, long, float, double) и объектные обёртки над ними (Byte, Short, Integer, Long, Float, Double). В различных статьях можно встретить диаметрально противоположные рекомендации о том, чем пользоваться. С одной стороны объектные обёртки универсальны: их можно использовать со стандартными коллекциями, которые удобны, инкапсулированы и вообще прекрасны. Но боксинг убивает производительность и ест кучу памяти. Примитивные типы быстры и компактны, но их можно поместить только в массивы, которые и от записи не защитишь, и абстракция на нуле. Если же вам нужно что-то типа Map, для отображения чего-нибудь на числа, то придётся либо мириться с потерей производительности и памяти, либо использовать сторонние библиотеки, реализующие нестандартный интерфейс. Однако в некоторых случаях вам помогут изменяемые (mutable) числа.
Читать дальше →
Всего голосов 23: ↑18 и ↓5+13
Комментарии54

Информация

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