• Zoom, как транслировать музыку в конференцию?

    @Tabletko
    никого не трогаю, починяю примус
    Нужен программный или аппаратный микшер. Или можно использовать виртуальную звуковую карту, например voicemeeter.
    Ответ написан
    Комментировать
  • Как правильно организовать авторизацию на android?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Обычно для взаимодействия с сервером нужен API на стороне сервера, никто html не парсит. Передавать токен - ок. Передавать токен не по https - не ок. Чаще в современном мире работают с json, а не xml.
    Для авторизации можно сделать OAuth, или передавать логин-пароль(опять же https).
    отправляет запрос к бд на выборку пользователя с такими логином и паролем,

    Не ок. Пароль в открытом виде держать нельзя, нужно держать хэш с индивидуальной солью.
    Ответ написан
    1 комментарий
  • Передача данных по сети,как?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    1) Массив полей передавать плохо. Представьте, что через 5-10 дней вам понадобится еще одно поле добавить. Придется код менять и на клиенте и на сервере.
    Из этого вывод - упаковка данных должна, по возможности, быть вариативной к данным, чтобы добавление нового поля класса не убивало все на корню. Для этого подходит сотня-другая протоколов, начиная от json (что очень хорошо), и заканчивая protobuf (что тоже очень неплохо), можно даже в XML упаковывать, здесь все от вкуса и цвета зависит. Я предпочитаю json.
    2) Обмен лучше делать на стандартyых высокоуровневых протоколах, начиная от HTTP(S) и заканчивая каким нибудь XMPP, можно использовать и очереди сообщений типа RabbitMQ/ZeroMQ и им подобные. Мой фаворит HTTP.
    Соответственно, с одной стороны должен быть HTTP сервер или приложение, которое его эмулирует, или сервлет. С другой стороны - клиент, который посылает запросы к вашему серверу. Ну а данные гонять через json.
    Ответ написан
    6 комментариев
  • Как нажать на сенсорную кнопку отдельного устройства с помощью Ардуино, не вскрывая устройство?

    15432
    @15432
    Системный программист ^_^
    Кусок фольги, приложенный к кнопке имитирует палец, к нему - не очень длинный провод на хорошее заземление через реле, реле подключить к ардуинке и замыкать на секунду при необходимости
    Ответ написан
    1 комментарий
  • При нажатии на кнопку 2 раза, вылетает, как исправить?

    @onepavel
    Консультация и разработка мобильных приложений
    mediaPlayer = null; не смущает ?
    Ответ написан
    5 комментариев
  • Как на Microtik RB951G ограничить доступ на все сайты, кроме определенного списка?

    chumayu
    @chumayu
    Если в башне по*бень. То что еб*нь, что не еб*нь.
    Ну думаю вариантов масса, но я бы сделал так:

    1.Отменил правило основной маршрутизации на микротике (т.е. правило 0.0.0.0/0 выключить)
    2.Прописать только те маршруты которые вам нужны.

    Способ в принципе корявый но работает.
    Ответ написан
    Комментировать
  • Какие минимальные требования для комфортной работы с 1С?

    eapeap
    @eapeap
    Сисадмин, Беларусь
    Есть "типа сервер":
    Операционная система Windows Server 2008 R2 Standard 64-bit
    Центральный процессор Intel Core i5
    Оперативная память 8,00ГБ DDR3
    Хранение данных
    120GB SSD под ОС и базы 1С
    500GB Western Digital под архивы и файлопомойку.
    Собран на обычный дектопной материнке Гигабайт. Включен 24/7, перезагружается раз в 2-3 месяца.
    Работают с 1С в терминале, 3 базы файловые, до 3 пользователей в каждой, типовые российские конфигурации: никаких проблем.
    Решение: не нужно ДО ТАКОЙ СТЕПЕНИ (Intel Celeron J1800, Оперативная память 4,00ГБ) экономить на "типа сервере"
    Ответ написан
    2 комментария
  • Как сделать одну модель данных для нескольких фрагментов android?

    @FoxInSox
    Тем, что система может убить фрагмент и пересоздать его. Само собой в конструктор система ничего передаст.

    Модель по хорошему не должна храниться в оперативной памяти, а должна например храниться в БД. Как обновлять и загружать данные из БД зависит от вас.
    Ответ написан
    7 комментариев
  • Какова цена данного приложения?

    Spetros
    @Spetros
    IT-шник
    А мы покупаем или продаем?
    Ответ написан
    4 комментария
  • Как правильно спроектировать приложение?

    Почитайте про паттерны. Мне очень помогла книга "Чистый код" (www.ozon.ru/context/detail/id/21916535/).

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

    Разбиваем программу на сущности: User, News, Page.
    У каждой сущности есть свое хранилище: UserStorage, NewsStorage, PageStorage. Хранилище занимается только тем, что управляет сущностью в БД: save, load, delete, etc.
    При создании, хранилище прнимает соединение с БД и сохраняет его "в себе".
    Код при этом получается примерно такой:
    $Connection = ConnectionPool::getConnection('users');
    $UsersStorage = new UserStorage($Connection);
    
    $User = $UsersStorage->loadById(1);
    $User->set('name', 'Yakob');
    $User->get('name');
    $UserStorage->save($User);
    $UserStorage->delete($User);


    Аналогично другими сущностями.
    Сразу же прослеживается связь между сущностями и хранилящами между собой. Выделяем абстракцию, например AbstractStorage. Выносим в нее общие части хранилищ.
    Приведенный код создания хранилища можно скрыть, например за фасадом примерно так:
    class UserFacade {
        protected static $UserStorage = null;
    
        public static function getById($id) {
            return self::getUserStorage()->getById($id);
        }
    
        public static function save(User $User) {
            return self::getUserStorage()->save($User);
        }
    
        protected static function getUserStorage() {
            if (is_null(self::$UserStorage)) {
                $Connection =  ConnectionPool::getConnection('users');
                self::$UserStorage = new UserStorage($Connection);
            }
    
            return self::$UserStorage;
        }
    }


    Все остальное - разные укровни бизнес логики. Нужно получить новости юзера? Создаем класс например UsersNewsStorage, который наследуется от NewsStorage. Есть метод getFeed
    Код примерно такой получается:
    ....
    $User = $UserStorage->getById(1);
    $UsersNewsStorage = new UsersNewsStorage($Connection);
    $Feeds = $UsersNewsStorage->getFeed($User);


    Нужна валидация новостей? Хранилище (NewsStorage) мы не трогаем, оно занимается только тем, чем занимается. Остальное бизнес логика.
    Добавляем валидацию в UsersNewsStorage.
    $User = $UsersStorage->loadById(1);
    $News = new News(['title'=>'AAA', 'body'=>'bbbbbb']);
    $UsersNewsStorage = new UsersNewsStorage($Connection);
    try {
      $UsersNewsStorage->saveNews($User, $News); // Внутри валидация
    } catch (ValidationNewsErrorException $Ex) {
      // Валидация не прошла
    }


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