Как стать автором
Обновить
0
0

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

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

Пора обновить ваш монитор

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

Иллюстрация: Юлия Прокопова

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

Поэтому я оптимизирую настройки, чтобы показывать действительно, действительно хорошие буквы. Для этого необходим хороший монитор. Не просто нужен, а ОБЯЗАТЕЛЕН. А под «хорошим» я имею в виду настолько хороший, насколько это возможно. Это мои мысли, основанные на моём собственном опыте того, какие мониторы лучше подходят для программирования.
Читать дальше →
Всего голосов 142: ↑109 и ↓33+115
Комментарии991

Сложность должна обитать где-то

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

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


Мы пытаемся избавиться от сложности, обуздать её и ищем простоты. Я думаю, что представлять себе суть вещей таким образом, — это ложный путь. Сложность обязательно должна где-то обитать.

Продолжение ...
Всего голосов 44: ↑44 и ↓0+44
Комментарии82

Опубликован исходный код Command & Conquer: смотрим, что внутри

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

Компания Electronic Arts открыла исходный код первой Command & Conquer, а также Command & Conqueror: Red Alert. Скачать его можно с GitHub.

Всё содержимое имеет лицензию GPL v3; кроме того, в исходном коде сохранены все комментарии. Отсутствует только changelog использовавшейся при разработке системы контроля версий. Похоже, всё просто недавно выложили на Git.

Я решил изучить, что же происходит внутри этого игрового движка. Не буду описывать каждую строку кода, но, по крайней мере, будет интересно взглянуть на то, какой была разработка на C++ в начале 1990-х.

Изучать мы будем только исходный код «Command & Conquer: Red Alert», потому что он похож на форк первой игры. В репозитории он находится в папке REDALERT.

Статистика


  1. 290 файлов заголовков C++
  2. 296 файлов реализации на C++
  3. 14 файлов ассемблера, содержащих инструкции ассемблера x86
  4. 222090 строк кода на C++

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

Почти все файлы имеют имена в верхнем регистре.

Кроме того, есть файл «RedAlert.vcxproj», поэтому можно предположить, что проект можно собрать в более новых версиях Visual Studio, но этого я не проверял.
Читать дальше →
Всего голосов 82: ↑82 и ↓0+82
Комментарии13

Черный лебедь в IT-проектах. Взгляд со стороны CEO на проблемы разработки

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


При чём тут лебедь?


Если Вас, как CEO или CTO IT-проекта (быстрорастущего или уже крупного), не покидают ощущения, что:

  • Roadmap продукта буксует
  • Разработка не успевает за новыми требованиями бизнеса
  • Клиенты готовы платить деньги за продукт, который Вы не можете им предоставить
  • Чек за доработку системы догоняет чек от потребителей
  • Всё сложнее нанимать толковых разработчиков, а свои уходят к конкурентам
  • Сейчас все хорошо, но как-то тревожно…

Тогда усаживайтесь поудобнее, эта статья для Вас.
Читать дальше →
Всего голосов 15: ↑13 и ↓2+18
Комментарии17

Насколько запутанна квантовая система? Ответ может быть невычислим

Время на прочтение4 мин
Количество просмотров21K
Доказательство на стыке чистой математики и теории алгоритмов возвышает «квантовую запутанность» на совершенно новый уровень.
Фраза «I shit bricks» в статье от Nature — бесценно. Да, это настолько неожиданный результат, что Nature позволяет себе вольности. (от переводчика)

Квантовая запутанность находится в сердце нового математического доказательства.Credit: Victor De Schwanberg/Science Photo Library
Читать дальше →
Всего голосов 34: ↑31 и ↓3+42
Комментарии132

Фьючерсы, индексы и IPO: как на самом деле устроены биржи и зачем они нужны

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


