Задать вопрос
  • Поиск ближайшей точки

    Dzuba
    @Dzuba
    @super-developer, уже нет, почти 3 года прошло же.
  • Php. Как проверить файл mp3 на валидность?

    Dzuba
    @Dzuba
    Добавлю. Само наличие тегов ID3 не является защитой от загрузки php-кода под видом mp3. Дело в том, что ID3 теги могут быть у любого файла, не обязательно mp3. Следовательно, они могут быть и у файла, содержащего код php, с именем, например, «file.php.mp3».
    Поэтому предлагаю в именах загружаемых файлов, менять все точки, кроме последней, на "_". Таким образом, указанный файл сменит свое имя на безопасное «file_php.mp3».
  • Php. Как проверить файл mp3 на валидность?

    Dzuba
    @Dzuba
    никаких расширений не надо, всего лишь считать последние 128 байт файла — строка должна начинаться словом «TAG»
    Совершенно не обязательно. Это верно только в случае тегов ID3v1. В случае ID3v2, файл начинается сигнатурой «ID3» и может не содержать тегов ID3v1.
    Вот чтобы не изобретать велосипед, я и посоветовал поставить это крохотное расширение. Которое, при вызове id3_get_version, наверняка делает тоже самое — читает файл и ищет признаки в определенных его местах. Только оно всесторонне протестировано, написано на языке низкого уровня и наверняка еще пригодится при отображении загруженных файлов.
    В одном вы правы — файл без ID3 не будет распознан. Но такие файлы — большая редкость.
  • Хранение и выборка булевых значений. Mysql

    Dzuba
    @Dzuba
    BIT(M) approximately (M+7)/8 bytes
    При M < 9 это будет 1 байт, поскольку речь идет о целочисленном делении (которое всегда с округлением вниз). В случае 4 бит: (4+7)/8=11/8 = 1 байт.
    SET('value1','value2',...) 1, 2, 3, 4, or 8 bytes, depending on the number of set members
    Один элемент SET'а — это тоже 1 бит. Поэтому 64 элемента занимают 8 байт, 32 элемента — 4 байта, а 4 элемента — 1 байт. Подробнее: тут и тут.
  • Хранение и выборка булевых значений. Mysql

    Dzuba
    @Dzuba
    Блин. Промахнулся. Извините.
    Следует мысленно присовокупить этот комментарий к обсуждению выше.
  • Хранение и выборка булевых значений. Mysql

    Dzuba
    @Dzuba
    Если 30, то такой подход не годится. Но по условию задачи их всего 4, и, цитирую:
    99.9% что не будет добавляться новых параметров.
    Однако, к счастью, даже в случае 30 битов есть выход, правда существенно менее скорострельный, поскольку требует полного сканирования таблицы:
    SELECT * FROM table WHERE bits & mask = mask
    Это почти полностью эквивалентно использованию типа SET.
  • Хранение и выборка булевых значений. Mysql

    Dzuba
    @Dzuba
    Да, перебирать все 8 оставшихся вариантов. Это не много.
    И я тоже думаю, что это должно быть очень быстро, поскольку поле с индексом. Проверил на табличке с 3.5 млн записей — работает почти мгновенно.
    Кстати, поскольку иногда оптимизатор MySQL чудит, имеет смысл явно указать индекс в запросе (в данном случае в качестве имени индекса взято имя поля):
    SELECT * FROM table FORCE INDEX(bits) WHERE bits IN (...)
  • Алгоритм для поиска номера по маске

    Dzuba
    @Dzuba
    Чтобы узнать на сколько возрастет размер данных, нужно знать, как сейчас хранятся номера. Если это BIGINT, то рост будет незначительным: BIGINT = 8 байт против 10 * TINYINT = 10 байт. Если сейчас CHAR(10) в однобайтовой кодировке, то занимаемое место вообще не возрастет. Это всё в предположении, что тип новых полей будет TINYINT, что мной и подразумевалось.

    В отношении индексов сказать затрудняюсь, к сожалению. Моих знаний в этой области явно недостаточно, чтобы предсказать размер индексов и, тем более, поведение оптимизатора mysql при работе с ними. Поэтому я бы положился на эксперименты. Благо есть EXPLAIN.
    Насколько мне известно, mysql использует только 1 индекс для подобных запросов, поэтому это тонкий момент. Быть может, имеет смысл вообще сделать единственный (и уникальный) индекс по все полям сразу. Или независимые, но лишь по части полей. А то и вовсе отказаться от индексов, в любом случае это (по моим представлениям) должно быть быстрее, чем строковый разбор номеров.
  • Алгоритм для поиска номера по маске

    Dzuba
    @Dzuba
    Блин. Не туда. Это замечание относится к моему комментарию выше.
  • Задача на многопоточность?

    Dzuba
    @Dzuba
    Ну как же… Поскольку умножение матриц A[0], ..., A[N] — операция последовательная, а сама операция их умножения имеет лишь 2 операнда (то есть A[0] *… * A[N] = (((A[0] * A[1]) * A[2]) * ....), то после каждого умножения двух матриц из всего набора вы вынуждены будете синхронизировать потоки, ожидая заполнения всей промежуточной матрицы.
    Насчет простоты, действительно, вы правы, этого нет в тексте вопроса. Меня смутили предыдущие примеры. Каюсь.

    Если хочется поупражняться в действительно сложной задаче, то попробуйте распараллелить решение дифура (системы дифуров) на сеточной модели. Вот уж где раздолье для фантазии, в попытках оперативно скоррелировать граничные условия. Тут вам и пул потоков, мощность которого зависит от степени разреженности матриц, и алгоритмическая ценность, и, в случае успеха, гарантированное внедрение в самых разных областях научно-хозяйственной деятельности.
    Удачи!
  • Задача на многопоточность?

    Dzuba
    @Dzuba
    Вы же просили простую задачу. Задача почти такая же, как выше — с графами: исходные данные readonly, запись результатов может вестись независимо.
    Для использования синхронизации в задаче с матрицами перемножайте не 2 матрицы, а более.
    Насчет разделения матрицы на части, следует уточнить, что такое часть. Если подразумевалась прямоугольная область, то нет — нельзя в общем случае. Умножается вся строка одной матрицы на весь столбец другой.

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

    Еще можно попробовать написать любое клиент-серверное приложение, в котором совместная работа пользователей осуществляется над одним и тем же набором данных. Например: общий «блокнот» для нескольких пользователей с оперативным отображением внесенных изменений другими пользователями. Вполне реализуемо на 1 машине.
  • Как обновить список пользователей MySQL в ISP Manager?

    Dzuba
    @Dzuba
    В качестве второго варианта предлагаю посмотреть записи для других пользователей БД, как они хранятся в системной таблице mysql.user. Таких записей там должно быть по две для каждого юзера БД (по крайней мере так в Pro версии панели). Вполне возможно, что вы не создали одну из записей.
  • Как обновить список пользователей MySQL в ISP Manager?

    Dzuba
    @Dzuba
    Вариантов несколько. Однако наиболее эффективным будет, как мне представляется, обратиться к разрабам панели на соответствующем форуме.
  • SSH клиент Windows

    Dzuba
    @Dzuba
    А вот и его инсталлятор: тынц
  • С++. Зависимость возвращаемого функцией типа от значения ее параметра?

    Dzuba
    @Dzuba
    Это использование констант, а не значения параметра, как указано в вопросе.
    Константы, разумеется, известны на этапе компиляции, и тип может варьироваться для вызовов с константным значением. Но речь-то о значении параметра вообще. По крайней мере, нигде не сказано обратное.
    Считаю поставленный вами минус в карму незаслуженным.
  • Нужен пример запуска развертывания ClickOnce приложения из кода на C#

    Dzuba
    @Dzuba
    Вы смотрели второй параметр метода ExecuteAssembly? Возможно, нужно просто настроить evidence. Что-то вроде такого:
    Evidence hostEvidence = new Evidence();
    hostEvidence.AddHost(new Zone(SecurityZone.Intranet));
    hostEvidence.AddHost(new Url("ваш_uri_без_имени_файла"));
    Тогда в первом параметре можно опустить путь к сборке.
    Похожий пример: msdn
  • Поиск ближайшей точки

    Dzuba
    @Dzuba
    Долго думал над случаем «сильной» неравномерности, но так и не нашел возражений против следующих тезисов.

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

    Это только в качестве идеи. Реализацией займусь вряд ли, ибо уже другой порядок временных затрат.
  • Передача/вызов функции C# в/из dll на C++?

    Dzuba
    @Dzuba
    Или так, используя атрибут [MarshalAs(UnmanagedType.FunctionPtr)]
  • Как можно было не продлить домен habrahabr.ru?

    Dzuba
    @Dzuba
    Ну так ведь продлили уже, вот и до 12-го.