Обновить
1024K+

Программирование *

Искусство создания компьютерных программ

1 129,23
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Магнасанти — самый большой и самый ужасный город SimCity

Время на прочтение5 мин
Охват и читатели47K


Похоже на набор разноцветных квадратиков без смысла и цели? На самом деле за этой картинкой — злой гений и множество формул.


Это вид на Магнасанти — мегаполис, создатель которого попытался достичь предела численности населения в игре SimCity.

Присмотримся поближе:



Винсент Оскала (Vincent Oscala), 22-летний студент из Филиппин и будущий архитектор, многие годы пытался найти формулу успеха в игре Sim City 3000.

Безумная, казалось бы, затея… однако благодаря огромным усилиям, вложенным в «борьбу» с SimCity, оказались подняты интересные вопросы о городских ландшафтах, в которых мы живем, и о том, в какой ужас они могут превратиться.



После скрупулезного планирования и большого количества проб и ошибок Винсенту удалось построить город с населением более шести миллионов человек.

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



Переведено в Alconost
Читать дальше →

AI, практический курс. Предисловие

Время на прочтение5 мин
Охват и читатели12K


Блог Intel начинает публикацию русского перевода большой серии статей со специализированного ресурса Intel AI Academy. Цель этой публикации — представить разнообразные подходы к искусственному интеллекту и различные способы его применения. Первый пост серии будет в некотором роде предисловием: здесь вы найдете вступительную часть от авторов курса, а также полный список статей на английском и (по мере публикации) на русском языках.

Надеемся, что наш курс окажется для вас полезным.
Читать дальше →

Справа налево. Что такое dir=rtl и как приручить арабский язык

Время на прочтение8 мин
Охват и читатели44K


Привет, Хабр. Мы недавно перевели на арабский язык 2ГИС Онлайн, и хотим поделиться своим опытом адаптации интерфейса под RTL (right-to-left). Это будет актуально и для иврита, и для персидского языка.


Я разделю этот опыт на две статьи — теоретическую и практическую. Сегодня — больше про теорию. Я расскажу, зачем нам понадобилось переворачивать весь интерфейс, что для разработчика интерфейсов значит фраза «сделать арабскую версию» и как справиться с арабским языком, смешанным с английским. Особое внимание уделю алгоритму, по которому строится отображение текста смешанной направленности — unicode bidirectional algorithm.

Дальше читать

Выпуск#21: ITренировка — актуальные вопросы и задачи от ведущих компаний

Время на прочтение5 мин
Охват и читатели10K
Подоспел очередной выпуск ITренировки — задач, предлагаемых на собеседования в ведущие IT-компании.

КДПВ

В подборку вошли задачи и вопросы от Facebook, которые задают желающим устроиться на должность разработчика. Традиционно, отобраны как простые задачи, так и не очень. Рекомендуем попробовать решить задачи самостоятельно, ссылку на оригинальные решения мы обычно добавляем в секцию ответов.
Читать дальше →

SAS BASE процедуры с непосредствнным контролем количества ядер процессора

Время на прочтение3 мин
Охват и читатели2.9K
Некоторые SAS процедуры имеют возможность непосредствнно контролировать количество ядер процессора.

Так например в SAS 9.3 это процедуры:

  • SORT
  • MEANS
Читать дальше →

Unity, ECS и все-все-все

Время на прочтение7 мин
Охват и читатели115K