В нашем блоге мы много пишем о биржевых технологиях, IPO известных компаний и интересных новостях, однако уже довольно давно подробно не останавливались на общем устройстве финансового рынка. Поэтому сегодня мы простым языком объясним, зачем вообще нужны биржи, что такое фьючерсы, опционы и фондовые индексы, и зачем компании проводят IPO.
Читать дальше →
Всего голосов 17: ↑16 и ↓1+15
Комментарии2

Элементы защиты банкнот. Частное расследование

Время на прочтение9 мин
Количество просмотров32K
Тема элементов защиты банкнот меня заинтересовала после прочтения рекламной статьи на geektimes, в которой описывался карманный приборчик распознающий спец элемент «И» (anti-stokes luminescence).

Мир методов защит документов и банкнот от подделки оказался очень интересным и увлекательным. В чем то, даже теперь понимаю Виктора Ивановича Баранова.

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

Условно, для себя, я разделил методы проверки на две группы:

1. Элементы защиты доступные для проверки без специальных средств (максимум лупа).
2. Исследование с использованием «инструментальных» средств (UV, IR источники и т.п.)

Тема по п1. просто огромна и интересна, но она относительно широко освещена в открытых материалах и в этой статье я ее не затрагиваю.
Читать дальше →
Всего голосов 42: ↑40 и ↓2+38
Комментарии17

Чистая архитектура в Python: пошаговая демонстрация. Часть 5

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

Содержание

REST-слой (часть1)


Git tag: Step12


Наступил завершающий этап нашего приключения в поисках чистой архитектуры. Мы создали модели предметной области, сериализаторы, сценарии и хранилище. Но пока отсутствует интерфейс, который склеивает все вместе: получает параметры вызова от пользователя, инициализирует сценарий с хранилищем, выполняет сценарий, который получает модели предметной области из хранилища, и преобразует их в стандартный формат. Этот слой может быть представлен с помощью множества интерфейсов и технологий. Например, с помощью интерфейса командной строки (CLI): получать параметры с помощью ключей командной строки и возвращать результат в виде текста на консоли. Но та же базовая система может быть использована и для web-страницы, которая получает параметры вызова из набора виджетов, выполняет описанные выше шаги, и разбирает возвращенные данные в формате JSON для отображения результата на той же странице.


Вне зависимости от выбранной технологии, для взаимодействия с пользователем, сбора входных данных и предоставления выходных результатов, нам необходимо взаимодействовать с недавно созданной чистой архитектурой. Поэтому сейчас мы создадим слой для вынесения наружу API для работы с HTTP. Реализовано это будет при помощи сервера, который предоставляет набор HTTP-адресов (конечных точек API), при обращении к которым возвращаются некоторые данные. Такой слой обычно называют REST-слой, потому что, как правило, семантика адресов схожа с рекомендациями REST.

Читать дальше →
Всего голосов 18: ↑18 и ↓0+18
Комментарии0

Выгорание фрилансера на Upwork. Причины, инструменты, решения

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

UPD: в этом посте отражено субъективное мнение автора в 2016-ом году. Сейчас я работаю над своим проектом в сфере обучения облачным технологиям.

Мне не раз приходилось слышать: «Upwork — это же геморрой. Мне приходится тупо кликать мышкой, смотреть фильм на ноуте, чтобы побольше высидеть часов. Поэтому я ушел на XYZ...». Вот этот тезис, личные проблемы с продуктивностью, а также немалое количество self-help книг, побудили меня написать этот пост. Вся моя IT-карьера, связана с Upwork (который был oDesk). Это немного-немало 10,000+ часов работы, 10+ лет проведенных в этой системе, с короткими перерывами.

Но была одна серьезная проблема, баг в моей ментальной системе — это регулярное выгорание от работы, которое я не осознавал. Было плохо, нервозно, тревожно, но причину не удавалось найти. Она сидела где-то глубоко в подсознании, зарывшись поглубже еще в раннем детстве и не позволяла увидеть реальное положение вещей. Как наступило просветление и что делать во избежание выгорания — читайте под катом.
Читать дальше →
Всего голосов 76: ↑73 и ↓3+70
Комментарии133

