Рубрика «Программирование» - 254

Привет! Представляю вашему вниманию перевод статьи “Object-Oriented Programming in Python vs Java” автора Джона Финчера.

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

Подробнее – под катом.

Читать полностью »

Привет!

В этой публикации я расскажу о статье автора Jinmo Kim: "Maze Terrain Authoring System in Immersive Virtual Reality for New Visual Realism". Она была опубликована 4.04.2019. Полный текст статьи можно посмотреть здесь.

Краткое описание системы

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

Предложенная система генерации ландшафта лабиринта состоит из трех основных функций:

  • функция автоматической генерации сетки лабиринта различных размеров и узоров, реализованная с помощью классического алгоритма генерации лабиринта;
  • функция генерации кругового лабиринта;
  • функция преобразования лабиринта из ручного эскиза в 3D объект с помощью алгоритма обработки изображений.

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

Читать полностью »

Всем доброго дня! Думаю, статья будет интересна всем, кто пользуется Notion, но по какой-то причине не мог переехать на него полностью.

Предистория

Я разрабатываю свой проект. На лэндинге после ввода емейла выдается ссылка на соцопрос на базе Google Forms. Ответы записываются в табличечку на Google Drive.

Проблема в том, что все свое я ношу с собой сохраняю в Notion. Это банально удобней. Обходился ручным копипастом, пока отзывов было мало. Потом их стало больше — и надо было что-то придумать. Кому интересно, что вышло — добро пожаловать под кат.
Читать полностью »

Я именно тот 40+ летний синглстек, который упоминался в нашумевшей статье. Когда я вижу таск, где бэкендер упоминает dTo, к которому нужно написать обвязку на фронте… Я запланировано выхожу из себя. Во-первых, я хорошо работаю, когда злой. А тут такой случай. А во-вторых (и это главное), я не хочу знать, что такое ДэТэО, где оно лежит и как с ним работать. Мне нужен только путь, метод, параметры и набор ответа. В терминах HTTP/REST. Я не хочу лезть в код бэка. Я даже не хочу догадываться о том, что исходя из имени класса dTo, можно легко вычислить путь.

Это вопрос уважения. Я не лезу в кухню бэка. А когда сам ставлю задачу на бэк, то чётко расписываю интерфейс (опять же в терминах REST) и кратко описываю, зачем оно мне надо и как собираюсь использовать. Как это реализуют на бэке – это не моё дело, как я реализую работу фронта и где расставлю кнопки – не их.

Вы уже поняли, о чём пойдёт речь в статье? Так вот – немного не о том. Я работаю синглом. Но на самом деле, я мультистек. Притом работал и давал результат сеньором и тимлидом во фронте, бэке, фуллстеке, системном и даже бизнес-анализе. И рад, что у меня такой бэкграунд.

Что в нём хорошего, и как я до такого дошёл под катом.

Поехали.
Читать полностью »

Если вы не пишете программу, не используйте язык программирования - 1

Лесли Лэмпорт — автор основополагающих работ в распределённых вычислениях, а ещё вы его можете знать по буквам La в слове LaTeX — «Lamport TeX». Это он впервые, ещё в 1979 году, ввёл понятие последовательной согласованности, а его статья «How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs» получила премию Дейкстры (точней, в 2000 году премия называлась по-старому: «PODC Influential Paper Award»). Про него есть статья в Википедии, где можно добыть ещё несколько интересных ссылок. Если вы в восторге от решения задач на happens-before или проблемы византийских генералов (BFT), то должны понимать, что за всем этим стоит Лэмпорт.

Эта хабрастатья — перевод доклада Лесли на Heidelberg Laureate Forum в 2018 году. В докладе пойдёт речь о формальных методах, применяемых в разработке сложных и критичных систем вроде космического зонда Rosetta или движков Amazon Web Services. Просмотр этого доклада является обязательным для посещения сессии вопросов и ответов, которую проведет Лесли на конференции Hydra — эта хабрастатья может сэкономить вам час времени на просмотр видео. На этом вступление закончено, мы передаём слово автору.


Когда-то давно Тони Хоар написал: «В каждой большой программе живет маленькая программа, которая пытается выбраться наружу». Я бы это перефразировал так: «В каждой большой программе живет алгоритм, который пытается выбраться наружу». Не знаю, правда, согласится ли с такой интерпретацией Тони.