Сколько уже было мануалов "Как сделать игру на Unity за 3 часа", "Делаем Counter-Strike за вечер" и т.п.? Низкий порог входа — это, несомненно, главный плюс и минус Unity. Действительно, можно накидать “ассетов”, дописать несколько простых “скриптов”, обмотать синей изолентой и это даже будет как-то работать. Но когда проект обрастает игровыми механиками, сложной логикой поведения, то проблемы при подобном подходе нарастают как снежный ком. Для внедрения новых механик требуется переписывание кода во многих местах, постоянная проверка и переделывание префабов из-за побившихся ссылок на компоненты логики, не говоря уже об оптимизации и тестировании всего этого. Разумеется, архитектуру можно продумать изначально, но на практике это всегда недостижимая цель — дизайн-документ довольно часто меняется, какие-то части выкидываются, добавляются абсолютно новые и никак не связанные со старой логикой поведения. Компоненты в Unity — это шаг в правильном направлении в виде декомпозиции кода на изолированные блоки, но особенности реализации не позволяют достичь необходимой гибкости, а самое главное, производительности. Разработчики придумывают свои фреймворки и велосипеды, но чаще всего останавливаются на ECS (Entity Component System). ECS – одно из решений, продолжающее идею компонентной модели Unity, но придающее ей ещё больше гибкости и сильно упрощающее рефакторинг и дальнейшее расширение приложения новым функционалом без кардинальных изменений в текущем коде.

Читать дальше →

Обмен информацией между рабочими нитям без боли? CSP-шные каналы нам в помощь

Время на прочтение21 мин
Охват и читатели6.4K
Разработка многопоточного кода — это сложное занятие. Действительно сложное. К счастью для упрощения жизни разработчиков давным-давно придуманы высокоуровневые абстракции, например, task-based parallelism, map-reduce/fork-join, CSP, actors и т.д.

Но когда попадаешь на профильные форумы, где общаются C++ники, то складывается ощущение, что многие просто не в курсе наличия чего-то более простого и удобного, чем std::thread в купе с std::mutex+std::condition_variable. Регулярно встречаются вопросы из категории: «Мне нужно запустить несколько рабочих потоков, в одном делается то-то, во втором то-то, а в третьем то-то. Я их запускаю вот так, а информацией между потоками обмениваюсь вот так. Правильно ли я делаю?»

Очевидно, что такие вопросы задают новички. Но, во-первых, количество неопытной молодежи в разработке софта всегда было велико, и с ростом привлекательности отрасли ИТ это количество только увеличивается. При этом печально, что новички знают про std::thread и std::mutex, но не знают про готовые инструменты, которые могли бы упростить им жизнь (вроде Intel TBB, HPX, QP/C++, Boost.Fiber, FastFlow, CAF, SObjectizer и т.д.).

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

Все это наводит на мысль о том, что имеет смысл на простых примерах показывать, как конкретный фреймворк может помочь в решении даже небольших и, казалось бы, несложных задач, связанных с многопоточностью. Поскольку мы развиваем SObjectizer как раз как инструмент для упрощения разработки многопоточных приложений на C++, то сегодня попробуем показать, как реализованные в SObjectizer-е CSP-шные каналы способны избавить разработчика от части головной боли при написании многопоточного кода.
Читать дальше →

Project Arena — вебинар для создателей серьезных VR-проектов

Время на прочтение1 мин
Охват и читатели1.4K


Вебинарами сейчас уже никого не удивишь, и мест, где поучиться, в интернете предостаточно. Однако даже среди такого изобилия бывают мероприятия, о которых хочется рассказать отдельно — и это анонс одного из них. С удовольствием сообщаем, что 16 мая состоится вебинар, посвященный Project Arena — широкомасштабному демонстрационному VR-проекту для обучения разработчиков.
Читать дальше →

Service Workers: прозрачное обновление кэша

Время на прочтение7 мин
Охват и читатели13K
Service Workes как технология для создания offline приложений очень хорошо подходит для кэширования различных ресурсов. Разнообразные тактики работы в сервис воркере с локальным кэшем подробно описаны в Интернете.

Не описано одного — каким образом обновлять файлы в кэше. Единственное, что предлагает Google и MDN, это делать несколько кэшей для разных типов ресурсов, и, когда нужно, изменять в скрипте сервис воркера sw.js версию этого кэша, после чего тот весь удалится.
Читать дальше →

Два акселерометра, губка для посуды и четыре гайки

Время на прочтение4 мин
Охват и читатели14K

Вводная: измерение угла маятника


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


19 мая приглашаем на Badoo Techleads Meetup #3

Время на прочтение4 мин
Охват и читатели4.8K


Привет, Хабр!