Маркетинг игр и с чем его едят

Время на прочтение9 мин
Количество просмотров59K
Чтобы понять, что такое маркетинг игр и с чем его едят, в данной статье мы поговорим о следующих вопросах:

— Какой он – игровой маркетинг;
— Как начинался;
— Как менялся;
— Почему сегодня мы имеем такой игровой маркетинг, который имеем;
— Что нас ждет в будущем: как будет меняться маркетинг, как будут меняться рынки.


Материал подготовлен на базе открытой лекции Сергея Зыкова по игровому маркетингу, которая проходила в рамках нашей образовательной программы «Менеджмент игровых интернет-проектов» в ВШБИ. Если интересно, добро пожаловать под кат.


Всего голосов 20: ↑18 и ↓2+16
Комментарии2

Поддержка C++ модулей в Visual Studio 2015 Update 1

Время на прочтение2 мин
Количество просмотров36K
На конференции CppCon, которая проходит прямо сейчас, команда разработчиков компилятора Visual C++ заявила, что в следующем обновлении (Visual Studio 2015 Update 1) в компилятор С++ от Microsoft будет добавлена экспериментальная возможность из нового (ещё не утверждённого) стандарта С++ — поддержка модулей!



Для тех, кто не в курсе в чём эпохальность данного события: так уж сложилось, что механизм использовани компонентов в программах на С++ придумывался где-то лет 35 назад. Его нельзя назвать удобным: если вы хотите создать библиотеку — вам нужно сделать заголовочный файл и распространять с ним либо код, либо скомпилированную версию библиотеки. При этом возникает куча проблем:
  • Заголовочный файл и библиотека — отдельные файлы, один из них может потеряться, либо они случайно могут рассинхронизироваться.
  • Заголовочный файл включается в код директивой препроцессора #include, что во-первых, замедляет компиляцию, а во-вторых добавляет влияние всего, что написано в заголовочных файлах друг на друга и на конечный код. Нередки случаи, когда заголовочные файлы нужно включать в определенном порядке или определять некоторые макросы чтобы код нормально собрался.


В итоге в инфраструктуре С++ отсутствуют понятия «сборок» или «пакетов» и, в отличии от С# или Python, где установка компонентов тривиальна, в С++ подключение каждой новой библиотеки может нести свои неожиданности. Предлагаемый механизм модулей в С++ призван убрать данную проблему, отказаться от директивы препроцессора #include и ссылаться на компоненты, как на некоторую сущность, состоящую из кода и метаданных, целостную и легко подключаемую. В итоге мы вскоре можем получить существенное ускорение внедрения новых компонентов в проект, появления полноценных менеджеров пакетов, установка новой библиотеки сведется к выполнению одной строки или нескольким кликам мышью. Это ли не счастье!

Под катом будут примеры использования и ссылки на документацию.
Читать дальше →
Всего голосов 54: ↑50 и ↓4+46
Комментарии64

Браузер Chrome научился обманывать блокировщики рекламы

Время на прочтение1 мин
Количество просмотров60K
Если у вас последняя версия Chrome/Chromium и установлено расширение для блокировки рекламы вроде uBlock или AdBlock Plus, то вы могли заметить странное изменение в работе блокировщика. После обновления на последнюю версию Chrome/Chromium 45 в видеороликах YouTube снова появилась реклама. В начале некоторых видеороликов приходится просмаnривать рекламу продолжительностью до трёх минут.

Несколько дней после выхода новой версии браузера проблему обсуждали в баг-трекере Chromium и на форуме разработчиков uBlock. Как выяснилось, баг затронул все блокировщики рекламы, а блокировка отключилась не только на YouTube, но ещё на Spotify и некоторых других сайтах.

К счастью, «баг» в браузере легко устранить самостоятельно.
Читать дальше →
Всего голосов 94: ↑91 и ↓3+88
Комментарии38

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

