• СМС-оповещатель для Интернет-магазина?

    Dimitriys
    @Dimitriys
    сам решал подобную проблему так: поднял ICQ бота, и при приходе заказа вызывался урл типа site.com/send_icq.php?str=Order и уведомление от бота высылалось всем менеджерам по ICQ (а уже в том же QIP можно настроить громкий звук при принятии сообщения от этого номера), тк аська всегда у менеджеров запущена, что бы не городить огород… если интересно могу в личку описать или выложить бота…
    Ответ написан
    4 комментария
  • СМС-оповещатель для Интернет-магазина?

    @Noliki
    Крутая штука, надо будет себе такую сделать.
    Ответ написан
    Комментировать
  • Дайджест инициатив РОИ на Хабре?

    @yulyugin
    На мой взгляд, это отличная идея. Мне кажется что необходимо сделать отдельный хаб для этой темы.
    Ответ написан
    Комментировать
  • Конвертация HTML в JPG

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Из готовых решений еще есть wkhtmltoimage — кросплетформенный. Использовал на нескольких проектах — довольно удобная утилитка. Только обрабатывать рекомендую через очередь какую.
    Ответ написан
    Комментировать
  • Конвертация HTML в JPG

    epicfailguy93
    @epicfailguy93
    Могу предложить использовать Qt Webkit: передаёте ваш код в QString, потом получаете изображение в QPixmap и сохраняете его, вроде совсем просто.
    Ответ написан
    Комментировать
  • Конвертация HTML в JPG

    fear86
    @fear86
    Developer
    Второй вариант еще плох тем, что результат рендера html не будет соответствовать браузерному варианту. Поддержка html там весьма ограничена.

    ps: имхо если нужно максимальное качество, то webkit лучший вариант.
    Ответ написан
    Комментировать
  • Можно ли скопировать чипованную банковскую карту?

    la0
    @la0
    Копия даёт возможность оплатить услуги в магазинах, если в банке, извините, мудаки.
    Причем на протест/чарджбэк даже в таких случаях всем пофиг, особенно если обнал происходил в том райне, где вы расплачивались картой, тем более вы сами платите за ваш протест около 1500.
    Банкоматы — только ПИН (его еще нужно узнать, хотя это и довольно просто, например, сотудникам СБ супермаркетов).
    Я лично считаю, что банкам нужно просто не авторизовывать транзакции, которые прошли по магнитной полосе у чипованной карты, если заведомо известно, что терминал ридером чипов оборудован. Так или иначе, я ввожу пин только в крайних случаях, когда с красной кнопкой не срабатывает.
    Также, на запрос пина в магазинах можно нажать красную кнопку, у многих карт транзакция пройдёт и «вылезет чек на подпись».
    Ответ написан
  • Карты памяти SDXC, FAT32 что за «пугалки»?

    @WEBIVAN
    Юзаю уже более года 64Gb SDXC формаченную в FAT32 никаких проблем.
    Форматил в HTC Hero, который о SDXC знать ничего не знает, сейчас юзаю в Evo 3D, который тоже SDXC типа как не поддерживает.
    ИМХО, бред это про то, что переформатив карту в другую ФС она вдруг сдохнет. Придуман для, того что бы заставлять народ покупать девайсы с поддержкой exFAT
    Ответ написан
    1 комментарий
  • Карты памяти SDXC, FAT32 что за «пугалки»?

    @agmt
    2nazarpc:
    FAT32 устарела, да, но vold (по крайней мере 4.0) умеет только fat32 (оно там как константа идёт). Но даже если подцепить руками, то надо, чтобы были права на всё. В-общем, у меня не получилось.
    Ответ написан
    1 комментарий
  • Вопрос о турбореактивных двигателях

    Anonym
    @Anonym
    Программирую немного )
    image
    Прочитав статью в википедии попытаюсь объяснить «на пальцах»:
    Компрессор высокого давления (3) нагнетает воздух в камеру сгорания (4), а так как турбина (7) вращается в том же направлении, что и компрессор, а выходное отверстие камеры сгорания больше входного, сгорающая топливная смесь не может «протолкнуть» компрессор в обратную сторону.
    Ответ написан
    1 комментарий
  • MongoDB поиск вхождения указанной цифры в числовое поле

    iamsaint
    @iamsaint Автор вопроса
    Это я уже понял :) решил так:

    db.log.find({$where : function() { return (/61/i).test(this.show)} })
    
    Ответ написан
    1 комментарий
  • Yii: Кэширование с зависимостью от двух CFileCacheDependency. Возможно ли?

    KingOfNothing
    @KingOfNothing
    Ну, два варианта:
    1) Расширьте класс CFileCacheDependency, создав CMultipleFileCacheDependency и определить логику для двух файлов
    2) Использовать CChainedCacheDependency, в нее положить два CFileCacheDependency

    Второй вариант кажется выигрышным.
    Ответ написан
    1 комментарий
  • Как эмулировать браузер на php?

    dizballanze
    @dizballanze
    Software developer at Yandex
    Полностью на php не знаю, но можно взаимодействовать с selenium или phantomjs.
    Ответ написан
    Комментировать
  • Подобрать архитектуру распределённого Yii-приложения?

    Mendel
    @Mendel
    PHP-developer
    Первое что Вам нужно сделать это разобраться с guid.
    Я не пробовал этого в Yii, но насколько я помню навскидку там не должно быть серьезных препятствий к его использованию.
    Если есть какие-то наработки, модули модели и т.п., то надо будет их приучить к новой структуре. Поменять типы полей в базе (включая связанные), поменять автоинкремент на генерацию гуид по вашей логике и т.п.

    Создаете себе базовый класс наследник от CActiveRecord, скажем CDistributedActiveRecord.
    Этот класс у вас будет отвечать как за guid так и за репликацию.
    Собственно все АР наследуют от него.

    Проектирование архитектуры нужно начать с четкого планирования базы.
    Очевидно что часть таблиц у вас будут уместны во всех базах, без фильтрации. К примеру таблица содержащая список организаций в вашей иерархии нет смысла. Вообще стандартная логика обычно такая — «справочники» мы имеем общие, «документы» у каждого свои. К примеру номенклатуру (товары, виды услуг и т.п.) лучше отнести к справочникам, и тиражировать централизованно, а вот к примеру прайс из этой номенклатуры лучше считать документом (но опять де от специфики зависит). «Документы» и «справочники» нам не обязательно делать так строго как в 1С, мы ведь свою архитектуру делаем. К примеру сотрудники/пользователи по логике это справочник, но мы можем отнести его к документу, и вообще сделать два базовых класса для них. Это опять таки сильно зависит от вашей задачи.

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

    Совет — сильно подумайте о внешних ключах. Как это отразится на ваших ручных репликациях.

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

    Если мои ограничения вам подходят, или вы готовы под них подстроится, то можем переходить к репликации.
    Для репликации мы переопределяем методы создания и изменения записей таким образом, чтобы они сохраняли наши изменения в журналы.
    Журналы могут быть как у каждой реплицируемой таблицы, так и общие для всех. Зависит от задачи. Журналы у нас содержат в себе только:
    инкрементарный номер записи, который представляет из себя «скрытое время», который является сквозным для всех таблиц, возможно название таблицы, и guid изменяемой записи. Также мы указываем что произошло с записью. для целей репликации у нас есть два действия — сохранение и удаление. Нам не интересно была ли запись создана, или редактируется старая — все равно нам ее передавать.

    Далее мы создаем еще одну таблицу, в которой у нас будут указаны узлы с которыми у нас предусмотрена связь. Здесь может быть что угодно, включая реквизиты для связи с узлом, но обязательными полями должны быть — признак того, какие именно записи передавать (поскольку некоторые данные могут передаваться в несколько узлов сразу, то нет смысла выносить это в журналы репликации) и два номера обработанных записей: входящий и исходящий (не путать с номерами сообщений в 1с). В этих номерах мы будем отражать какие записи из журналов репликации мы получили или отправили (или если у нас будет оффлайн репликация, то какие изменения мы отправили и получили о них подтверждение о получении). Далее при передаче инфы соседям, мы будем делать запрос в журнал репликации, который будет отбирать только данные с нужным ПредприятиеВладелец (или без ограничения если у нас отправка «наверх») и с номером записи больше чем номер уже обработанный. Имея список записей которые нам надо отдать мы ищем их в соответствующих таблицах, формируем пакет для синхронизации, и отправляем его. При получении пакета мы проверяем записи на факт того, не являются ли эти записи уже отработанными до этого (проверяем по номеру, особенно критично для оффлайн синхронизации).

    Обратите внимание — мы не храним все изменения, а храним только номера измененных записей. При получении мы или изменяем запись, или создаем новую если таковой нет, или удаляем если указано удалить.

    Как передавать информацию? да как угодно. Хоть по почте кидайте в виде json.

    Не забывайте чистить «журналы репликации» от записей которые уже не нужны никаким из узлов с которыми есть связь (т.е. чьи номера меньше чем ВСЕ исходящие номера у всех узлов). Также хочу обратить ваше внимание на размерность счетчика-идентификатора в этом журнале. Делайте его побольше :)

    Что еще важно в большой, распределенной системе? Важны тщательно продуманные права пользователей, и важны ЛОГИ. Много больших и разных логов. Еще больше логов. Логи для разбора полетов лучше всего вести отдельно от журналов репликаций. В них требуется большая детализация чем там, с другой стороны они читаются редко, а пишутся часто, так что индексация нужна в меньшей степени. обязательно указывать кто вносил изменения, когда вносил и т.п. В идеале такие журналы держать вообще в отдельной базе или даже в текстовом файле.

    Вроде пока всё что вспомнил.
    Ответ написан
    2 комментария
  • С какой шириной вы рисуете адаптивные сайты?

    EugeneOZ
    @EugeneOZ
    Возьмите за стандарт цифры Twitter Bootstrap.
    Ответ написан
    2 комментария
  • Помогите собрать триммер

    barker
    @barker
    Ну и вопросик…
    Ответ написан
    Комментировать
  • Можно ли оцифровать свою ДНК?

    EugeneOZ
    @EugeneOZ
    Имхо, надёжнее пучок волос (или ненужный зуб!) в формальдегид запихнуть :)
    Ответ написан
    5 комментариев