Читать полностью »

image

Пару месяцев назад мне наконец пришлось признать, что я недостаточно умён, чтобы пройти некоторые уровни головоломки Snakebird. Единственным способом вернуть себе часть самоуважения было написание солвера. Так я мог бы притвориться, что создать программу для решения головоломки — это почти то же самое, что и решить её самому. Код получившейся программы на C++ выложен на Github. Основная часть рассматриваемого в статье кода реализована в search.h и compress.h. В этом посте я в основном буду рассказывать об оптимизации поиска в ширину, который бы потребовал 50-100 ГБ памяти, чтобы он уместился в 4 ГБ.

Позже я напишу ещё один пост, в котором будет описана специфика игры. В этом посте вам нужно знать, что мне не удалось найти никаких хороших альтернатив грубому перебору (brute force), потому что ни один из привычных трюков не сработал. В игре множество состояний, потому что есть куча подвижных или толкаемых объектов, при этом важна форма некоторых из них, которая может меняться со временем. Не было никакой пригодной консервативной эвристики для алгоритмов наподобие A*, позволяющих сузить пространство поиска. Граф поиска был ориентированным и заданным неявно, поэтому одновременный поиск в прямом и обратном направлении оказался невозможным. Единственный ход мог изменить состояние множеством несвязанных друг с другом способов, поэтому не могло пригодиться ничего наподобие хеширования Зобриста.

Приблизительные подсчёты показали, что в самой большой головоломке после устранения всех симметричных положений будет порядка 10 миллиардов состояний. Даже после упаковки описания состояний с максимальной плотностью размер состояния составлял 8-10 байт. При 100 ГБ памяти задача оказалась бы тривиальной, но не для моей домашней машины с 16 ГБ памяти. А поскольку Chrome нужно из них 12 ГБ, мой настоящий запас памяти ближе к 4 ГБ. Всё, что будет превышать этот объём, придётся сохранять на диск (старый и ржавый винчестер).
Читать полностью »

Глобальные состояния: зачем и как их избегать - 1

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

Всё это может быть раздражающими последствиями глобалов: скрытых переменных, меняющих своё состояние в неизвестных местах, при причинам, которые вы ещё не выяснили.
Читать полностью »

Здравствуйте. Сегодня хотелось бы поговорить снова про статический анализ. И снова про C++. Только в отличие от PVS-Studio мы будем искать не какие-то ошибки в наших программах (хотя они ищут не только ошибки), а места, которые написаны недостаточно оптимально. И одним из таких мест является выбор контейнера для данных в программе. Если я вас заинтересовал, то добро пожаловать под кат!Читать полностью »

Здравствуйте. Хотелось бы затронуть тему по которой мне пишут 2-3 раза в неделю:

Как начать программировать, какой язык выучить?

Знаю, таких статей много, но я попробовал сделать что-то особенное. Скажу сразу, информация ниже будет для халявщиков. Я всегда рекомендовал и рекомендую купить курсы и учиться там. На курсах есть чёткая программа обучения, которая построена годами, и код ревью. А это очень важно для новичков. Тем не менее тут я посоветую много интересных книг, видео-курсов, дам советы в обучении, так что это, я надеюсь, будет полезно всем.
Читать полностью »

Конференция DEFCON 19. Три поколения DoS-атак (с участием аудитории в качестве жертв). Часть 1

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

Конференция DEFCON 19. Три поколения DoS-атак (с участием аудитории в качестве жертв). Часть 2 - 1

Я сделал так, что можно было увидеть всю сеть, все адреса этой сети страница за страницей. Этот список можно было сделать еще больше, так как в него добавлялось по 5 IP-адресов в секунду. Когда я запустил этот проект в первый раз, мне показалось, что ничего не происходит, так как моя Windows-машина вроде бы вообще не отреагировала на то, что случилось.

Студентам это было бы не интересно, потому что они ничему не научатся, если не смогут увидеть наносимые атакой повреждения. Я подумал «ок, это плохой проект, что же мне сделать?», но тут меня озарило – эта штука убивает контроллер домена, почтовый сервер и все такое, это очень плохо. Это настолько плохо, что я вообще не могу рассказать об этом своим ученикам, лучше я тихонько расскажу об этом Microsoft! Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js