• Не очередной язык программирования. Часть 1: Логика предметной области
    0

    NitroJunkie, я понимаю о чем вы говорите и уточню вопрос еще немного.


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


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

  • Не очередной язык программирования. Часть 1: Логика предметной области
    0

    NitroJunkie, с Repeatable Read понятно, у меня вопрос немного другой. Допустим в модели есть свойство Name и два пользователя одновременно изменяют это поле. Пример урощенный, это могут быть и списки и еще что-то. В большинстве систем первому удастся сохранить, а вот второй пользователь получит ошибку, мол данные обновились, оптимистик лок. Я проверил у вас на демо и похоже всегда побеждает последний, каких-либо предупреждений при этом не выводится и возникает ситуация когда чужие изменения могут быть затерты непреднамерено.


    В связи с этим второй вопрос как работает сохранение, сохраняется дельта или вся запись обновляется или еще более сложный вариант?


    И еще вопрос, как работают более сложные процессы, где откат и повтор транзакций слишком дорогой, например, при обновлении большого числа записей?

  • Выпущен «шрифт для разработчиков» JetBrains Mono
    0

    Пользуюсь Fira Code, а этот шрифт тяжеловато читать, имхо.

  • Не очередной язык программирования. Часть 1: Логика предметной области
    0

    NitroJunkie, назрел один вопрос, каким образом обеспечивается целостность данных при одновременном редактировании? Демо система работает по принципу побеждает последний.

  • Скандал на конкурсе Kaggle: победитель сжульничал, алгоритм плохо оценивает шанс бездомных животных найти хозяев
    +4

    Помню смотрел выступление Pavel Pleskov, где он рассказывал как стать Kaggle мастером, и на тебе — клеймо читера.

  • Исследуем записи в Java 14
    +2

    Каждое нововведение в джаве вызывает смешанные чувства, одновременно и хорошие и плохие.


    Что такое Record? Скорее всего это просто класс со всем его поведением, но вводится новое ключевое слово record и теперь у нас есть и class и record, но пишем мы point.getClass()… Разве не лучше было бы record class хотя бы? Когда-нибудь дойдет до структур и получим class, record и struct, угадай что тебе надо.


    Хороший вопрос про геттеры и сеттеры, да и многие примеры вызывают один и тот же вопрос, почему сделан такой выбор?

  • Обзор ONYX BOOX Max 3: ридер с максимальным экраном
    0

    Да, Onyx 13'' стоит очень дорого, трудно обосновать такие траты кому-то кто не в теме)
    Есть однако громадный плюс, а именно чтение pdf книг/статей без мучений, это перекрывает большую часть недостатков, основные из которых это цена и несовершенство ПО. Ипользовать такую книгу как монитор можно только в каких-то очень узких сценариях, изображение не очень контрастное и довольно большая задержка.

  • 23 минуты. Оправдание тугодумов
    0

    Просматривается влияние Канемана.

  • Мой новый стек веб-технологий для 2020 года
    +2

    Это рекламная статья, сервер этот тут https://rwserve.readwritetools.com/, но качать его стремновато.

  • Компания GitLab из-за политики прекращает набор инженеров из России и Китая
    +2

    Это тоже обсуждалось, у клиентов из других стран могут возникнуть требования недопускать сотрудников из США, что в этом случае нужно будет сделать?

  • Компания GitLab из-за политики прекращает набор инженеров из России и Китая
    +2

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


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

  • Компания GitLab из-за политики прекращает набор инженеров из России и Китая
    +18

    Формулировка со страной проживания фактически ни чем не лучше, ведь в основной своей массе на территории РФ проживают граждане РФ и русские по национальности и так далее.


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


    Аргумент с давлением на сотрудников не выдерживает критики, надавить на человека можно самыми различными способами в любой стране.

  • Компания GitLab из-за политики прекращает набор инженеров из России и Китая
    +52

    Как у них в голове одновременно умещаются толерантность, демократия и такая вот дискриминация по стране проживания/национальности?

  • Десятиклассник из Екатеринбурга запомнил 13 202 знака числа Пи после запятой и воспроизвел их на досках за 380 минут
    0

    Джонни Мнемоник :)

  • Что не так с Яндекс.Музыкой? UX/UI разбор
    0

    Да интерфейс ужасен, скачущие панели, кнопки play где-попало, шаффл в мобиле и прочая дичь.

  • «WARNING: sanitizing HTML stripped some content» и как с ним правильно бороться
    0

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

  • Долгожданный View Binding в Android
    +1

    Лучше поздно, чем никогда.

  • Рецепты TeamCity. Доклад Яндекс.Такси
    0

    Подскажите, как можно узнать uuid уже существующих обьектов?

  • Новшества JavaScript: итоги Google I/O 2019. Часть 1
    0

    Скорее это желание лучше минифицировать и обфусцировать)

  • Свой mapper или немного про ExpressionTrees
    0

    Автомапер, как мне кажется, сложнее внутри, а так идея одна и та же. Следущий шаг — генерация байткода, но это потребует куда больших усилий.

  • Синхронизация клиентских запросов в Spring
    0

    Надо сделать ClientId праймари ключом, тогда достаточно селекта + insert (или find + saveorupdate), в случае constraint violation — просто вернуть аргументы процедуры, т.к. сущность уже создана. Второй вариант — дописать ON CONFLICT/ON DUPLICATE KEY/IGNORE или подобное прямо в процедуре.


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


    Не знаю как там дальше используется ClientId, но нужен ли он вообще как отдельная сущность?

  • Java vs Kotlin для Android: мнения разработчиков
    0

    Проблема еще и в том, что расстояние между котлином джавой не постоянная величина. Да джава неспешно развивалась до последнего времени, что и заставляет с интересом смотреть на котлин, но если подумать, стоит ли брать новый язык ради 5-10 фич?

  • Приложения для электронных книг на операционной системе Android. Часть 1. Вступление и офисные приложения
    0

    Установить гугл сервисы на boox можно, но надо регистрировать устройство вручную, иначе они откажутся работать.

  • Обзор докладов Java-трека c конференции RigaDevDays
    0

    Видео по modularity недоступно.

  • Некоторые аспекты оптимизации LINQ-запросов в C#.NET для MS SQL Server
    0

    Дискуссия в целом оставила неприятное впечатление, но это лично мое мнение.


    EF сделал все правильно, CROSS JOIN с условием (что тоже самое что и INNER JOIN ON, от перемещения условия в ON суть не меняется, на плане видно) максимально точно соответствует тому, что написано в LINQ, дальше ожидается что БД сделает все, что посчитает нужным.


    В случае с AND условием сервер использует Index Seek по таблице Ref, что логично, так как одна из колонок — PK, а в случае с OR — переключается на Index Scan, то есть прямой перебор. Seek гораздо быстрее, чем прямой перебор, вот и результат.


    Поставьте себя на место БД, вам надо найти совпадения в двух таблицах (пусть даже первую 1000), хотя бы по одной колонке из двух, как можно это ускорить (и не замедлить), в каком порядке перебирать?


    Предлагается делать union, который возвращает назад Index Seek, но нет гарантии, что с другим распределением данных или значением TOP все еще будет лучше, а еще к такому запросу уже не просто будет что-либо добавить.


    Можно поменять ведущую таблицу джоина через FORCE ORDER, можно переписать запрос так, чтобы вместо одного cross джоина было два left с доп условием и индексом, но опять же придется изучить вопрос оптимальности в случаях если данные распределены по-другому или top имеет другое значение.


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

  • Прекратите использовать Ngrx/effects для этого
    0

    Мне кажется проблема даже не в том что нельзя что-то получить из контекста, это всегда можно решить расширяя стейт, проблема в том, что писать сколько-нибудь сложную логику/бизнеслогику на rxjs это самоубийство, и даже если не убились с первого раза, то со второго точно получится.

  • Вышел GitLab 11.8 с поддержкой JavaScript в SAST, подгрупп в Pages и функцией отслеживания ошибок
    0

    Нет, это проблема маттермоста, он не может нормально рестартануть, тикет #4090.

  • Быстрая генерализация маркеров на WebGL-карте
    0

    Скорость работы в Edge вас наверняка удивит )

  • Вышел GitLab 11.8 с поддержкой JavaScript в SAST, подгрупп в Pages и функцией отслеживания ошибок
    0

    Пробовал обновится, но маттермост сервер не запустился после апгрейда, nginx пишет 502. Пока не разбирался, первый раз такое.

  • Как размер кода зависит от минификатора, сборщика и языка. Неожиданное обновление webpack
    +1

    Для ангуляра есть еще вариант ngc + closure compiler, причем если в коде не будет левых зависимостей можно включить advanced оптимизации. Интересно какой будет результат.

  • Как геокодировать миллион точек на Spark по-быстрому?
    0

    Не совсем понял, что мешает залить в базу тот же OpenStreetMap, придется конечно немного поразбиратся, куда без этого. Сейчас многие БД предоставляют возможности работать с гео данными, даже SQLite можно поднять в памяти с соотв. расширением. Вопрос сводится к следующему, будет ли реализация реверс геокодинга на хадупе/спарке, быстрее/проще/лучше, чем аналогичная (и уже готовая) реализация в одной из таких БД? Причем сама БД статическая, скопировал на вторую машину запустил и получил гарантированный х2 перформанс.

  • Как геокодировать миллион точек на Spark по-быстрому?
    +1

    ArcGIS судя по всему просто использует модуль PostGIS, т.е. можно было бы просто загнать данные карт в локальный постгрес и потом выбирать напрямую из него по координатам с помощью ST_Intersects, ST_CoveredBy, ST_Within и тд. Эта схема относительно легко масштабируется.

  • Получаем данные enum в проекции Automapper
    +2

    Я имел ввиду, что может быть маппить и не нужно это поле вообще, а в месте использования просто использовать экстеншен метод: myLabel.Text = foo.Enum.ToDisplayName(). По скорости это будет не хуже (если использовать кэш имен), по удобству — терпимо.

  • Получаем данные enum в проекции Automapper
    0

    Неплохой вариант, но с другой стороны возникает вопрос, не лучше ли написать экстеншен метод т.е. foo.Enum.ToDisplayName()?

  • Цена TypeScript
    0

    Один из насущных примеров это генераторы.

  • Разнообразие браузеров начинается с нас
    0

    Вы как-то буквально восприняли мой комментарий, конечно, они этого не хотели, но получилось так, как получилось.

  • Разнообразие браузеров начинается с нас
    0

    Мозилла своими руками все испортила, было доверие пользователей, неограниченные возможности кастомизации. Потом браузер начал тормозить, жрать память гигабайтами (причем тормоза были на любом железе), фризы при открытии вкладок… Постепенно поубивали все расширения и темы. Терпеть уже не было возможно, перешел на новую Оперу. На Лисе я просидел наверное больше 10 лет.

  • Идёт мобильный разработчик по лесу, видит — Котлин горит. Сел в Котлин и сгорел
    +1

    Есть интересная статья (и единственная за тоннами хайпа) — Kotlin vs Java The Whole Story. Там сделана попытка обьективно оценить целесообразность перехода на Котлин.

  • Делаем WX-Mouse в корпусе Nova Slider 600
    0

    Салют! Вижу дело живет. В чем отличие WX от прошлых мышей? Теперь сенсор пиксаровский?

  • TypeScript: Десериализация JSON в классы с валидацией типов у свойств
    +1

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


    Сейчас есть интересная альтернатива — TypeScript Custom Transformers, что позволяет делать кодогенерацию во время компиляции, еще не все сделано, но уже можно пробовать. По идее можно будет обойтись без кучи декораторов. Еще один способ — кодогенерация по моделям бэкенда или свагеру.