Pull to refresh
192
0
Алексей Гришин @GRaAL

Разработчик широкого профиля

Send message

Моделирование базы данных в Neo4j

Reading time4 min
Views6K

Моделирование базы данных в графовых БД существенно отличается от реляционных. В этой статье я расскажу о best practices, тонкостях и нюансах моделирования данных в Neo4j.

Читать далее

Обработка исключений в Java в функциональном стиле

Reading time4 min
Views28K

В данной статье автор предоставит информацию о собственной библиотеке для обработки исключений (Exception) в функциональном стиле.

Предпосылки

В Java начиная с версии 8 появились новые возможности в виде функциональных интерфейсов и потоков (Stream API). Эти возможности позволяют писать код в новом функциональном стиле без явных циклов, временных переменных, условий ветвления и проч. Я уверен что этот стиль программирования станет со временем основным для большинства Java программистов.

Читать далее

Мой опыт использования LiteDB

Reading time8 min
Views12K

Недавно я искал систему хранения для моей программы. Она представляет собой desktop-приложение, которому нужно хранить множество объектов и осуществлять поиск текста в них. И я подумал: "Почему бы не попробовать что-то новое". Вместо SQL базы данных типа SqLite я мог бы использовать документную базу данных. Но мне хотелось бы, чтобы для неё не требовался отдельный сервер, чтобы она работала с простым файлом. Поиск в Интернет подобных систем для .NET приложений быстро вывел меня на LiteDB. Здесь я хочу поделиться тем, что я нашёл в процессе работы с этой базой данных.

Читать далее

Алматы — город, который захватили урбанисты (почти)

Reading time14 min
Views19K

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

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

Читать далее

JIT-компилятор Python в 300 строк

Reading time11 min
Views32K

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

Как оказалось, может, но с нюансами.

Читать далее

Искусственный интеллект в DOOM

Reading time11 min
Views40K

DOOM — прародитель шутеров от первого лица, определивший целое поколение игр 90-х. Хоть это и не первая игра такого рода, и даже не первая игра id Software, но именно она изменила индустрию. Проект до сих пор изучают не только из-за его известности, но и потому, что он достиг высот в условиях сильных технических ограничений, задолго до появления большинства современных инструментов и стандартов. Под катом перевод статьи о работе искусственного интеллекта в Doom и трюках, которые использовали разработчики для создания интересных боевых ситуаций.

Читать далее

Прокачиваем kotlin: используем AST лямбд в рантайме

Reading time18 min
Views3.8K

История о том, как сделать свой LINQ для kotlin, и как сделать так, чтобы кода вида

data.filter { it.age > 30}.map { it.name }.toList()

мог и выполняться для данных в памяти, и превращаться в SQL запрос для базы данных.

Читать далее

Ускоряем java-рефлексию в 2022

Level of difficultyMedium
Reading time11 min
Views12K

После прочтения заголовка у среднестатистического читателя наверняка возникнет весьма логичный вопрос: «Кто такая эта ваша рефлексия и зачем её ускорять?»

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

К текущему моменту рефлексия (и особенно рефлективные вызовы методов) так или иначе используется в прорве самых разных фреймворков, библиотек и просто любых приложениях, по какой-либо причине требующих динамические возможности.

Однако в java рефлексия реализована не самым быстрым (зато надёжным) методом, а именно, через использование JNI-вызовов. JNI (Java Native Interface) – очень полезная штука, позволяющая машине вызывать код из «внешнего мира», библиотек, написанных на C/C++ или ассемблере.

К сожалению, нельзя просто так взять и вызвать потенциально опасный бинарь, во-первых, потенциально несовместимый с внутренним миром машины, а во-вторых, способный без угрызений совести положить всё намертво лёгким взмахом segfault’а. Поэтому непосредственно моменту прямого вызова предшествует тонна инструкций, подготовляющих обе стороны к взаимодействию. Очевидно, не самый быстрый процесс.

Тем не менее, рефлексия работает именно так: машина «выходит наружу», копается в своих внутренностях и «возвращается обратно», доставляя пользователю полученную информацию или вызывая методы/конструкторы.

А теперь представьте примерное быстродействие какого-нибудь фреймворка, который в процессе работы постоянно осуществляет рефлективные вызовы…

Читать далее

Как написать калькулятор на HTML и CSS без JavaScript

Reading time5 min
Views32K

Материалом о разработке калькулятора на CSS и HTML, без файла JS, тега script и обработчиков событий в HTML делимся к старту курса по Fullstack-разработке на Python. За подробностями приглашаем под кат.

Читать далее

Программисты как дети

Reading time7 min
Views12K


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

Между делом она обозначила, что воспитательные приёмы – а детей мы тоже затронули (в целом – своих нет) – это не что иное как манипуляция. А раз так, то и со взрослыми есть некоторая градация допустимости «грязных трюков». 

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