Время на прочтение8 мин
Количество просмотров41K
Реализация поведения юнитов в RTS играх может стать серьезной проблемой. Компьютер, зачастую, контролирует огромное количество юнитов, в том числе и принадлежащих игроку, которые должны передвигаться в большом динамическом мире, попутно избегая столкновения друг с другом, выискивая врагов, защищая собственные базы и координируя атаки для истребления противника. Стратегии реального времени работают в реальном времени, что делает довольно сложным слежение за планированием действий и навигацией.

Этот урок описывает метод планирования течения игры и навигации юнитов, который использует многоагентные потенциальные поля. Он основан на работах под номерами [1, 2, 3]. (Смотри в конце статьи ссылки на используемые материалы)



Читать дальше →
Всего голосов 57: ↑56 и ↓1+55
Комментарии17

Путеводитель по реализации 2Д платформеров (начало)

Время на прочтение10 мин
Количество просмотров48K
Так как ранее я был разочарован количеством информации по этому вопросу, я решил восполнить этот пробел, собрав разные виды реализации 2Д платформеров, описав их сильные и слабые стороны и порассуждав над деталями реализации.

Моей целью было создать исчерпывающий и понятный путеводитель по реализации 2Д платформеров.



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

Четыре решения


Мне приходит на ум четыре основных варианта решений при создании платформера. В рамках этой статьи будут рассмотрены все четыре, но из-за большого объема статья поделена на 2 части (прим. пер).
Читать дальше →
Всего голосов 56: ↑53 и ↓3+50
Комментарии30

Автолётъ — гибридный транспорт будущего от восьмиклассника из Москвы

Время на прочтение2 мин
Количество просмотров10K
Артём Васинюк с проектом «Автолётъ» победил во 2-м ежегодном конкурсе «Телеком Идея Юниор». Он представил двухместный бикоптер с закрытой кабиной. Сейчас Артём сотрудничает с Московским авиационным институтом и готовит масштабную модель, пригодную к полёту.


Читать дальше →
Всего голосов 26: ↑12 и ↓14-2
Комментарии22

Разработка через тестирование в iOS

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

Содержание:


  • Разработка через тестирование – что это?
  • Три закона TDD
  • Примеры применения
  • Преимущества и недостатки
  • Литература и ссылки


Разработка через тестирование – что это?


Разработка через тестирование (Test-driven development) — техника разработки программного обеспечения, которая определяет разработку через написание тестов. В сущности вам нужно выполнять три простых повторяющихся шага:
— Написать тест для новой функциональности, которую необходимо добавить;
— Написать код, который пройдет тест;
— Провести рефакторинг нового и старого кода.

Мартин Фаулер



Читать дальше →
Всего голосов 18: ↑12 и ↓6+6
Комментарии10

Киберпсихология или как технологии сводят с ума

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


Что есть психика? Это довольно сложный вопрос, поскольку этот термин относится к нескольким наукам (психология, медицина и даже философия). Обычно мы рассматриваем термин психика, как совокупность поведенческих и эмоциональных характеристик человека. Его сознательное и бессознательное. Также стоит включить в этот перечень и сам ум, как совокупность способностей к познанию окружающего мира и анализа полученной информации. Если выражаться более грубо: все, что мы видим, чувствуем, все, о чем думаем, анализируем и запоминаем и составляет нашу психику. Определить состояние психики индивида можно благодаря выстраиванию логической цепочки событий и факторов, которые могли повлиять на её формирование. Однако, зачастую, не достаточно лишь материальных методов, порой приходиться применять такие неосязаемые и иллюзорные вещи, как интуиция, эмпатия, даже любопытство. Каждый специалист в области психологии (или медицины, или философии) может дать собственное определение этого термина, сделать собственные выводы, и все они могут быть правы. Настолько обширен и нелинеен данный аспект нашего существования.
Читать дальше →
Всего голосов 13: ↑12 и ↓1+11
Комментарии5

Почему я ненавижу virtualenv и pip

Время на прочтение9 мин
Количество просмотров101K
Я не разделяю всеобщей любви к virtualenv (далее — venv) и pip. Я считаю, что они лишь вносят неразбериху и более того — вредят. Python-программисты чаще всего не соглашаются со мной, да и venv+pip де-факто считается стандартом в python-сообществе. Так как я понимаю, насколько голословными звучат мои высказывания, решил написать сей трактат. Конечно, я иногда пускаюсь спорить на эту тему и в реальной жизни: и ну нравится мне заводить людей и наблюдать, как страстно они остаивают свою позицию. Но при этом мне всегда кажется, что словесно я не могу обосновать свою позицию в полной мере. Поэтому вместо того, чтобы постоянно пытаться вербально доказывать свою точку зрения, я решил написать эту статью, дабы потом просто показывать её людям. Может быть тогда некоторые со мной согласятся, потому что сейчас не согласен почти никто. А может наоборот, как только мои доводы будут всецело поняты, найдутся те, кто их аргументированно опровергнет. Так или иначе, я буду рад любому варианту развития событий.
Читать дальше →
Всего голосов 86: ↑68 и ↓18+50
Комментарии61

«Й» вам не «и» краткое! О важности нормализации Unicode

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

За последние полгода интернет просто наводнила «буква» «й». Я встречал ее на новостных сайтах, в мессенджерах, на хабрахабре и geektimes. «О чем вообще речь?» — спросите вы — «Я вижу обычную букву й!». Вам повезло. Я вижу ее так:
image
image
image
image
image
Если вы из тех счастливчиков, у кого буква «й» выглядит так же, как и «настоящая» «й», вот вам фокус: скопируйте ее (букву «й») в блокнот, поставьте курсор в конец буквы и нажмите backspace. Магия, отвал башки просто!
Как же так получается?

Графемы, глифы, code points, компоновка и байты

Очень краткое введение:
Графема — то, что мы привыкли называть буквой в смысле единицы текста. Глиф является единицей графики, и может графически представлять саму графему или же ее часть (например, различные диакритические знаки: ударения, умляуты, надстрочное двоеточие у буквы ё и т.д.).
Code Point — то, как записывается текст в представлении Unicode. Одна графема может записываться разными code points.
Code Points кодируются различным байтовым представлением в зависимости от стандарта: UTF-8, UTF-16, UTF-32, BE, LE…
Языки программирования, как правило, работают с code points; для нас, людей, привычно мыслить глифами.

Давайте же наконец разберемся с нашей буквой й. Что же в ней такого особенного?
Эта буква представляет из себя одну графему («и» краткое), но записана она двумя code points:
U+000438 CYRILLIC SMALL LETTER I
U+000306 COMBINING BREVE

Если вы проделали фокус с нажатием backspace, вы как раз и стерли COMBINING BREVE, или, говоря полиграфическим языком, значок краткости над гласной.

Обычная буква «и» краткое, которую мы все с вами привыкли набирать клавиатурой, представляет из себя композитный символ, который записывается одним code point:
U+000439 CYRILLIC SMALL LETTER SHORT I
Читать дальше →
Всего голосов 100: ↑97 и ↓3+94
Комментарии127

Загадка фликкер-шума разгадана

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


Давным-давно, когда диоды были ещё вакуумными, J. В. Johnson впервые наблюдал мерцательный эффект в токе электронных ламп, который он так и назвал – мерцательным или фликкер-шумом. Прошло ровно 90 лет с тех пор, а фликкер-шум продолжают обнаруживать в самых разнообразных системах – от полупроводниковых приборов до разлива рек, от физики до социологии, но объяснить природу его происхождения так никто и не смог.
Читать дальше →
Всего голосов 88: ↑82 и ↓6+76
Комментарии129
1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность