• Что использовать при кешировании запросов MySQL в PHP

    @edogs
    Одна из главных — сброс кеша при любом изменении таблицы — это критично, так как разрабатываемая система многопользовательская. Я уже задумывался, чтобы хранить результаты тяжелых запросов в файлах на сервере и при очередном выполнении запроса (с привязкой к пользователю системы) проверять, если уже такой запрос был, то брать из файла. Но в этом случае придется решать проблему именно отслеживания изменений в таблице.
    — Получается немного нелогично. С одной стороны Вас беспокоит сброс кэша при любом изменении таблицы, с другой стороны Вы говорите что на кэш изменения в таблице влияют и их надо отслеживать.

    Один из относительно легких вариантов для кэша, это memory таблица в mysql, куда складируются либо все данные которые часто выбираются либо ИД для их выбора из основных таблиц. Плюс по сравнению с 3rd-party решением тут то, что закэшить можно не прогоняя лишние данные через php и сеть, просто insert into select from — в большинстве случаев. Это во-первых. А во-вторых, триггерами при изменениях основной таблицы можно настроить апдейт кэширующей, более гибко чем просто тупой кэш запросов.
    Ну и наконец если база относительно небольшая, то innodb + большой размер пула/кэша — тогда вообще все в памяти будет постоянно считай.
    Ответ написан
    3 комментария
  • Попадает ли Intercepter-NG под УК РФ ?

    @msuhanov
    Программа не может попадать под тот или иной закон, под закон попадают лишь действия, которые человек совершает с этой программой или с помощью этой программы.

    Использование Intercepter-NG в незаконных целях может образовать состав преступления, предусмотренный ст. 272 УК РФ или ст. 274 УК РФ, однако ответственность за соответствующие действия несет конечный пользователь, но не разработчик программы (если он, конечно, не состоит в преступном сговоре с пользователем). В зависимости от обстоятельств могут появиться и другие статьи УК РФ (нарушение тайны переписки, вымогательство и т. д.), но ответственности, опять же, разработчик не несет, ведь он не виноват, что его программу используют в незаконных целях.

    С другой стороны, я думаю, что Вас больше интересует ст. 273 УК РФ («Создание, использование и распространение вредоносных компьютерных программ»). Ведь она предполагает ответственность автора вредоносной программы именно за ее создание, вне зависимости от действий конечных пользователей с этой программой. Касательно этой статьи могу сказать следующее: Ваша программа совершает те или иные действия в интерактивном режиме, то есть явно требует получения санкции пользователя на уничтожение, блокирование, модификацию, копирование компьютерной информации, т. е. такой важный признак вредоносной программы как несанкционированность совершаемых действий с информацией (см. текст ст. 273 УК РФ) отсутствует. Однако в действующей редакции статьи имеется фраза о нейтрализации средств защиты компьютерной информации и эта фраза не согласована по падежу со словом «несанкционированного», т. е. при буквальном трактовании закона возникает противоречие – не ясно, должна ли нейтрализация СЗИ быть несанкционированной для признания программы вредоносной или нет. И в настоящее время какой-либо общепризнанной позиции по материалам судебной практики в этом вопросе нет. Ваша программа нейтрализует средства защиты информации (MitM), эта нейтрализация санкционируется пользователем, однако вопрос об отнесении программы к категории вредоносных на основании именно факта наличия такой функциональности не может быть решен однозначно.

    Дополнительно рекомендую ознакомиться с этой статьей: consumer.nm.ru/kgbspy.htm
    Ответ написан
    2 комментария
  • Как посчитать общую сумму лайков к статье?

    bobermaniac
    @bobermaniac
    Эм… 2+3+5=10
    Ответ написан
    Комментировать
  • Как протестить ios-приложение на "чужом" девайсе и не снести владельцу родные приложения?

    Vas3K
    @Vas3K
    Ничего не надо делать, просто втыкайте девайс, делайте в xcode его девелоперским (там прописывается ваш дев-профиль, их может быть сколько угодно) и запускайте приложение. Ничего не снесется, никакой синхронизации не надо. Иконка приложения появится на последнем рабочем столе.
    Ответ написан
    4 комментария
  • Какой способ вывода Webmoney оптимальный?

    taliban
    @taliban
    php программист
    Переводите деньги другу, он вам отдает наличку. Это самый оптимальный (0.8% теряешь за перевод). Лично через меня так выводили, обоим выгодно, и я получал вебмани по стоимости реальной денег, и человек не терял деньги при выводе.
    Ответ написан
    2 комментария
  • Какие технологии выбрать для написания чата?

    alekciy
    @alekciy
    Вёбных дел мастер
    Erlang в помощь. Именно из-за ejabberd. Хорошее устоявшиеся решение под которое написано в том числе и JavaScript чат. Что не исключает использование дескстопных клиентов. Имхо, получается довольно гибко + достаточно независимо от основного приложения.

    P.S. Яндекс в свое время выбрал erlang ;)
    Ответ написан
    1 комментарий
  • Поиск и выделение слов в тексте (Алгоритм)

    @ffriend
    Для начала понадобится отдельная функция или утилита stem(), которая для любого слова вернёт его основу (именно это и делают поисковые движки, в т.ч. Sphinx и Lucene, откуда её и можно достать и использовать в своих целях). Также не помешает функция tokenize(), разбивающая

    Если такая функция есть. Проходим по всем словам из словаря (source), а из получившихся основ строим trie, в котором листьями будут соответствующие person_id. Имена из 2 и более слов транслируются в n-граммы соответсвующих основ, разделённые пробелами. Т.е. имя «Иванова Анна Михайловна» будет транслировано во что-то вроде «иванов анн михайловн» (использовать lowercase-фильтр или нет — это уже зависит от приложения и текста: если текст грамотный, то не надо, если «из интернетов», то лучше всё-таки использовать).

    Дальше токенизируем текст, стеммим каждое слово и последовательно ищем их в нашем trie. Можно искать сразу триграммы, можно подтягивать второе и третье слово по необходимости (если есть частичное совпадение в trie).

    Если trie реализовывать лень, можно заменить их на hash map'ы, но тогда имена из нескольких слов лучше хранить в виде списка, а hash map сделать вложенным (первое слово в hash map'е верхнего уровня указывает на другой hash map, хронящий все возможные вторые слова для указанного первого слова; получается этакое дерево из hash map'ов).

    Если считать, что поиск по trie/в hash map'е выполняется за O(1), то весь алгоритм отработает за O(n), где n — количество слов в тексте. При этом не придётся индексировать весь текст, а только структуру для хранения основ имён (индексирование в Lucene/Sphinx, вообще говоря, не самая быстрая операция, а размер индекса около 20-30% от текста, так что не факт, что влезет в память; естественно, я предполагаю, что количество имён меньше размера текста).

    Summary:

    1. Применить stem() ко всем именам.
    2. Сохранить слова в структуру с быстрым поиском (trie/hash map).
    3. Токенизировать текст, применить stem() ко всем полученным словам.
    4. Пройтись по списку получившихся слов, при этом ища их в структуре с именами.
    5. Profit.
    Ответ написан
    2 комментария
  • Какое key-value хранилище лучше?

    denver
    @denver
    Нет лучшего NoSQL хранилища вообще, есть под задачи, у каждого плюсы и ограничения. Redis супербыстр когда оперативки больше чем данных, иначе он часто подгружает с диска и сводит на нет скорость (если это еще не переделали), хорош для очередей сообщений, списков (встроены сортировки), всякой мелкой инфы. memcache (не memcached) самый быстрый но не флашит на диск ничего (собсвенно оттого и). memcached простейший key-value с флашем (хорош для очередей сообщений и всяких счетчиков). У последних двух особенность multiget — взять много ключей за раз работает столько же сколько и один, так что хорош для хранения «превьюшек» данных по их id, когда сортированные списки хранятся где-то еще (в редис). MongoDB не просто key-value, в ней можно хранить целые документы (пост со всеми комментариями), некий компромисс между nosql и RDBMS. Hbase уже совсем замена RDBMS, один из самых быстрых когда речь идет о IO диска, соответственно эта NoSQL для постоянного хранения стопитцот миллиардов данных. Cassandra похоже конкурент Hbase, но аутсайдер, т.к. фейсбук/твиттер от нее отказываются ;) Про CouchDB и Riak я ничего особенного не слышал (может кто дополнит — мне интересно)
    Ответ написан
    12 комментариев
  • Выбор монитора с большой диагональю

    AndreyDmitriev
    @AndreyDmitriev
    DELL UltraSharp 3008 могу смело порекомендовать (это на грани Вашего бюждета). Сейчас, кажется 3008 сняли с производства, теперь это DELL 3011. Если ещё пару стареньких двадцатидюймовых DELL отыскать (2007FP), то они хорошо стыкуются в такое вот трюмо:
    image
    Они все на IPS матрицах.
    Ответ написан
    5 комментариев
  • Защита от XSS

    AlexanderPHP
    @AlexanderPHP
    Только на javascript фильтровать нельзя, т.к. firebug`ом можно обойти.

    Вообще, на стороне PHP есть хороший способ:

    $find = array ('/data:/i', '/about:/i', '/vbscript:/i', '/onclick/i', '/onload/i', '/onunload/i', '/onabort/i', '/onerror/i', '/onblur/i', '/onchange/i', '/onfocus/i', '/onreset/i', '/onsubmit/i', '/ondblclick/i', '/onkeydown/i', '/onkeypress/i', '/onkeyup/i', '/onmousedown/i', '/onmouseup/i', '/onmouseover/i', '/onmouseout/i', '/onselect/i', '/javascript/i', '/javascript/i' );
    $replace = array ("data:", "about:", "vbscript<b></b>:", "onclick", "onload", "onunload", "onabort", "onerror", "onblur", "onchange", "onfocus", "onreset", "onsubmit", "ondblclick", "onkeydown", "onkeypress", "onkeyup", "onmousedown", "onmouseup", "onmouseover", "onmouseout", "onselect", "javascript" );
    
    $txt = preg_replace( $find, $replace, $txt );
    $txt = preg_replace( "#<iframe#i", "<iframe", $txt );
    $txt = preg_replace( "#<script#i", "<script", $txt );
    $txt = str_replace( "<?", "<?", $txt );
    $txt = str_replace( "?>", "?>", $txt );
    
    Ответ написан
    1 комментарий
  • Книги с большой Буквы

    SeTeM
    @SeTeM
    Джордж Оруэлл — 1984.
    Меняет взгляд на всё.
    Ответ написан
    3 комментария
  • NoSQL. Redis. Kоличество online-человек

    denver
    @denver
    Ок, вариант получше :) хранить айдишники юзеров в поминутных ключах online_20110602_13_00, ..., online_20110602_13_59, устанавливая каждому TTL 15 минут, добывать с помощью sunion из последних 15 ключей. Если точность не особо важна, то можно не поминутно, а попятиминутно хранить.
    Ответ написан
    1 комментарий
  • Apache2 + карта на google map api, как оптимизировать отдачу большого количества картинок?

    flibustier
    @flibustier
    Лучше nginx для статики поставить. Через него и картинки можно сразу ресайзить.
    Ответ написан
    Комментировать