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

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

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

Кулинарный путеводитель по архитектурам AI

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

Мне постоянно приходится слышать от студентов и начинающих гейм-дизайнеров – да, честно говоря, и от бывалых программистов тоже – один и тот же вопрос, который звучит примерно так: “Какую архитектуру AI мне выбрать для своего проекта?”. Этим вопросом пестрят форумы, его можно услышать на конференции разработчиков игр GDC, и, конечно же, его не один раз вспоминают во время пре-продакшна создатели любой игры – от AAA-класса до инди. Я работаю консультантом по игровому AI, поэтому я постоянно слышу ее от своих клиентов.

Обычно, самый лучший ответ на этот вопрос – «Когда как». Вот только подобный ответ мало кого устраивает, поэтому после него мне приходится устраивать самый настоящий допрос.
Читать дальше →
Всего голосов 83: ↑76 и ↓7+69
Комментарии6

10 правил, которые позволяют NASA писать миллионы строк кода с минимальными ошибками

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

image
Маргарет Гамильтон стоит рядом с написанным ей исходным кодом бортового компьютера «Аполлона»


Лаборатория реактивного движения (Jet Propulsion Laboratory) — научно-исследовательский центр НАСА, ответственный за большинство беспилотных космических кораблей США. Там пишут много кода, и права на ошибку у них намного меньше, чем у обычных программистов.


В JPL пишут на Си, и на их сайте есть документ "JPL Institutional Coding Standard", описывающий жесткие стандарты кодирования внутри организации. Они напоминают правила программирования для встроенных (embedded) систем и систем реального времени, с ограниченными ресурсами. Но многие из правил эти просто принципы хорошего программирования. Ограничение сложности, максимальное упрощение для последующего чтения кода и отладки, отсутствие побочных эффектов. Мы в Хекслете постоянно говорим об этом в вебинарах и, конечно, в самих курсах. Мы считаем очень важным как можно раньше поднимать эти темы, поэтому про функции и побочные эффекты начинаем говорить в самом первом курсе «Основы программирования», который рассчитан на новичков. Это бесплатный курс, кстати, и в нем есть практика на языке JavaScript.


Спасибо хабраюзеру Boletus за важную поправку и дополнение:
В 2006 году Gerard Holzmann с коллективом сформулировал 10 основных правил для JPL в документе «The Power of 10: Rules for Developing Safety-Critical Code». Они вошли в основу нынешнего стандарта, наряду с MISRA C и другими дополнениями. Статья в Википедии.


Вот перевод этого списка.

Читать дальше →
Всего голосов 92: ↑80 и ↓12+68
Комментарии118

Советы о том, как писать на С в 2016 году

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

Если бы язык С был оружием

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

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

Итак, статья ...


Первое правило программирования на С – не используйте его, если можно обойтись другими инструментами.

Когда найти альтернативный метод не удается, самое время вспомнить о современных заповедях программиста.
Читать дальше →
Всего голосов 92: ↑84 и ↓8+76
Комментарии80

Полный перевод Unix-коанов на русский язык

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


Представляю на ваш суд ещё один перевод коанов о Мастере Фу на русский язык. В данный сборник вошли все коаны, на данный момент опубликованные на сайте Эрика Реймонда. Надо сказать, что сам Эрик личность весьма неординарная, но упоминания в данной статье стоящая. Помимо холиваров в списках рассылки всевозможных проектов за его авторством также несколько серьёзных трудов о Unix — в том числе и о сообществе, без которого экосистема современных открытых проектов не была бы возможной (полный список книг). Идея перевести коаны в очередной раз пришла мне в голову во время чтения одного из таких трудов, а именно «The Art of Unix Programming», поскольку многое из скрытого смысла коанов становится ясно только после прочтения очередной главы оттуда.

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

Итак
Всего голосов 126: ↑123 и ↓3+120
Комментарии65

R и Python — достойные соперники?

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


Всем доброй пятницы, дорогие читатели!

