Pull to refresh
0
0
Ермишин Михаил @Habra-Mikhail

Программист на C# и PHP

Send message

Учим английский: как научиться разговаривать как носитель

Reading time4 min
Views28K
image

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

Но как это сделать? Я нашла интересный пост с описанием практических способов улучшения языка и подготовила его адаптированный перевод.
Total votes 25: ↑21 and ↓4+17
Comments25

Зачем выступать на айтишных конференциях и митапах?

Reading time7 min
Views25K
С осенью нас, коллеги. Летняя спячка подошла к концу, и осень начала радовать нас айтишными выставками, анонсами и конференциями разных форм и размеров. Последние несколько лет я плотно занимаюсь хакатонами и конференциями и очень часто слышу вопросы об аудитории и докладчиках — зачем все эти люди собираются, что они хотят друг от друга и какая практическая польза кроме пиццы? В рамках этого поста я собрал немного информации по предмету и мои собственные наблюдения, как проще всего подготовить и провести выступление на айтишной конференции или митапе. Под катом — мои ответы на странные вопросы и несколько практических приемов, накопленных за годы борьбы с ленью и здравым смыслом.
Читать дальше →
Total votes 69: ↑51 and ↓18+33
Comments35

Compact varint — уникальность и большие значения за ту же стоимость

Reading time9 min
Views7.3K

UPD 2018.03.15: Git давно использует свой вариант compact varint. Различия в послесловии.


Внимание: Код представленный в статье немного отличается от оригинальных EncodeVarint и DecodeVarint и даёт другие результаты. Будьте внимательны.


В multiformats/unsigned-varint обсуждении правильной записи числа в varint было замечено что многие числа в оригинальном varint могут быть записаны в последовательности разной длинны. Это даст разные блоки и их хеши при идентичных значениях кодированных в протобуфер.


Оригинальный varint


Оригинальный varint просто делит число на кусочки по 7 бит. И записывает их в порядке от младшего к старшему добавляя к каждому кусочку старший 8ой бит (MSB — most significant bit). Значение этого бита зависит от того последний это кусочек (0) или нет (1).


Таким образом например значение 0 мы можем записать во многих вариантах:


  1. 0000 0000 (0x00) varint = 0
  2. 1000 0000 0000 0000 (0x8000) varint = 0
  3. 1000 0000 1000 0000 0000 0000 (0x808000) varint = 0
    и так далее.

Compact varint


Я подумал что можно начинать значения контейнера большего размера от максимального значения предыдущего контейнера + 1. Ведь если мы используем контейнер такого размера то число должно быть больше максимума предыдущего контейнера.

Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments18

Игры, в которых нужно писать код (часть 2)

Reading time3 min
Views59K


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

Total votes 64: ↑64 and ↓0+64
Comments33

20+ ресурсов, чтобы начать фрилансить

Reading time3 min
Views667K
Чувствуете, что готовы уйти с работы, самостоятельно контролировать свой день, биться за клиента и работать только над интересными задачами? Пришло время попробовать себя во фрилансе. Это совсем нелегко, а чаще труднее, чем офисная рутина. Чтобы не разочароваться в выборе формата работы, устройте себе тест-драйв — на праздниках или в выходные. Собрали площадки, где найдете задачи по душе.


Читать дальше →
Total votes 24: ↑16 and ↓8+8
Comments17

Трёхмерная графика с нуля. Часть 1: трассировка лучей

Reading time42 min
Views131K
image


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

В этой работе мы сосредоточимся не на скорости, а на чётком объяснении концепций. Код примеров написан наиболее понятным образом, который не обязательно является самым эффективным для реализации алгоритмов. Есть множество способов реализации, я выбрал тот, который проще всего понять.

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


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

Создаём собственный физический 2D-движок. Часть 1: основы и разрешение импульсов силы

Reading time14 min
Views67K
image


Приступить к созданию собственного физического движка можно по разными причинам: во-первых, для освоения и усвоения новых знаний в математике, физике и программировании; во-вторых, собственный физический движок может обрабатывать любые технические эффекты, которые сможет создать его автор. В этой вводной статье я расскажу, как создать собственный физический движок с нуля.

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

В этой части туториала мы рассмотрим следующие темы:

  • Простое распознавание коллизий
  • Генерирование простого многообразия
  • Разрешение импульсов силы
