Pull to refresh
57
0
Кремнев Валерий @LonelyDeveloper97

Математика, Нейробиология, Программирование

Send message

Kotlin Null-Safety vs ClassLoader

Reading time 7 min
Views 4.1K

Недавно я проходил собеседование и одним из вопросов, стал такой загадочный экземпляр:
"А какое главное преимущество системы типов Kotlin перед Java"?

Честно говоря, выделить какое преимущество считалось главным, оказалось неразрешимой для меня задачей: Nothing, отсутсвие Wildcard и First-Class Functions вместо Java-костыля с Functional Interface (имеется ввиду 8я версия Java) не заняли первых мест в личном топе интервьюера, который мне предложили угадать.

Оказалось что главное в Kotlin - возможность обьявить Nullable Type и Null Safety подход (Замечу, что по моему опыту собственные или библиотечные Optional или Maybe решают эту проблему, и пишутся за 10 минут на Java 7. А еще есть аннотации Nullable, позволяющие проверять поля в сompile-time. Короче, есть много способов заставить делать Null проверки в plain Java. Ну да ладно).

Но речь пойдет не о странных вопросах, связанных со вкусовыми предпочтениями интервьюеров относительно синтаксического сахара.
Дело в том, что Null Safety в Kotlin можно сломать, притом не выходя из под его безопасного купола в суровый дикий мир Java и Null-Referrences.

Как?

Long story short: ClassLoader ведет себя интересным образом при попытке загрузить статические поля классов рекурсивно ссылающиеся на классы друг-друга.

Под катом примеры кода и подробное объяснение того, как он обманывает проверки на Nullable. Я искренне надеюсь что специфические знания Java/Kotlin для статьи не нужны - я объясню все детали на ходу, и уложу расследование в 10 минут.

Начнем.
Total votes 12: ↑11 and ↓1 +10
Comments 11

Все же слипнется: Влияние SARS-CoV-2 на нервные ткани

Reading time 5 min
Views 47K

TL;DR: Спайковый белок ковида (S spike) вызывает структурные изменения в нервных тканях - нейрончики слипаются между собой и с глиальными клектами и перестают работать. Да, запахи скорее всего отбивает по этой причине. Да, это тот белок который используют вакцины. Нет, все не так страшно, вакцинированный username - извилины не слиплись от привки (по крайней мере не все).

Prooflink на bioRxiv (Препринт от первого сентября - cutting edge текущих исследований).

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

Читать далее
Total votes 131: ↑125 and ↓6 +119
Comments 201

Манифесты и карго-культы

Reading time 3 min
Views 1.9K
За пять лет в коммерческой разработке у меня накопился ряд претензий к манифестам. И я решил, что будет забавно сделать манифест на эту тему. Представляю вам:

Манифест про манифесты


  • В манифестах пишут очевидные вещи. Это одна из них.
  • Предыдущий пункт — шутка про рекурсию.
  • Прежде чем пользоваться советом из чужого манифеста, найди доказательства, что совет работает.
  • Это касается и предыдущего пункта.
  • Если в манифесте написано что-то правильное, это не означает что все пункты правильны.
  • Если вы нашли в манифесте ошибку — он бесполезен.
  • Предыдущий пункт — пример ошибки.
  • Манифесты склонны становиться карго-культом.
  • Добавьте по 1 очку культиста, за каждый непонятный вам пункт. Включая предыдущий и этот.
  • Этот манифест подписали: Боб Мартин, Линус Товальдс и Дональд Кнут.
  • Конечно, нет. Но если бы от этого манифест стал для вас более ценным, добавьте себе еще 2 очка культиста.
  • Добавьте еще 5 очков.
  • Если вы склонны объяснять вещи с конца и вас злит, что они не очевидны другим.
  • Если вы не вели хотя-бы приблизительный подсчет очков, еще 3 очка штрафа.
  • Посчитайте очки и сделайте выводы.

Готовил его специально к 1 апреля. А теперь, хочу пригласить вас обсудить манифесты.
Читать дальше →
Total votes 15: ↑14 and ↓1 +13
Comments 7

Почему в мозгах есть баги?

