Задать вопрос
  • Возможно ли использовать push уведомления без Firebase на Android?

    402d
    @402d
    начинал с бейсика на УКНЦ в 1988
    Все альтернативы системным мгновенным сообщениям (пушам через фаербейс) сводятся к периодическому опросу сервера или открытому вебсокет соединению. А значит ваше приложение должно держать постоянно работающую фоновую службу. А вот с этим все становиться от версии андроида все хуже и хуже. 12,13,14 последовательно закручивают гайки.
    Я не знаю как пройти модерацию плея в текущий момент.
    Ваш манифест
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
        <service
            android:name=".MyService"
            android:foregroundServiceType="вот тут нужно указать тип"
            android:exported="false">
        </service>

    https://developer.android.com/develop/background-w...
    можно ли на вашу задачу притянуть dataSync,remoteMessaging ? Не уверен.
    Вариант specialUse требует потом еще заполнять анкету в личном кабинете разработчика.

    В общем в любом случае есть риск reject'а (отклонения модерацией) приложения
    Ответ написан
    Комментировать
  • Как избавиться от ошибки "Argument of type 'xxx | yyy' is not assignable to parameter of type 'never'"?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Если хочется написать обобщенный код, то не надо себя сдерживать! Просто напиши обобщенный код.

    type TGen<T> = {
        parse: (s: string) => T;
        stringify: (value: T) => string;
    }
    
    function f<T>(p: TGen<T>) {
        return p.stringify(p.parse('a'));
    }
    Ответ написан
    Комментировать
  • Непонятное поведение своей интерпретации функции Promise.race, почему так происходит?

    Alexandroppolus
    @Alexandroppolus
    кодир
    строка
    promise.then(onFullfiled).catch(onRejected);
    на самом деле работает как
    promise.then(onFullfiled, err => {throw err;}).then(v => v, onRejected);

    Если имеем дело с зарезолвленным/зареджекченным промисом, то здесь первый then ставит микротаск в очередь сразу, а второй - только по выполнении микротаска от первого.

    соответственно, для примера
    const promises = [
      Promise.reject('rejected1'),
      Promise.reject('rejected2'),
      Promise.resolve('resolved'),
    ];


    микротаски составили такую очередь:
    1) err => {throw err;}
    2) err => {throw err;}
    3) onFullfiled
    4) onRejected,
    5) onRejected
    6) v => v,


    Где пункты 1-3 добавились на цикле, а 4-6 по мере выполнения первых трёх.

    вот так и вышло, что onFullfiled вылез вперед.
    Ответ написан
    1 комментарий
  • Пожалуйста оцените стоимость доработки расширения для google chrome?

    yesbro
    @yesbro
    Думаю, помогаю думать
    Обратиться на сайт фриланса. Там дадут оценку.

    Просить оценку у человека, который не будет заниматься разработкой, нет смысла.
    Ответ написан
    Комментировать
  • Promise executor, почему нельзя уловить ошибку внутри executor с помощью try-catch?

    kosuha
    @kosuha Автор вопроса
    js | web
    А я кажется и сам понял что throw Error - равносильно вызову reject и это уже идет через очередь промисов

    Значит executor обернут в try-catch внутри реализации Promise.
    И значит всетаки executor - выполняется в обычном call stack
    Просто ошибка внутри обрабабтывается
    Ответ написан
    Комментировать
  • Выбор между оперативной памятью. Двухканал или низкие тайминги?

    Melkij
    @Melkij
    PostgreSQL DBA
    Смотрим.

    DDR4-2400 даёт 19200мб/с, при CL17 имеет латентность 14.16 ns
    DDR4-3200 даёт 25600мб/с, при CL20 имеет латентность 12.5 ns

    Выше пропускная способность - лучше
    Ниже латентность - лучше

    Это даже не касаясь вопроса второго канала памяти, в теории дающего удвоение пропускной способности при той же латентности.

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

    @Dementor
    программист, архитектор, аналитик
    Очень многие вещи в ИТ и не только можно описать фразой "так исторически сложилось".
    Возможно сначала накинули интерфейсы, а потом сделали наследование интерфейсов. Или завтыкали...
    Ответ написан
    Комментировать
  • Какую структуру данных выбрать для описания конфигуратора изделия?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Непонятно зачем автор протегал это АЛГОРИТМАМИ. Тут вобщем-то имеет место обычная работа с формочкой.
    Дизайнеры форм лабают это и не зная ваших умных абстракций. Просто пишут там хендлер на каждую радио-кнопку или на чек-боксик и в зависимости от действий - скрывают некоторые филды или подсвечивают.

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

    Гуглить можно по FSM (Finite State Machine) и библиотек по сям и питонам будет много.

    Вообще данная задача еще не набрала критическую массу знаний чтоб кодить ее в автоматах.
    Время потраченное на библиотеки и на привязку их к формам может быть слишком большим
    и эффекта не будет. Будет разочарование.
    Ответ написан
    3 комментария
  • Инструменты для проектирования архитектуры приложения?

    TheTalion
    @TheTalion
    Любая прога для рисования UML диаграмм.
    Ответ написан
    Комментировать
  • Как JPA понимает, какую реализацию использовать?

    shebbs
    @shebbs Автор вопроса
    В общем ответ такой:
    JPA - это не просто какая-то абстрактная спецификация, там есть вполне конкретные классы, выполняющие конкретные действия. В частности:
    import javax.persistence.Persistence;
    EntityManagerFactory factory = Persistence.createEntityManagerFactory("dvdPU");

    В классе Persistence метод createEntityManagerFactory выполняет вполне конкретные действия (можно посмотреть исходники тут https://github.com/javaee/jpa-spec/blob/master/jav...), а именно:
    1. Сначала находит в classpath все возможные классы, которые могут создать EntityManagerFactory.
    2. Потом перебирает все, которые нашел, по очереди, каждый раз передавая очередному "создателю" конфиг из persistence.xml.
    3. Как только "создатель" создает фабрику, цикл прекращается и фабрика возвращается в нашу программу.

    Если мы не указываем в persistence.xml через тег provider конкретного провайдера, тогда фабрику нам создаст первый попавшийся провайдер. Если же указываем, тогда фабрику нам создаст именно тот, который мы хотим. Пусть Persistence нашел в classpath два провайдера в таком порядке: EclipseLink и Hibernate. Он сперва просит EclipseLink создать фабрику и передает ему конфиг. EclipseLink видит, что в конфиге написано "Hibernate" и отвечает: "Извини, братишка, не в этот раз, в конфиге написано, что это хибер должен делать. Так что я не буду". Тогда Persistence идет дальше по списку, просит хибер и передает ему конфиг. Хибер видит, что в provider стоит org.hibernate.jpa.HibernatePersistenceProvider и создает фабрику.

    Вот так у нас и оказывается КОНКРЕТНАЯ, хиберовская, реализация фабрики, из которой мы уже дальше получаем такие же конкретные, хиберовские, реализации EntityManager и прочее.

    Ну а в classpath все эти провайдеры попадают за счет того, что у нас в pom есть зависимости.
    Ответ написан
    Комментировать
  • Нормально ли вызывать из Сервлета DAO и Service одновременно?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Расскажу из личного опыта:
    Мне всегда хочется, чтобы модель, которая используется в БД, и модель, которая используется в контроллере, были одной и той же моделью.
    Все просто же: пришёл запрос в контроллер - сохрани в бд; нужно что-то из бд - сделай селект и отправь в контроллер.
    Но никогда, ни разу это не было хорошей идеей.

    Начнём с того, что как только появляется хоть какая-то вложенность объектов, никто в здравом уме не будет в контроллере передавать эти объекты, ограничиваясь ссылками на них, в лучшем случае (используя их id); закончим вопросами безопасности и консистентности данных, которые сразу, мимо валидации и какого-то сервиса отправляются в бд.

    Отвечаю на ваш вопрос:
    1. Всегда используйте сервис. Умение сохранять объекты в бд у контроллера противоречит принципу solid
    2. Используйте луковую архитектуру. Доменная модель не должна ничего знать о внешних интеграциях.
    Ответ написан
    1 комментарий
  • Как в цикле по очереди отправлять http запросы?

    hitrick84
    @hitrick84
    Фронтовик, всегда на передовой.
    locationIds.reduce((result, id) => {
      return result.then(_ => fetch(id));
    }, Promise.resolve());
    Ответ написан
    Комментировать
  • Возможно ли использовать Dart в качестве устойчивой альтернативы JavaScript?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Всё просто: используй TypeScript. Там и типизация и ООП. Главное помнить, что типизация там структурная и всё будет ОК.

    А Dart - мертворожденное поделие гугла, отчаянно им продвигаемое. Используется только во Flutter, не менее мерзком поделии, которое ни один адекватный фронт юзать не будет.
    Ответ написан
    Комментировать
  • Нужно ли 40-летнему джуну уметь максимально много?

    php666
    @php666
    PHP-макака
    Короче, я боюсь, что, выучив слишком много всего, стану отпугивать работодателей своей продвинутостью.
    лол
    40 лет, а мыслит как 18-и летний юноша-максималист
    выучит он "слишком много всего"
    ты выучи сначала
    потом приходи сюда
    когда ты "слишком много всего" выучишь, тебе минимум будет 45 лет

    Но вот думаю: А не слишком ли "крутым" я стану?
    на первом же собеседовании тебя сотрет в порошок 25-30 летний чувак с опытом и покажет твое истинное место.
    это не оскорбления.
    это твое будущее.
    Ответ написан
    8 комментариев
  • Как написать итератор для вывода нечетных чисел используя [Symbol.iterator]?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Зачем в итераторе filter? Это убивает всю идею. Надо помнить индекс последнего найденного числа, и искать следующее прямо в функции next(), начиная от сохраненного
    Ответ написан
    Комментировать
  • Как получить первые буквы в строке до цифр?

    hahenty
    @hahenty
    ('•')
    например
    'dev05_dddd'.split( /\d/ ).shift()
    Ответ написан
    Комментировать
  • Потенциальные клиенты стали чаще просить созвоны. Почему так?

    @Kostik_1993
    Web Developer
    Нет никакой нехватки общения. Все гораздо проще. Заказчику элементарно лень писать описание, ему проще созвониться выплеснуть поток своих беспорядочных (часто безполезных) мыслей, а дальше уже вы запонинайте как хотите, понимайте как хотите, вспоминайте как хотите. Я часто отсекаю все ненужные попытки созвониться и требую делать текстовое описание, так как:
    1) Это максимально продуманно, заказчик во время написания анализрует то что пишет.
    2) В этом легче ориентироваться
    3) С этим проще работать, можно дополнять, редактировать
    Ответ написан
    2 комментария
  • Как ограничить количество создаваемых блоков через createElement?

    webdisigner
    @webdisigner
    92ee0ab60a3a4c7e2caa818e65450238.jpg
    Ответ написан
    Комментировать
  • Spring boot. Ошибка при компиляции, в чем проблема?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Spring
    Седой и строгий
    В атрибуте xsi:schemaLocation файла db.changelog-master.xml есть лишний URI http://www.liquibase.org/xml/ns/dbchangelog
    Ответ написан
    1 комментарий