Total votes 42: ↑41 and ↓1+40
Comments21

Создаём собственный физический 2D-движок: части 2-4

Reading time32 min
Views39K
image


Оглавление


Часть 2: ядро движка

  • Интегрирование
  • Метки времени
  • Модульная архитектура
    • Тела
    • Формы
    • Силы
    • Материалы
  • Широкая фаза
    • Отсечение дубликатов контактных пар
    • Система слоёв
  • Проверка пересечения полупространств

Часть 3: трение, сцена и таблица переходов

  • Трение
  • Сцена
  • Таблица переходов коллизий

Часть 4: ориентированные твёрдые тела

  • Математика вращения
  • Ориентированные формы
  • Распознавание коллизий
  • Разрешение коллизий

Total votes 52: ↑51 and ↓1+50
Comments8

Что каждый программист на C должен знать об Undefined Behavior. Часть 2/3

Reading time8 min
Views14K
Часть 1
Часть 2
Часть 3

В первой части нашего цикла мы обсудили, что такое неопределённое поведение, и как оно позволяет компиляторам C и C++ генерировать более высокопроизводительные приложения, чем «безопасные» языки. В этом посте мы обсудим, чем на самом деле является «небезопасный» C, объяснив некоторые совершенно неожиданные эффекты, вызываемые неопределённым поведением. В третьей части, мы обсудим, как «дружественные» компиляторы могут смягчить некоторые из таких эффектов, даже если они не обязаны это делать.

Мне нравится называть это «Почему неопределённое поведение часто пугает и ужасает программистов на C».

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

Инструкция начинающего разработчика игр

Reading time12 min
Views223K
Голая бабаВ данной инструкции я попытался осветить основные моменты разработки игр. Инструкция будет полезна для людей, собирающихся заняться разработкой игр в роли лидера (главного разработчика и организатора).

Хочу отметить, что игры бывают разные – большие и маленькие, сложные и лёгкие, и поэтому для каждой игры эта инструкция верна в какой-то своей определённой степени. Охватить всё не удалось, но передать общие моменты, думаю, получилось.
Читать дальше →
Total votes 142: ↑104 and ↓38+66
Comments138

Создание языка программирования с использованием LLVM. Часть 1: Введение и лексический анализ

Reading time7 min
Views58K
Добро пожаловать в учебник «Создание языка программирования с LLVM». Этот учебник знакомит вас с созданием простейшего языка программирования, и при этом показывает, каким оно может быть легким и интересным, а также даёт вам начальные знания, которые вы затем сможете применить на других языках программирования. Код в этом учебнике также может быть использован в качестве стартовой площадки для ваших творений с помощью LLVM.

Целью данного учебника является постепенное представление нашего языка, описание его пошагового создания. Это позволит нам охватить достаточно широкий спектр вопросов проектирования языков и использования LLVM, попутно показывая и объясняя код без огромного количества ненужных деталей.
Читать дальше →
Total votes 65: ↑61 and ↓4+57
Comments28

Говорит ли ваш код по-русски?

Reading time15 min
Views8.1K

Да, это пока не широко распространено. Обработка естественного языка еще недостаточно развита и не интегрирована с разработкой. Также, как нет и удобных способов интегрировать код с поиском или виртуальным помощником (таким как Siri). Голосовые команды имитируют GUI пути (щелчок-открыть-щелчок). Семантический Веб пытается познакомить приложения со смыслом, но все еще не может достигнуть широкой аудитории. Behavior-driven development (BDD) полагается на DSL (предметно-ориентированный язык), который близок к естественному, но этого все еще недостаточно, чтобы научить ваш код говорить.


Однако ваш код может взаимодействовать с естественным языком уже сегодня, правда не используя существующие подходы. Современные технологии не понимают естественный язык и непонятно, когда это станет возможным. Поэтому нам необходим иной подход:


  • который будет адаптирован к естественному языку
  • которому будет легко обучить широкий круг людей
  • который может выступать связующим звеном между естественным языком и компьютерными сущностями
  • который сможет создавать окружение в как можно большем количестве областей программной инженерии
Читать дальше →
Total votes 19: ↑14 and ↓5+9
Comments12

Information

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