Reading time 14 min
Views 7.6K
Когда мы используем любую программу, у нас есть две причины для получения неправильных результатов:

  • Неправильные/недостаточные входные данные. Если на входе программа получает бред, на выходе мы тоже получим бред, даже если внутри все отработало идеально. Такой концепт называется Garbage In, Garbage Out. Исправить это мы не сможем — проблема не в программе.
  • Из правильных данных мы получили неправильный ответ. Тогда мы считаем, в программе есть баг и пытаемся его чинить.

Тоже самое можно сказать и про нас.

Иногда необходимая информация — отсутствует и мы не можем предотвратить ошибку.
Например, мы даем оценку времени на решение какого-то списка задач. В процессе оказывается, что список должен был быть в 3 раза больше. Ожидаемо, что наша первая оценка будет ошибочна. От нас здесь ничего не зависело. Garbage In — Garbage Out.

Но если мы уже 20 раз подряд наблюдали как количество задач вырастает в 3 раза от начального, странно предполагать, что на 21-й раз все пойдет как по маслу.

Если бы моя программа 20 раз подряд выдала результат, который не совпал с реальностью, я бы предположил, что с ней что-то не так. Зачем она мне, если при ее использовании я все равно получаю неверный ответ? Она должна учитывать факт, что количество задач может вырасти. Ее надо починить и адаптировать к таким условиям работы.

Когда я наблюдаю такую ошибку за собой — я делаю тот же вывод.

Ситуация, описанная выше — называется «Ошибкой планирования». Она — один из пунктов большого списка «Когнитивных искажений». На эту тему много статей, книг, ресурсов — но ни один из них не ответил на мой простой вопрос: «Откуда ошибки берутся и как лучше их исправлять?». Что не так с мозгом, что он предсказуемо выдает неверные результаты? Как накатить на это патч? Если так нельзя, то где подпирать костылями?

Я начал изучать основные принципы работы мозга, чтобы выяснить на каком этапе возникают ошибки, чем они обусловлены и как лучше их чинить.
Читать дальше →
Total votes 14: ↑12 and ↓2 +10
Comments 20

Проблема

Reading time 6 min
Views 4.7K
У вас бывает ощущение нерешенной проблемы? Такое странное, как будто ментальный зуд. Не дает думать о чем-то другом. Не дает уснуть. Постоянно отвлекает.

Моей проблемой стало непонимание причины, по которой эти ощущения возникают.

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

А ведь узнав, как мозг работает с проблемами, можно кардинально улучшить свои Problem-Solving Skills. Оптимизировать процесс решения. Понять почему мы иногда ошибаемся.

Кажется, это стоит того, чтобы попытаться разобрать мозг и из собрать детали обратно в небольшую математическую модель. Попробуем?
Читать дальше →
Total votes 8: ↑7 and ↓1 +6
Comments 34

Памятка по работе с СИЗ

Reading time 5 min
Views 7.7K
image
КДПВ взята с Safety poster

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

Но при работе с ними важно помнить одну вещь: неправильное использование СИЗ иногда хуже, чем их отсутствие.

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

Я человек рассеянный и забывчивый, поэтому решил для надежности сделать себе памятку. А поскольку не нашел ее аналога на Хабре — выкладываю.
Читать дальше →
Total votes 19: ↑16 and ↓3 +13
Comments 6

[COVID-19] Ваша задача — сгладить пик

Reading time 3 min
Views 24K
Месяц назад я обновил комплекты фильтров для полумасок. Две недели назад я покупал продукты питания долгого хранения. В это же время я начал составлять аптечку и брать необходимые мне лекарства.

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

Почему это важно? Попробую рассказать за пару минут.
Читать дальше →
Total votes 47: ↑34 and ↓13 +21
Comments 117

Нейроны и их моделирование

Reading time 4 min
Views 10K
Недавно я написал статью про то, как работает память в мозгу. Несколько комментариев говорили о том, что я недостаточно раскрыл тему особенностей биологического нейрона. И я решил исправить свою ошибку.

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

Начинаем мы вот с этой простой картинки:

image
Читать дальше →
Total votes 14: ↑14 and ↓0 +14
Comments 53

Реверс-инжиниринг мозга. Память

Reading time 13 min
Views 20K
image