Читать далее

Краткий обзор Казахстана и личные воспоминания

Reading time17 min
Views30K

Поскольку сейчас у многих стоит вопрос - а куда бы отправиться? - я могу немного рассказать о Казахстане, в котором мне довелось пожить и поработать. Заранее прошу простить, если я где-то буду субъективным, но что поделать - это не сухой пошаговый мануал, это еще и личный опыт. Также, что-то могло устареть. А лететь или не лететь - решать вам (наземные погранпереходы закрыты, если у вас нет уважительной причины, из-за ковида).

Алга

Инструкция для тех, кто решил что уже пора

Reading time10 min
Views183K

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

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

Опять же, я понимаю, что кто-то закончил языковую школу и при выступлении британской королевы подмечает стилистические ошибки ее английского, а кто-то консультировал Оракл при разработке HashMap и для них переезд — это вопрос желания, а не возможности. Но я говорю о неком "среднестатистическом случае", когда инглиш не флюент, а за плечами нет 10 лет опыта в аду.

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

Читать далее

Скриптинг без скриптинга

Reading time7 min
Views5.7K

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

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

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

Читать далее

Спорт не поможет вам похудеть. Как антрополог Герман Понцер развенчивает мифы о сжигании калорий

Reading time13 min
Views50K

Утром в среду Герман Понцер надевает помятый лабораторный халат и направляется в свою лабораторию в Университете Дьюка. Его студентка Кристина отдыхает на лабораторном столе, положив голову в прозрачный пластиковый колпак. Понцер приступает к проверенному временем методу повышения кровяного давления: он дает ей устный тест по математике.

«Начните с числа 1022 и вычитайте 13, пока не дойдете до нуля. Если вы сделаете ошибку, мы начнем сначала. Вы готовы?»

Студентка пробует и доходит до 997, пробует снова и доходит уже до 889. Это происходит снова и снова. Затем Понцер просит её вслух умножить 505 на 117. К этому моменту она сжимает пальцы ног в носках.

Еще два помощника следят за частотой её сердцебиения и количеством углекислого газа (CO2), который она выдыхает в вытяжку. Затем Понцер задает ряд вопросов, призванных повысить уровень стресса студентки: Какова работа её мечты, и что именно она собирается делать после окончания университета?

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

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

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

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

Приятного чтения!

Обзор языка функционального программирования Koka

Level of difficultyMedium
Reading time5 min
Views8.1K

Как-то заглянув на GitHub, обнаружил Koka — язык функционального программирования со статической типизацией. Koka разрабатывается с 2012 года Daan Leijen в Microsoft Research, USA. Его исходники выкладываются на GitHub под лицензией Apache 2.0. Как признаются его авторы, он ещё не готов для промышленного применения: у него нет библиотек, менеджера пакетов и полной поддержки в средах разработки. При этом сам язык достаточно стабилен, а компилятор полностью разработан. Отдельными моментами язык напоминает Rust, Haskell и Scala. Сам же по себе он интересен контролем побочных эффектов. Это его основная фишка. Приглашаю познакомиться с Koka и обсудить его свойства.


fun main(): console ()
  println("Hello, World!")

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

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

Unity «Best» Practices

Reading time11 min
Views28K

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

Что такое AssetPostprocessor и чем Animation отличается от Animator? Почему не стоит доверять OnTriggerExit и зачем вам CanvasGroup? Чем хорош GameObject.Find и как вас спасут Property?

Далее в статье обсудим это, а также другие «особенности» работы с движком Unity.

Читать далее

Подводные камни Zenject или тайный мир Unity GetComponent

Reading time5 min
Views18K

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

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

Под катом расскажу, как искали причину проблемы и какие выводы сделали.

Читать далее

Главный трансформер детства

Reading time5 min
Views14K

Всем привет, это Денис Вебер.

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

Как обычно, специально для тех, кому больше нравится формат видео, а не текст, видео я оставлю в конце статьи.

Читать далее

Основы Unity + Mirror

Reading time16 min
Views60K

UPD. Актуализировал на момент 26.11.2022.

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

Читать далее

Vange-rs: взгляд на реализацию WebAssembly в Rust

Reading time7 min
Views8.1K

Вангеры одна из самых почитаемых и технологичных игр своего времени, продолжает жить и развиваться. Благодаря сплоченному сообществу игра получила множество усовершенствований: HD, 60 FPS, новые сетевые режимы и много другое. Vange-rs один из интереснейших проектов по Вангерам. Это rust версия игры, основной изюминкой которой является 3D рендер основанный на wgpu.

Запустить в браузере

Information

Rating
Does not participate
Location
Алматы (Алма-Ата), Алма-Атинская обл., Казахстан
Registered
Activity

Specialization

Backend Developer, Software Architect
Lead
From 5,000 $