• Можно ли спарсить сообщения в группе Viber?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    как минимум, есть сохранялка истории
    Ответ написан
    1 комментарий
  • Можно ли спарсить сообщения в группе Viber?

    BasiC2k
    @BasiC2k
    .NET developer (open to job offers)
    На Хабре была статья про Viber. Суть в том, что при использовании десктоп версии, Viber создаёт локальную sqlite базу данных. Без пароля. Путь расположения ее известен. Остаётся только извлечь нужные данные простыми sql запросами.
    Ответ написан
    1 комментарий
  • В каком формате хранить время для разных часовых поясов?

    delphinpro
    @delphinpro
    frontend developer
    Хранить в UTC. Для пользователя сделать настройку и делать перевод.
    Ответ написан
    1 комментарий
  • Среднее количество обращений к БД?

    gobananas
    @gobananas
    finishhim.ru
    5 это нормально, не беспокойтесь. Количество не всегда важно, иногда и один запрос может базу положить ))
    Ответ написан
    Комментировать
  • Как запустить собственный почтовый сервер на ubuntu 16.04?

    Jump
    @Jump Куратор тега Системное администрирование
    Системный администратор со стажем.
    Для рассылки думаю удачнее будет платный сервис рассылки и работа с ним по API.
    Запустить почтовый сервер - дело не хитрое.
    А вот поддерживать его - задача сложная, и дорогая.
    Ответ написан
    2 комментария
  • Как учиться новому после рабочего дня?

    petermzg
    @petermzg
    Самый лучший программист
    Так учитесь новому, до начала рабочего дня. Вставайте раньше, учите нужное, затем на работу, а после работы отдых.
    Ответ написан
    7 комментариев
  • Где найти честного программиста на почасовую оплату?

    @sevocis
    А причем здесь честность или нечестность?
    Опытный программист имеет и так кучу работы. Зачем ему вас обманывать?

    Хорошему программисту проще поставить высокую ставку за работу изначально.

    А вот хреновый программист (начинающий), который мало что знает и умеет и испытывает жесточайшую конкуренцию - тот, возможно, имеет желание надувать заказчика.

    Но если вы будете за ним следить, то все равно это не сделает программу качественнее.
    И это не сделает ее написание сильно быстрее.

    Просто даете такое объявление на фрилансеровском сайте.
    сразу упоминаете это ваши интересное условие.

    Но...
    Время квалифицированных людей - это дороговато будет.
    Осилите?
    ;)

    И еще:
    Программист частенько лазит в справочники-хелпы,
    смотрит решения подобных задач в интернете.

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

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


    "Делалось не то что нужно" - не имеет никакого отношения к типу оплаты.

    Чтобы результат был таким как нужно - его нужно очень тщательно заранее формализировать, то есть описать печатными словами.

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

    Но...Для вас как для заказчика - это дорого будет.

    Вы ведь не увидите на начальном этапе, что проект пошел не так как нужно.

    Вы видите это только в самом конце работы.
    А за все предыдущее время придется заплатить.

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


    Оно вам надо?

    Этот метод оплаты не решает вашу проблему с получением того, что нужно.

    Да и если вы сэкономите (а вы обязательно захотите сэкономить, потому что оплата более-менее квалифицированного программиста это от 2000 рублей за 1 час работы) -

    то качество работы плохого программиста при почасовой оплате не будет выше, а вот сроки (и сумма) оплаты за работу плохого программиста все равно будут большими.

    ;)
    Ответ написан
    Комментировать
  • Вывод ещё одной переменой в php поверх картинки?

    Preemiere
    @Preemiere
    Symfony developer
    У вас координаты захардкожены в функции

    // Запись текста поверх изображения
    $box = imagettftext($src_img, $height_font, $angle, $img_x - 670, $img_y - 300, $color, $font_file, $text);

    Выведите координаты в аргументы функции, чтобы можно было их передавать, и вызывайте её сколько угодно раз с новым текстом и новыми координатами
    Ответ написан
    1 комментарий
  • Как округлить число у двум знакам после комы?

    @Tangent
    Developer
    var a = 10;
    var b = a - (a*1.5)/100 - (a*18)/100;
    console.log(b.toFixed(2)); // 8.05
    Ответ написан
    Комментировать
  • Как правильно спроектировать онлайн-магазин?

    nki
    @nki
    bezkart.ru готовая система лояльности
    Опишите ваш магазин в виде userstory от всех ролей, которые планируются в магазине. Таким образом, вы опишите функционал вашего магазина - его и реализовывайте.
    Ответ написан
    1 комментарий
  • Как передаются объекты в PHP по ссылке или по значению?

    @Wol_fi
    php, js, mysql, highload
    в php4 объекты передавались по значению, в php5 - по ссылке, отсюда может путаница.

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

    В php нет множественного наследования (класс может расширить только 1 класс). Трейты - это немного другое.
    Ответ написан
    Комментировать
  • Как лучше организовать рассылку html писем в php?

    mzcoding
    @mzcoding
    Web-Разработка
    Ответ написан
    Комментировать
  • Репозиторий на Github и Bitbucket одновременно - реальность?

    Denormalization
    @Denormalization
    1) Добавить 2 remote репозитория
    2) Пушить в оба репозитория
    3) ???
    4) Profit!
    Ответ написан
    Комментировать
  • Что делаю не так, не выводится значение в first name?

    @Stopy
    scope.$apply()
    Не стоит использовать ангуляр и jq вместе
    Ответ написан
    Комментировать
  • Rак правильно организовать списание баланса?

    Melkij
    @Melkij
    PostgreSQL DBA
    InnoDB все запросы выполняет только в транзакции. Если открытой транзакции не было, то этот запрос неявно оборачивается в транзакцию.
    Вот только сами по себе транзакции не помогут, надо ещё правильно ими пользоваться. Тут я бы хотел дополнительно обратить внимание Андрей:
    Попробуйте в двух терминалах написать:
    сначала begin; в обоих
    потом select из таблички. Значения одинаковые, правда?
    потом update этой же таблички, сделайте set fieldname = разные значения в терминалах. Второй терминал запрос принял, но не вернул управление, верно?
    потом commit; в первом терминале. update из второго терминала сразу же ответил OK.
    Теперь сделайте commit во втором терминале и посмотрите, что произошло с данными. Это то, на что вы рассчитывали? Или всё-таки не совсем?

    N пользователей запрашивают услугу одновременно, корректно ли произойдет списание средств?

    Нет, некорректно, если только вы не в одной транзакции и не читаете баланс специально с select .. for update.
    Потому что для выполнения действия $this->balance -= $sum; у вас уже должен быть известен баланс, но это ещё не операция записи.
    В итоге у вас было 1000 рублей.
    Пришёл один клиент, прочитал баланс, хочет списать 200 рублей. Обновил циферку в PHP, никто ему не мешает.
    Пришёл второй клиент, прочитал баланс, хочет списать 100 рублей. Обновил циферку в PHP, никто ему тоже не мешает.
    И на шаге save оба отправили запросы на update: один клиент считает, что на балансе осталось 800 рублей, второй - что 900.
    Сколько запишется на баланс? 800 или 900, как повезёт. Правильно ли это? Сколько должно было быть? 700 ведь.
    Потому что клиенты не мешали друг другу обновлять циферку в PHP.

    Как же заставить клиентов не делать глупости?
    В простом случае:
    update tablename set balance = balance - :amount where balance >= :amount and user_id=:uid
    И на приложении проверять affected_rows. Если строка изменена - у пользователя достаточно денег, платёж прошёл. Если изменённых строк нет - вероятно, у пользователя нет столько денег. СУБД разберётся с очерёдностью исполнения и в результате на балансе будет правильная сумма, сколько бы параллельных запросов ни пришло. И, что не менее важно - приложение ответит на все запросы корректно, кому денег хватило, а кому - уже нет.

    В более сложных случаях - можно самому попросить СУБД взять блокировку на строку, о чём чуть ранее я уже заикался:
    begin;
    select balance from tablename where user_id=:uid for update; -- все параллельные транзакции будут выстраиваться в очередь здесь
    /* произвольные запросы (в mysql кроме вызова хранимок, DDL - они делают неявный коммит). Среди этих запросов - обновляете баланс */
    commit; -- только здесь эта транзакция освобождает блокировку select .. for update и с этой строкой начинает работать следующий запрос

    Как вообще работать с деньгами и делать это правильно - Кирилл даёт правильное направление. Изучите, как это делает бухгалтерия, за многие десятилетия работы они придумали, как обходить много странных граблей.
    Ответ написан
    2 комментария
  • В чем разница между "!==", "!=", "==", "==="?

    27cm
    @27cm
    TODO: Написать статус
    Комментировать
  • Есть ли CDN с поддержкой PHP?

    kmx
    @kmx
    CDN - для статики, а PHP-динамический ЯП
    не может существовать)
    Ответ написан
    7 комментариев
  • Какой способ более быстрый и правильный установки MySQL на OSX?

    @drevil
    Linux-сисадмин
    brew
    Ответ написан
    Комментировать
  • А как Вы избавляетесь от дублирования при решении типичных задач?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Решение: написать базовый модуль Catalog и на его основе сделать модули Films, Games, Stars...


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

    Как вы решаете такие проблемы?

    Устраняем дублирование. Как - зависит от того где это дублирование проявляет себя. Если у нас много однотипных проверок (например в Yii1 был убогий ACL и я не думаю что что-то поменялось для Yii2) с проверкой ролей, можно вынести эти однотипные проверки в какой-то отдельный объект. Symfony и Spring предлагают подход с voter-ми (шаблон chain of responsibility)

    Если речь идет о шаблонах - Twig предоставляет механизм наследования шаблонов, миксины и прочие чудные вещи которые позволяют устранить дублирование вообще полностью.

    Если речь идет о банальном дублировании логики - эта логика выносится в отдельный объект. Это может быть как отдельня общая зависимость, либо базовый абстрактный класс (если принцип единой ответственности при этом мы не нарушаем).

    Ну и да - логика может так же дублироваться для разных интерфейсов (http, cli, mq). В этом случае опять же "все общее выносится в общую зависимость". То есть логика переносится в сервисный слой.

    Вариантов как устранить дублирование масса, но суть у всех вариантов одна - берем общее и выносим в общую зависимость.
    Ответ написан
    Комментировать