Мозг — мой давний сосед. Учитывая то, сколько времени мы провели, и сколько нам еще предстоит быть вместе, не интересоваться им — полнейшая бестактность.

Ходишь с черным ящиком внутри черепной коробки, и этот ящик понимает, что он сам себе дает такое описание. Это же очень любопытно. Если бы мне дали железку с такими возможностями, я бы все свободное время убил на то, чтобы понять, как она работает. Собственно, я и убиваю. Объект исследования всегда при мне — очень удобно. Жаль только, внутри покопаться нельзя.

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

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

А что гадать? Давайте просто попробуем.
Читать дальше →
Total votes 24: ↑24 and ↓0 +24
Comments 58

Игра в собеседование: Стратегии найма. Часть I

Reading time 8 min
Views 6.5K
Частные проекты, стартапы, не IT фирмы, которым понадобился специалист, продуктовые компании и аутсорсеры, IT-гиганты с многотысячным штатом и небольшие компании с десятками/сотнями сотрудников. Когда вы выходите на поиск вакансии — глаза разбегаются от количества предложений.

У каждого из них будет свой процесс найма. Странно сравнивать Петю, скопившего 200 штук на свой сайт для продвижения маленького бизнеса и не имеющего никакого опыта в IT и Василия — директора департамента в котором насчитывается 2000 сотрудников, с астрономическим с точки зрения обывателя бюджетом, решающего проблему текучки кадров. Это уже не 2 разных набора начальных условий — это разные игры.

Как будет выглядеть собеседование каждого типа? К чему готовиться мне, как кандидату?

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

Disclaimer
Все персонажи вымышлены, любое совпадение с реальностью — задумано изначально, любая ошибка или неточность — следствие ограниченных способностей к анализу и отсутствия информации. Поехали.
Читать дальше →
Total votes 10: ↑9 and ↓1 +8
Comments 4

Игра в собеседование

Reading time 10 min
Views 22K
Пару недель назад я случайно открыл резюме всему интернету и прошел пару собеседований. Это навело меня на мысли о процессе отбора в целом.

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

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

Держа в голове все вышесказанное, я начал анализировать процесс отбора кандидатов с обеих сторон. У меня в запасе был небольшой курс по теории игр, щепотка матстатистики и здравый смысл. А результаты — под катом.
Читать дальше →
Total votes 32: ↑29 and ↓3 +26
Comments 20

Простое объяснение простоты. Глава 1: Теоретически просто

Reading time 27 min
Views 10K

Простое объяснение простоты


image
КДПВ с областями, которые нам придется посетить, чтобы ответить на ГЛАВНЫЙ вопрос.

Предисловие


Я часто слышал совет: сделай проще.

А что значит простой? Когда мы говорим, что объект X — простой, каковы наши ожидания от X? Когда мы говорим, что какая-то вещь проще чем другая — как мы это оцениваем?

Что проще:
“Небольшое предложение из пяти слов” или слово “Дезоксирибонуклеиновый”?
“6*5” или “481”?

Или так:
У вас есть экран настроек. Пять пунктов из них относятся к графике, другие пять к уведомлениям. Надо ли вам создавать отдельные пункты «графика» и «уведомления» в основном меню? Или оставить все 10 пунктов на одном экране? Что будет проще для пользователя?
Читать дальше →
Total votes 23: ↑19 and ↓4 +15
Comments 55

Особенности программного ProxyChanging'а в Android. Часть 1: от Jelly Bean до Lollipop

Reading time 23 min
Views 5.2K
Как-то раз, для собственного удобства, мне захотелось написать приложение, которое меняет настройки прокси в конфигурации сетей Wifi для Android. Задача, как мне тогда показалось, была на раз плюнуть, однако, на деле, как всегда, возникли непредвиденные сложности.



Если вы считаете полезным в будущем знать решение, хотите почерпнуть что-то для себя или в вас просто проснулось любопытство — добро пожаловать под кат. Там вас ждет внутреннее устройство классов отвечающих за конфигурацию Wifi в различных версиях Android, небольшая чашечка кода на Java и щепотка Reflection.
Читать дальше →
Total votes 12: ↑12 and ↓0 +12
Comments 6

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity