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

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

Send message

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

Reading time4 min
Views5.6K

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

Читать далее
Total votes 8: ↑7 and ↓1+9
Comments5

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

Reading time4 min
Views26K

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

Предпосылки

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

Читать далее
Total votes 33: ↑30 and ↓3+34
Comments32

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

Reading time8 min
Views11K

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

Читать далее
Total votes 8: ↑7 and ↓1+7
Comments23

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

Reading time14 min
Views18K

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

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

Читать далее
Total votes 27: ↑26 and ↓1+34
Comments43

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

Reading time11 min
Views30K

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

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

Читать далее
Total votes 110: ↑109 and ↓1+136
Comments37

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

Reading time11 min
Views39K

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

Читать далее
Total votes 98: ↑96 and ↓2+118
Comments23

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

Reading time18 min
Views3.5K

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

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

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

Читать далее
Total votes 17: ↑17 and ↓0+17
Comments4

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

Level of difficultyMedium
Reading time11 min
Views12K

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

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

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

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

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

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

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

Читать далее
Total votes 13: ↑12 and ↓1+13
Comments22

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

Reading time5 min
Views31K

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

Читать далее
Total votes 29: ↑25 and ↓4+25
Comments9

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

Reading time7 min
Views12K


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

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

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

Читать далее
Total votes 22: ↑18 and ↓4+20
Comments39

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

Reading time17 min
Views30K

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

Алга
Total votes 43: ↑39 and ↓4+47
Comments47

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

Reading time10 min
Views183K

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

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

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

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

Читать далее
Total votes 154: ↑131 and ↓23+146
Comments440

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

Reading time7 min
Views5.7K

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

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

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

Читать далее
Total votes 10: ↑7 and ↓3+5
Comments12

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

Reading time13 min
Views49K

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

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

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

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

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

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

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

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

Приятного чтения!
Total votes 73: ↑59 and ↓14+65
Comments236

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

Reading time5 min
Views7.8K

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


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

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

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

Unity «Best» Practices

Reading time11 min
Views27K

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

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

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

Читать далее
Total votes 33: ↑31 and ↓2+36
Comments12

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

Reading time5 min
Views17K

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

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

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

Читать далее
Total votes 19: ↑19 and ↓0+19
Comments20

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

Reading time5 min
Views14K

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

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

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

Читать далее
Total votes 25: ↑19 and ↓6+20
Comments32

Основы Unity + Mirror

Reading time16 min
Views52K

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

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

Читать далее
Total votes 17: ↑17 and ↓0+17
Comments5

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

Reading time7 min
Views8K

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

Запустить в браузере
Total votes 25: ↑24 and ↓1+32
Comments14

Information

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

Specialization

Backend Developer, Software Architect
Lead
From 5,000 $