Pull to refresh
0
0
Send message

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

Reading time16 min
Views181K

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

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

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

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

Reading time5 min
Views10K

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


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

Продолжение ...
Total votes 44: ↑44 and ↓0+44
Comments82

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

Reading time19 min
Views36K

Компания 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, но этого я не проверял.
Читать дальше →
Total votes 82: ↑82 and ↓0+82
Comments13

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

Reading time8 min
Views14K


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


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

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

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

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

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

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

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

Reading time9 min
Views23K


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

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

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

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

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

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

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

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

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

Reading time11 min
Views17K

Содержание

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


Git tag: Step12


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


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

Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments0

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

Reading time11 min
Views95K

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

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

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

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

Reading time9 min
Views59K
Чтобы понять, что такое маркетинг игр и с чем его едят, в данной статье мы поговорим о следующих вопросах:

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


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


Total votes 20: ↑18 and ↓2+16
Comments2

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

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



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


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

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

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

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

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

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

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

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

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



Читать дальше →
Total votes 57: ↑56 and ↓1+55
Comments17

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

Reading time10 min
Views49K
Так как ранее я был разочарован количеством информации по этому вопросу, я решил восполнить этот пробел, собрав разные виды реализации 2Д платформеров, описав их сильные и слабые стороны и порассуждав над деталями реализации.

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



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

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


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

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

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


Читать дальше →
Total votes 26: ↑12 and ↓14-2
Comments22

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

Reading time11 min
Views26K

Содержание:


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


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


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

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



Читать дальше →
Total votes 18: ↑12 and ↓6+6
Comments10

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

Reading time14 min
Views27K


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

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

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

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

Reading time3 min
Views54K
й

За последние полгода интернет просто наводнила «буква» «й». Я встречал ее на новостных сайтах, в мессенджерах, на хабрахабре и 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
Читать дальше →
Total votes 100: ↑97 and ↓3+94
Comments127

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

Reading time10 min
Views69K


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

Information

Rating
Does not participate
Registered
Activity