В истории компьютерной редакции издательства «Питер» найдется немного столь успешных книг, как "Программируем на Python" Майкла Доусона и не больше таких противоречивых тем, как изумительный язык R, прочно закрепившийся в числе бестселлерных тем «Амазона». В настоящее время мы договариваемся с правообладателями о новой замечательной книге по Python, но в то же время хотели проверить общественное мнение о R — целесообразно ли издавать новые книги об этом элитарном языке для гуру большой статистики, либо Python легко его одолеет, не то что Аполлона?

Добро пожаловать под кат!
Читать дальше →
Всего голосов 14: ↑13 и ↓1+12
Комментарии15

13 основных принципов геймдизайна. Направление и поведение

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


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

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

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

13 основных принципов геймдизайна: прогрессия, окружение, метод и основы

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


Представьте, что вы управляете кораблем и одновременно достраиваете его. Вот что-то подобное происходит и в геймдизайне. Чтобы реально прочувствовать этот темп, надо прыгнуть с парашютом, дошивая его на ходу. В геймдизайне никогда не запрягают лошадь впереди повозки. Здесь они несутся наперегонки, а мы смотрим, кто придет первым.
Читать дальше →
Всего голосов 16: ↑14 и ↓2+12
Комментарии0

Пятничный формат: Как писать код, который никто не сможет сопровождать

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


Благодаря советам экспертов в области Java вы научитесь писать код, который будет настолько сложно сопровождать, что любому, кто будет с ним работать после вас, потребуются годы, чтобы внести даже малейшие правки. Более того, если будете неизменно следовать этим правилам, вы сможете гарантировать себе пожизненное рабочее место, так как никто кроме вас не сможет разобраться в вашем коде.
Читать дальше →
Всего голосов 89: ↑74 и ↓15+59
Комментарии119

19 советов по повседневной работе с Git

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


Если вы регулярно используете Git, то вам могут быть полезны практические советы из этой статьи. Если вы в этом пока новичок, то для начала вам лучше ознакомиться с Git Cheat Sheet. Скажем так, данная статья предназначена для тех, у кого есть опыт использования Git от трёх месяцев. Осторожно: траффик, большие картинки!

Содержание:
  1. Параметры для удобного просмотра лога
  2. Вывод актуальных изменений в файл
  3. Просмотр изменений в определённых строках файла
  4. Просмотр ещё не влитых в родительскую ветку изменений
  5. Извлечение файла из другой ветки
  6. Пара слов о ребейзе
  7. Сохранение структуры ветки после локального мержа
  8. Исправление последнего коммита вместо создания нового
  9. Три состояния в Git и переключение между ними
  10. Мягкая отмена коммитов
  11. Просмотр диффов для всего проекта (а не по одному файлу за раз) с помощью сторонних инструментов
  12. Игнорирование пробелов
  13. Добавление определённых изменений из файла
  14. Поиск и удаление старых веток
  15. Откладывание изменений определённых файлов
  16. Хорошие примечания к коммиту
  17. Автодополнения команд Git
  18. Создание алиасов для часто используемых команд
  19. Быстрый поиск плохого коммита

Читать дальше →
Всего голосов 152: ↑149 и ↓3+146
Комментарии62

Анонс C++ Core Guidelines

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

Утром 21 сентября, на открывающем докладе CppCon Бьерн Страуструп официально анонсировал C++ Core Guidelines [ссылка на GitHub проекта][ссылка на слайды] — старт нового open source-проекта по разработке современных авторитетных гайдлайнов по написанию кода на C++. Гайдлайны создаются таким образом, чтобы быть современными, машинно-проверяемыми, а также открытыми для использования в сторонних компаниях — такими, чтобы любая желающая организация могла взять их и включить в свои собственные корпоративные стандарты кодирования.

В качестве авторов-инициаторов проекта выступили Бьерн Страуструп и Герб Саттер; гайдлайны создавались при участии экспертов из CERN, Microsoft, Morgan Stanley и еще нескольких организаций. Сейчас гайдлайны достигли версии 0.6, и Страуструп призывает всех желающих активно контрибьютить в проект.

Страуструп в своем выступлении сказал следующее: «Вы можете писать программы на С++, которые будут статически типобезопасными, и в которых не будет утечек ресурсов. Вы можете делать это без потери производительности и без ограничения выразительной мощи С++. Все это служит поддержкой основного тезиса о том, что сборка мусора не является как необходимой, так и достаточной частью качественного программного обеспечения (garbage collection is neither necessary nor sufficient for quality software). Наши новые гайдлайны делают написание кода более простым, чем это было в старых стилях программирования на С++, а его безопасность может быть проверена инструментами, которые вскоре будут доступны в open source».
Читать дальше →
Всего голосов 34: ↑34 и ↓0+34
Комментарии11

Инкапсуляция интерфейсов. Делаем API в C++ удобным и понятным

Время на прочтение9 мин
Количество просмотров22K
В свое время я написал для журнала «Хакер» цикл статей для рубрики «Академия С++», в котором описывал интересные возможности использования C++. Цикл давно завершён, но меня до сих пор часто спрашивают, как именно работает эмуляция динамической типизации из первой статьи. Дело в том, что когда я начинал цикл, не знал точно, что нужно, а что нет, и упустил в описании ряд нужных фактов. Зря! В обучающем материале не бывает ничего лишнего. Сегодня я в деталях изложу, как именно получается красивый высокоуровневый API в терминах самого обычного C++: просто классы, методы и данные.
Добро пожаловать под кат
Всего голосов 21: ↑16 и ↓5+11
Комментарии22

Памятка пользователям ssh

Время на прочтение13 мин
Количество просмотров1.5M
abstract: В статье описаны продвинутые функций OpenSSH, которые позволяют сильно упростить жизнь системным администраторам и программистам, которые не боятся шелла. В отличие от большинства руководств, которые кроме ключей и -L/D/R опций ничего не описывают, я попытался собрать все интересные фичи и удобства, которые с собой несёт ssh.

Предупреждение: пост очень объёмный, но для удобства использования я решил не резать его на части.

Оглавление:
  • управление ключами
  • копирование файлов через ssh
  • Проброс потоков ввода/вывода
  • Монтирование удалённой FS через ssh
  • Удалённое исполнение кода
  • Алиасы и опции для подключений в .ssh/config
  • Опции по-умолчанию
  • Проброс X-сервера
  • ssh в качестве socks-proxy
  • Проброс портов — прямой и обратный
  • Реверс-сокс-прокси
  • туннелирование L2/L3 трафика
  • Проброс агента авторизации
  • Туннелирование ssh через ssh сквозь недоверенный сервер (с большой вероятностью вы этого не знаете)
Читать дальше →
Всего голосов 360: ↑352 и ↓8+344
Комментарии148

Окна и буферы

Время на прочтение2 мин
Количество просмотров45K
В vim 7 появились табы — привычный способ навигации по файлам. Когда я работал в eclipse я не раз замечал, что часто скакать между табами не удобно, а знакомство с буферами в emacs натолкнуло на прочтение документации по окнам/буферам в vim.

Читать дальше →
Всего голосов 37: ↑33 и ↓4+29
Комментарии34

.vimrc, который всегда со мной

Время на прочтение2 мин
Количество просмотров65K
Моему .vimrc уже больше восьми лет. Он помнит времена PentiumII, Debian Potato и gcc настолько древнего, что я уже и не помню его версии. Он развивался с пятой версии Vim, приобретал полезные фрагменты и избавлялся от ненужных. И вот внезапно захотелось поделиться с вами его содержимым. Весь файл я показывать пока не буду, лишь пройдусь по некоторым, на мой взгляд, интересным моментам.
Читать дальше →
Всего голосов 75: ↑67 и ↓8+59
Комментарии70

Искусство командной строки

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


Вот уже как неделю английская версия the art of command line висит в секции trending на Github. Для себя я нашел этот материал невероятно полезным и решил помочь сообществу его переводом на русский язык. В переводе наверняка есть несколько недоработок, поэтому милости прошу слать пулл-реквесты мне сюда или автору оригинальной работы Joshua Levy вот сюда. (Если PR отправите мне, то я после того, как пересмотрю изменения отправлю их в мастер-бранч Джоша). Отдельное спасибо jtraub за помощь и исправление опечаток.