19 мая приглашаем на третий Badoo Techleads Meetup для лидов, руководителей отделов и СТО.

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

Регистрация здесь. Обратите внимание, что нужно подождать подтверждения участия. Количество мест в нашем кафе ограничено, и надеемся на ваше понимание! Мы также сделаем онлайн-трансляцию.

Адрес: Цветной бульвар, 2 (м.Трубная)
Начало докладов в 11:30
Трансляция будет на нашем YouTube-канале и в группах VK и FB. Записи опубликуем там же и на Хабре.

Программа


Читать дальше →

Пузырьковый вычислитель выражений: простейший синтаксический LR-анализатор вручную

Время на прочтение8 мин
Охват и читатели7.2K
Приветствую уважаемое сообщество.

Последнее время я уделял некоторое внимание теме синтаксического анализа (с целью в том числе улучшить собственные знания и навыки), и у меня создалось впечатление, что почти все курсы по компиляторам начинают с математических формализмов, и требуют сравнительно высокого уровня подготовки от изучающего. Либо там используется в большом количестве формальная математическая запись, как в классической Dragon Book, в которой, например, написано:



Это может с непривычки напугать. Нет, с какого-то момента формальная запись становится удобной и даже необходимой, но для “человека с улицы”, который хотел бы, чтобы ему “на пальцах” объяснили, “в чем тут дело”, это может быть сложно. А вопрос “что такое LL и LR — анализ, и в чем между ними разница” программисты задают довольно часто (потому что не все программисты имеют формальное образование в области Computer Science, как и я, и не все из них проходили там курс по компиляторам).

Мне более близок подход, когда сначала мы берем задачу, пытаемся ее решить, и в процессе решения сначала вырабатываем интуитивное понимание принципа, а потом уже для этого понимания создаем математические формализмы. Поэтому я на очень простом примере в этой статье хочу показать, какая идея лежит в основе восходящего синтаксического анализа (он же bottom-up parsing, он же LR). Будем вычислять арифметическое выражение, в котором для еще большего упрощения будем поддерживать только операторы сложения, умножения и скобки (чтобы не усложнять пример отрицательными числами и поддержкой унарного минуса).

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

Комментирование кода: хороший, плохой, злой

Время на прочтение4 мин
Охват и читатели44K


Вы наверняка это слышали: «Хороший код является самодокументированным».

Я больше 20 лет зарабатываю написанием кода, и слышал эту фразу чаще всего. Это клише.

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

Она истинна? Да.

Означает ли она, что вы никогда не должны комментировать код? Нет.

В этой статье мы рассмотрим разные аспекты комментирования кода.
Читать дальше →

Ближайшие события

Solidity 0.5.0 — что нового он нам несет

Время на прочтение6 мин
Охват и читатели6.1K

Update: 13.11.2018 вышел релиз, вот подробное описание изменений. В статье рассказывается про состояние этой версии в мае (за пять месяцев до релиза).


Хочу рассказать об изменениях языка Solidity, которые ожидаются в версии 0.5.0. Сразу отмечу, что я ограничусь только языком — его грамматикой и семантикой.


Какого-то вменяемого текста на эту тему нет даже на английском языке, но недавно в репозитории Solidity появился проект.
По нему можно отслеживать прогресс подготовки версии 0.5.0.


Disclaimer: в статье описано текущее состояние проекта, к релизу многое может поменяться. Точную информацию можно получить из официального changelog'a.

Читать дальше →

Логирование как способ отлаживать код

Время на прочтение4 мин
Охват и читатели52K
Почему так важно запретить самому себе отладку руками?

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

Поэтому вам надо будет несколько раз запускать этот код в отладочном режиме, проводя часы отладки над одним и тем же куском кода. И это только вы один столько времени потратили над этой частью программы. Каждый член команды, кому «посчастливится» работать с этим кодом, будет вынужден прожить ту же самую историю, которую прожили вы.

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

VPN за пиво?

Время на прочтение4 мин
Охват и читатели48K

