• Как правильно хранить Events в классах?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Не надо хранить ничего в одном пакете events/activities/adapters. Это тупо. Храни всё по фичам. Пакет login, внутри LoginActivity, LoginAdapter, EventLogIn, EventLogOut, etc. И так далее.
    Ответ написан
    Комментировать
  • Какой взять macbook для программиста до $1000?

    DevMan
    @DevMan
    любой mbp или mba, который сможете найти. в пределах 5 лет.
    если мобильность - не критерий, можно смело глядеть на мини.

    хотя, если это только "на попробовать", а не осознанный выбор, я бы заморочился с хакинтошем.
    Ответ написан
    Комментировать
  • Как воспроизвести звук в приложении React Native?

    profesor08
    @profesor08
    Там же в readme достаточный пример кода, как и что можно делать с звуком.
    Ответ написан
    3 комментария
  • Какой мак взять для программирования?

    Zoominger
    @Zoominger
    System Integrator
    Самый дорогой, какой сможете себе позволить.
    Это как раз тот случай, когда цена оправдывает качество.
    Ответ написан
    Комментировать
  • Можно ли совмещать Redux с локальным состоянием?

    @abberati
    frontend-разработчик
    Не можно, а нужно
    Ответ написан
    Комментировать
  • Kак из строковой массив сделать num arr?

    0xD34F
    @0xD34F Куратор тега JavaScript
    arr.flatMap(n => n.split(', ').map(Number))

    или

    `${arr}`.split(/\D+/).map(n => +n)

    или

    String(arr).match(/\d+/g).map(n => parseInt(n))

    или

    eval('[' + arr + ']')

    или

    JSON.parse('['.concat(arr, ']'))
    Ответ написан
    3 комментария
  • Что такое инверсия зависимостей в python?

    Ranc58
    @Ranc58
    Backend python developer
    По сути - как и везде. Пример- У бизнесс логики не должно быть зависимостей от конкретных реализаций. Сегодня у вас все хранится в постгрес а завтра в монге. Инверсия зависимостей позволяет более менее безболезненно совершить такой переезд, так как слой бизнесс логики понятия не имеет где вы храните данные. Ниже накидал грубый но вроде понятный кусок кода. Есть некая сущность блог, к которой можно добавлять пользователей и смотреть их. Блог должен откуда то тянуть данные и где то хранить их. Мы создаем некий интерфейс DBInterface ,который имеет стандартные методы добавить/удалить данные. Далее создаем класс SQLdb который реализует этот интерфейс.

    В самом классе блога мы реализуем функции получения/добавления пользователей без привязки к конкретной системе хранения: просто создаем экземпляр класса SQLdb и экземпляр класса Blog , передавая туда sqldb. Когда мы захотим переехать на монгу - нам не надо будет трогать класс блога. Мы всего лишь реализуем класс Mongodb для новой базы и будем опрокидывать его в блог вместо sqldb. Итог - блог не зависит от системы хранения вообще.
    Пример сильно упрощен и утрирован, но для понимания как оно работает думаю сойдет)

    from abc import ABC, abstractmethod
    import random
    
    
    class DBInterface(ABC):
    
        @abstractmethod
        def insert(self, data):
            pass
    
        @abstractmethod
        def get(self, id):
            pass
    
    
    class SQLdb(DBInterface):
    
        def insert(self, data):
            print(f"inserted {data} from mysql")
            return random.randint(0, 100)
    
        def get(self, id):
            print(f"get user {id} data from mysql")
            return {'id': id, "data": "some_data"}
    
    
    class Mongodb(DBInterface):
    
        def insert(self, data):
            print(f"inserted {data} from mongo")
            return random.randint(0, 100)
    
        def get(self, id):
            print(f"get user {id} data from mongo")
            return {'id': id, "data": "some_data"}
    
    
    class Blog:
    
        def __init__(self, db, blog_id):
            self.db = db
            self.blog_id = blog_id
    
        def add_user(self, name):
            self.db.insert(name)
    
        def get_users(self):
            return self.db.get(self.blog_id)
    
    
    if __name__ == '__main__':
        sql_db = SQLdb()
        mongo_db = Mongodb()
    
        blog_with_sql = Blog(db=sql_db, blog_id=1)
        blog_with_sql.add_user("test") # Выведет inserted test from mysql
    
        blog_with_mongo = Blog(db=mongo_db, blog_id=1)
        blog_with_mongo.add_user("test") # Выведет inserted test from mongo
    Ответ написан
    2 комментария
  • Как в layoutInspector найти идентификатор вью (если mID=NO_ID), чтобы можно было обратиться к нему по R.*?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Насколько я знаю, телеграм не использует xml разметку. Они создают весь ui из кода.
    Поэтому айдишники им вовсе не нужны, и соответственно, в R-файле ты ничего не найдешь.
    Ответ написан
    6 комментариев
  • Какие перспективы у профессий разработчик бд (oracle) и веб-разработчик? Что выбрать?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Господи, опять очередные страдания, "люди добрые памажите решить чем мне заниматься, мы сами не местные пять семей по вокзалам". У вас у всех прямо гамлетовские страдания, "быть или не быть". Вопрос века, ошибка смерти подобна - "в какой области я больше бабла получу???!!!111" Да ни в какой. Никому ты не нужен, такой беспомощный нытик. Ни в вебе, ни в энтерпрайзе.

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

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

    НИ В КАКОЙ. В прошлом веке кончились те времена, когда ты выбирал себе профессию на всю жизнь. Сейчас мир меняется если не за 2 года, то за 10 лет неузнаваемо. Важны способности, а не навыки. Важно понимать общие принципы построения программных систем, а не конкретный синтаксис одного языка. Да, возможно через 5 лет разработчики БД будут совсем не нужны (на самом деле нет). Но я тебе точно говорю что и через 5, и через 50 лет будут нарасхват люди с мозгами и руками. И надо не затачивать свои руки под один конкретный инструмент, а разивать мозги, учить теорию, учиться самостоятельности, пытаться стать исследователем, а не мелким лавочником.
    Ответ написан
    3 комментария
  • Стоит ли учить swift?

    DevMan
    @DevMan
    пхп хоронят с момента его появления, а он все ещё живее всех других в своей области.

    свифт хоронят такие же люди, которые не видят дальше своего носа.
    Ответ написан
    Комментировать
  • В чем суть декораторов?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    В питоне функции и классы - это тоже объекты. У них есть особый синтаксис объявления, после объявления эти объекты доступны по имени как и любой другой объект с именем (переменная).

    Лирическое отступление. В питоне переменные работают не так же как в Си. В Си переменная - это ящичек, а значение в нём как бы лежит. В питоне объект - это как чайный пакетик, а имя как ярлычок на ниточке. Можно к одному пакетику несколько ярлычков привязать, то есть несколько имён. В Си это достигается указателями. В питоне, получается, всё "как бы указатели" и разыменовываются они неявно, под капотом. Но сейчас не о том...

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

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

    Итак:
    my_object_instance = MyClass()
    my_object_instance = my_decorator1(my_object_instance)
    my_object_instance2 = my_decorator2(my_object_instance)

    В этом примере дважды задекорирован объект. Здесь при первом декорировании оригинал нам, судя по коду, не нужен (или декоратор его не менял, смотря что за декоратор, может просто зарегал где-то в списке...), а при втором декорировании нам остаётся доступным и оригинал и задекорированная версия.

    Пока всё просто и не ясно причем тут собаки и чем эти декораторы отличаются от обычных функций. На второй вопрос ответ прост -- ничем особенным. Просто мы такой смысл вкладываем в эти функции. Такая абстрактная концепция.

    В Питоне есть синтаксический сахар, чтобы декорировать объявления функций и классов.

    Иногда хочется наглядно модифицировать или зарегистрировать в каком-то глобальном реестре класс или функцию, но объявление при этом сильно менять не хочется.
    Можно так:
    my_pretty_functions = {}
    
    def my_deco(decorated_function):
        '''Это декоратор, который не меняет декорируемый объект, 
        лишь регистрирует его в словаре'''
        my_pretty_functions[decorated_function.__name__] = decorated_function
        return decorated_function
    
    def my_function(x):
        return x ** 2
    
    # вот декорирование вручную, без сахара
    my_function = my_deco(my_function)
    
    # Но в питоне же есть сахар для этого, и вот альтернативный вариант декорирования:
    @my_deco
    def my_other_function(x):
        return x ** 3

    Эти два способа декорирования работают одинаково, просто "собака" - это синтаксический сахар.

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

    Но замыкания - это отдельная большая история, а узнать об этом вы сможете, к примеру, на занятиях по питону на otus.ru, где я скоро, надеюсь, стану преподавать=).

    Спрашивайте сто не понятно. Я тут не рассмотрел даже малой доли от разных способов применения декораторов в народном хозяйстве. Надо будет состряпать специальный курс про это.
    Ответ написан
    Комментировать
  • Как правильно возвращать получившийся state в редьюсере?

    @twolegs
    Редьюсер должен быть чистой функцией, то есть не содержать в себе сайд-эффектов. В нем не должно быть ничего асинхронного. Для асинхронных операций в redux есть middleware, например redux-thunk.
    Ответ написан
    3 комментария
  • Типо живого чата с клиентами через сайт группу и телеграмм, знает кто варианты?

    Zoominger
    @Zoominger Куратор тега Веб-разработка
    System Integrator
    живого чата

    свой живой чат

    JivoSite?
    Оно прям намекает, что оно Jivo.
    Ответ написан
    2 комментария
  • Как сделать фильтр на Checkbox'ах?

    К React, надо сказать, ваш вопрос имеет самое посредственное отношение.

    Реализовать фильтрацию массива объектов по нескольким ключам можно примерно вот так:

    function filter(array = [], filters = {}) {
        const keys = Object.keys(filters).filter(key => filters.hasOwnProperty(key));
        return array.filter(elem => {
            const commonKeys = keys.filter(key => elem.hasOwnProperty(key));
            return commonKeys.reduce((flag, key) => (flag && filters[key].includes(elem[key])), true);
        });
    }

    В filters кладёте допустимые значения по соответствующим ключам. Например:

    const products = [
        {country: 'Russia', img: 'link.img', genre: 'Comedy', name: 'Вишнёвый сад'},
        {country: 'France', img: 'link.img', genre: 'Novel', name: 'Oberman'},
        {country: 'Italy', img: 'link.img', genre: 'Adventures', name: 'Il cimitero di Praga'},
        {country: 'USA', img: 'link.img', genre: 'Comedy', name: 'The Ransom of Red Chief'}
    ];
    
    const filters = {
        country: ['Russia', 'Italy', 'France'],
        genre: ['Comedy', 'Novel']
    };
    
    const filteredProducts = filter(products, filters);
    Ответ написан
    3 комментария
  • Как вернуть свайп в хроме для андроида?

    yarkov
    @yarkov Автор вопроса
    Помог ответ? Отметь решением.
    Как ни странно, но ответ найден на Пикабу
    Ответ написан
    Комментировать
  • Как отправлять массив данных на сервер?

    @Che603000
    c 2011 javascript
    Без преобразований
    ...
    send.append('link', string);
    listTags.forEach(tag => send.append('tags[]', tag);
    console.log(send)
    ...
    Ответ написан
    Комментировать
  • Как отучиться использовать мышь?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Конкретно в IDEA - Key Promoter. Это плагин, который показывает бесящие подсказки каждый раз, когда ты делаешь действие, на которое есть хоткей, мышкой.
    Ответ написан
    1 комментарий
  • Nginx роутинг. php7.0-fpm и php7.3-fpm на одном хосте?

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    Просто делаете два сокета - каждый для своей версии и указываете их в нужных локейшенах. В конфиге (если необходимо), разносите также fastcgi_params`ы.
    Ответ написан
    2 комментария
  • Как во время кодинга легко и быстро заливать измененный код на удаленный сервер, доступный только по SSH?

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