Enjoy!
Всего голосов 127: ↑122 и ↓5+117
Комментарии143

Список ресурсов для изучения Ассемблера

Время на прочтение4 мин
Количество просмотров438K
Доброго времени суток!
Некоторым программистам иногда приходит в голову мысль «а не изучить ли мне ассемблер?». Ведь на нем пишут самые (с некоторыми оговорками) маленькие и быстрые программы, да и охота ощутить вкус низкоуровневого программирования берет свое. Ну и для общего развития не повредит.
Мысль эта не обошла стороной и меня. Вдохновившись историей одного байта, я ринулся в бой…

… но оказалось, что найти материал по интересующей теме не так просто, как хотелось бы. Посему решено было создать на хабре пополняющийся пост-индекс статей/книг/мануалов/etc. об этом, несомненно, великом языке.
Под катом находится, собственно, список с краткими комментариями, разбитый по категориям.

UPD
В список начали добавляться ресурсы по программингу микроконтроллеров.
Читать дальше →
Всего голосов 135: ↑130 и ↓5+125
Комментарии46

Коаны Гита

Время на прочтение3 мин
Количество просмотров38K
По мотивам «Коанов Вима».

Тишина
Что-то одно, но хорошо
Только богам
Хобгоблин
Длинное и короткое

Тишина


Python-программистка передала свой файл ~/.gitconfig мастеру Гиту. Среди строчек кода было следующее:

[alias]
; Явное лучше подразумеваемового. Если мы хотим выполнить слияние,
; нам следует сделать это самим.
pull = pull --ff-only

Мастер Гит кивнул. «git pull origin master», — сказала программистка.
Читать дальше →
Всего голосов 153: ↑130 и ↓23+107
Комментарии52

Коаны Vim

Время на прочтение5 мин
Количество просмотров28K
Читать дальше →
Всего голосов 82: ↑62 и ↓20+42
Комментарии19

(Перевод) Введение в разработку C++ в UE4

Время на прочтение11 мин
Количество просмотров178K
Часть 1. Введение. Создание класса и добавление свойств. Расширение класса С++ с помощью Blueprint.
Часть 2. Классы геймплея. Структуры. Отражение (reflection) в Unreal. Object/Actor итераторы. Менеджер памяти и сборщик мусора.
Часть 3. Префиксы в именах классов. Целочисленные типы. Типы контейнеров. Итераторы контейнеров. Цикл For-each, хеш-функции.
Часть 4. Бонусная. Unreal Engine 4 для Unity разработчиков.

image

Эта статья является переводом части документации по UE4. Оригинальную статью вы можете найти пройдя по это ссылке.
Далее
Всего голосов 44: ↑42 и ↓2+40
Комментарии8

Vim по полной: Введение

Время на прочтение5 мин
Количество просмотров70K
Привет, хабраюзер!

Вот уже второй год я активный пользователь и поклонник редактора Vim. За это время я прошел путь от двух команд в .vimrc, до файла в несколько килобайт и обратно. Я испробовал очень много плагинов, а так же активно писал собственные, и теперь это мой основной текстовый редактор для работы и отдыха.

В этой серии статей я решил поделиться собственными наработками и, возможно, показать, на что может быть способен этот редактор в руках программиста. Серия будет состоять из следующих частей:
  1. Введение (vim_lib)
  2. Менеджер плагинов без фатальных недостатков (vim_lib, vim_plugmanager)
  3. Уровень проекта и файловая система (vim_prj, nerdtree)
  4. Snippets и шаблоны файлов (UltiSnips, vim_template)
  5. Компиляция и выполнение чего угодно (vim-quickrun)
  6. Работа с Git (vim_git)
  7. Деплой (vim_deploy)
  8. Тестирование с помощью xUnit (vim_unittest)
  9. Библиотека, на которой все держится (vim_lib)
  10. Другие полезные плагины

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

Готов? Вперед под кат!
Всего голосов 52: ↑49 и ↓3+46
Комментарии86
1

Информация

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