VPN становится сегодня не просто актуальным, но часто и жизненно необходимым сервисом для пользователей рунета. Заблокированный LinkedIn, беспорядочная стрельба Роскомнадзора, возможная блокировка Фейсбука, Вайбера и других ежедневных приложений, сотни и тысячи уже заблокированных сайтов в сети, невозможность оставаться анонимным при использовании ВК, ОК, Mail.ru и прочих "подконтрольных" ресурсов, и множество иных причин. Все это заставляет рунетовцев задуматься о своем будущем в этом сегменте мировой сети.


У всех нас есть бабушки, дедушки, родители, а также знакомые гуманитарии, музыканты, домохозяйки и прочие замечательные, но навсегда далекие от "сложных" Интернет технологий люди. Да, конечно, Интернет полон туториалами и видео роликами, объясняющих "простой" процесс установки VPN клиента. Однако все это не решает главной задачи — ЗАСТАВИТЬ этих людей проделать непривычные и пугающие их действия и обзавестись, наконец-то, VPN защитой.

Читать дальше →

Курс MIT «Безопасность компьютерных систем». Лекция 1: «Вступление: модели угроз», часть 3

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

Массачусетский Технологический институт. Курс лекций #6.858. «Безопасность компьютерных систем». Николай Зельдович, Джеймс Микенс. 2014 год


Computer Systems Security — это курс о разработке и внедрении защищенных компьютерных систем. Лекции охватывают модели угроз, атаки, которые ставят под угрозу безопасность, и методы обеспечения безопасности на основе последних научных работ. Темы включают в себя безопасность операционной системы (ОС), возможности, управление потоками информации, языковую безопасность, сетевые протоколы, аппаратную защиту и безопасность в веб-приложениях.

Лекция 1: «Вступление: модели угроз» Часть 1 / Часть 2 / Часть 3

Курс MIT «Безопасность компьютерных систем». Лекция 1: «Вступление: модели угроз», часть 2

Время на прочтение14 мин
Охват и читатели32K

Массачусетский Технологический институт. Курс лекций #6.858. «Безопасность компьютерных систем». Николай Зельдович, Джеймс Микенс. 2014 год


Computer Systems Security — это курс о разработке и внедрении защищенных компьютерных систем. Лекции охватывают модели угроз, атаки, которые ставят под угрозу безопасность, и методы обеспечения безопасности на основе последних научных работ. Темы включают в себя безопасность операционной системы (ОС), возможности, управление потоками информации, языковую безопасность, сетевые протоколы, аппаратную защиту и безопасность в веб-приложениях.

Лекция 1: «Вступление: модели угроз» Часть 1 / Часть 2 / Часть 3

Курс MIT «Безопасность компьютерных систем». Лекция 1: «Вступление: модели угроз», часть 1

Время на прочтение15 мин
Охват и читатели150K

Массачусетский Технологический институт. Курс лекций #6.858. «Безопасность компьютерных систем». Николай Зельдович, Джеймс Микенс. 2014 год


Computer Systems Security — это курс о разработке и внедрении защищенных компьютерных систем. Лекции охватывают модели угроз, атаки, которые ставят под угрозу безопасность, и методы обеспечения безопасности на основе последних научных работ. Темы включают в себя безопасность операционной системы (ОС), возможности, управление потоками информации, языковую безопасность, сетевые протоколы, аппаратную защиту и безопасность в веб-приложениях.

Лекция 1: «Вступление: модели угроз» Часть 1 / Часть 2 / Часть 3

Экскурсия по PyTorch

Время на прочтение17 мин
Охват и читатели59K
Привет, Хабр!

Еще до конца мая у нас выйдет перевод книги Франсуа Шолле "Глубокое обучение на Python" (примеры с использованием библиотек Keras и Tensorflow). Не пропустите!



Но мы, естественно, смотрим в надвигающееся будущее и начинаем присматриваться к еще более инновационной библиотеке PyTorch. Сегодня вашему вниманию предлагается перевод статьи Питера Голдсборо, готового устроить вам долгую прогулку ознакомительную экскурсию по этой библиотеке. Под катом много и интересно.
Читать дальше →