Задать вопрос
  • Зачем браузеру столько памяти?

    @egorinsk
    Возьмем картинку размером 1000×1000. Она одна в распакованном виде замет 4 мегабайта. А ведь она может быть на странице не одна. Возьмем jQuery (без плагинов), он только в ходе загрузки создаст кучу замыканий и массивов, которые займут память. А ведь люди еще и плагинов всяких наподключают, чтобы мало не показалось. Потом, в ходе парсинга HTML, надо выделять память под DOM. W3C каждый день без устали придумывает аттрибуты тегов и css-свойства, и под каждое нужно выделять память.

    Также, в памяти могут храниться ресурсы предыдущей страницы для быстрого срабатывания кнопки «назад».

    Явасрипт-код может сохранять данные в массивах/переменных в глобальной области видимости, и они не освободятся до закрытия или перезагрузки страницы.

    Дальше. Если у вас в браузере не запрещен флеш, наверняка на стрнанице есть 1-2 баннера и может еще какие-нибудь невидимые flash-компоненты. Они требуют создания для них потоков и памяти для хранения ресурсов и всякого хлама.

    Еще дальше. Наверняка на странице есть кнопки Like/+1, вход через соцсети и прочая нечисть. Они. как правило, создают отделбный ифрейм, и в особо запущенных случаях, грузят в него скрипты, jQuery с 10 плагинами и CSS. То есть каждая такая кнопка становится сопосставима по расходам ресурсов с обычной веб-страницей.

    Идем дальше. Наверняка у автора есть расширения в Хроме? Каждое расширение имеет свой DOM и JS контекст, то есть соответствует открытой веб-странице. а может у автора фаерфокс с firebug? Тогаж память вообще будет уходить немеряно.

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

    Теперь посмотрим на разработчиков Chrome из компании Google. Устав бороться с кривыми и глючными библиотеками, они подошли к решению проблемы радикально — разнесли в отдельные процессы браузер, вкладки и плагины. Стоит ли говорить, что в плане производительности это отнюдь прироста не дает. Также. авторы Хрома не стесняются добавлять в него библиотеки типа ICU.dll весом в 11 мегабайт, исключительно для того, чтобы правильно сортировать какую-нибудь никому не нужную ханойскую письменность. Видимо, у сотрудников Гугла компьютеры с таким количеством памяти, что 11 мегабайт для
    них ничего не говорят.
    Кстати, в Хроме удобно смотреть сколько памяти онимает конкретная страница или расширение (Shift + Esc). Например, добавив на HTML-страничку тег SCRIPT, мы видим как потребление памяти подскакивает с 4 до 11 Мб (подгрузился хваленый v8).

    А ведь все это, как вы догадываетесь, отнюдь не предел для современных школоразработчиков. Новые JS-фреймворки, новые HTML 5/CSS3 свойства и прочие радости еще ждут нас впереди.

    А, если автор повелся на обещания маркетологов и купил 64-битный процессор, то программы начинают потреблять где-то раза в 2 больше памяти. То есть, покупая такой процессор, стоит сразу же закупать в 2 раза больше памяти, чем хватило бы на 32-битной системе.
    Ответ написан
    8 комментариев
  • Мобильные вирусы, кто разбирал?

    @egorinsk
    Автор, вы двоечник. Вот что можно сделать за минуту:

    1) скачать архив по ссылке
    2) тотал коммандером нажать Ctrl + PgDn (чтобы распаковать zip-архив, коим jar и является).
    3) увидеть следующие файлы прямо в корне:

    link.txt:
    Сообщение было удалено отправителем.

    sms.txt:
    [item number=«3652» prefix=«8230011»/]

    icon.png с иконкой MMS в стиле айфон

    text.txt:
    Для просмотра MMS-Фото, нажмите кнопку «Продолжить»

    wait.txt:
    (содержит только BOM в utf-8)

    В папаке core несколько скомпилированных ява-классов, в c.class видим строки:

    Ljavax/wireless/messaging/Message
    javax/wireless/messaging/MessageConnection
    javax/wireless/messaging/TextMessage
    sms://

    У вас еще есть сомнения, в том, что апплет делает?
    Ответ написан
    2 комментария
  • Описание sysctl?

    @egorinsk
    В мануале по sysctl (по крайней мере в ламповом дебиане) написано:

    > sysctl is used to modify kernel parameters at runtime. The parameters available are those listed under /proc/sys/
    > Procfs is required for sysctl support in Linux.

    То есть, ключи sysctl в Linux соответствуют файлам в /proc/sys (что, кстати, меня радует). А в FreeBSD для работы sysctl используется одноименный системный вызов. Таким образом список ключей в linux вы можете увидеть, сделав find /proc/sys -type f (или нет? поправьте, если не прав)

    А дальше смотрим man proc, там есть (куцее) описание некоторых параметров. Посомтреть можно например здесь: tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html

    Остальные параметры, которые есть в /proc/sys, но нет в документации, проще всего наверно гуглить.
    Ответ написан
  • Файловый сервер?

    @egorinsk
    А зачем работа через Web, если SMB кроссплатформенен, хоть и костыляв внутри, но позволяет делать гораздо больше вещей (например, читать файл с середины), и не тормозит?
    Ответ написан
    1 комментарий
  • Написал статью: «Многоуровневое меню в XSLT». Кому будет интересно?

    @egorinsk
    Будет интересно, про XSLT на Хабре мало статей. Но тут есть 2 подвоха. Во-первых, 95% пользователей Хабра XSLT не осилят и будут комментировать в стиле «я на PHP это в 3 строчки напишу». Во-вторых, поправьте, если я не прав, но преобразовать одно дерево в другое средствами XSLT — задача для начинающих и оставшиеся 5% вас тоже будут за это ругать.

    Ну и еще. На Хабре есть слово на букву кар..., которое не стоит упоминать всуе (кроме старожилов вроде egorinsk), так как эта самая кар… у вас может от этого здорово просесть.
    Ответ написан
    1 комментарий
  • Custom form elements?

    @egorinsk
    Что кастомизировать чекбоксы и радио? Там самому код написать будет быстрее, чем разбираться, как прикрутить чужой. А для селектов вроде есть jQuery UI.
    Ответ написан
    Комментировать
  • Возможно ли запретить очищать историю посещений в chrome или firefox?

    @egorinsk
    Знаю, что оффтопик, но не могу же молчать! Невозможно сидеть и работать 8 часов подряд. Мне кажется, что те люди, которые ставят подобные ограничения, должны сначала применить их к себе.

    Например, если автор — системный администратор или разработчик, то не заходить в рабочее время на Хабр, ЖЖ, linux.org.ru, ubuntu.org, списки рассылок, почту, Jabber, мануалы (кроме жизненно необходимых для текущей работы), github, sourceforge, android market, app store и подобные сайты. Не писать bash скрипты (за исключением жизненно важных для решения текущих рабочих проблем). Не открывать консоль и ssh (за исключением жизненно важных для решения текущих рабочих проблем). Не читать логи и техническую литературу.

    А вместо этого пусть например, автор, просидит 8 часов подряд на сайте вконтакте или баду.

    Возможно, тогда в авторе проснутся более человечные чувства по отношению к другим людям.
    Ответ написан
    3 комментария
  • Как реагировать на "На вашем сайте находится информация порочащая честь компании..."

    @egorinsk
    А, кстати, говоря, зачем на таком сайте, ориентированном на предприятия, возможность комментировать без подтверждения личности? Я вообще сторонник отключения комментирования на сайтах, особенно в ЖЖ популярных блоггеров и ютубе, так как люди в основном пишут фигню, а если кто-то и напишет умный комментарий, его не найти среди 99 плохих.
    Ответ написан
    Комментировать
  • Насколько оправданно решение с контроллерами-не-классами?

    @egorinsk
    В чем преимущество $GLOBALS['router']->… перед App::getRouter()->....?

    Второй вариант: 1) позволяет в 1 месте заменить роутер на другой, позволяет писать аккуратный код без глобальных переменных, красивее. У первого варианта преимуществ нет.

    По поводу расхода памяти — расход памяти у вас будет, если много классов и создается много экземпляров, а если у вас 1 статический класс App, оверхеда почти нет.

    Контроллеры-объекты поддерживают наследование, что бывает удобно. Но вообще, хороший фреймворк позволяет написать код вида:

    require_once 'framework-bootstrap.php';
    if (!App::TableGateway('People')->add(array('name' => 'John', 'surname' => 'Johanson'), $errors)) {
    die( «Error»);
    } else {
    App::templateEngine()->render('success.html');
    }

    И оставляет автору выбор, использовать объекты или нет.

    По поводу PHP-библиотек и фремворков — не смотрите на них. Среди известных библиотек много абсолютно неадекватных вещей, которые портируют к примеру с Явы, не отдавая отчета что цена объекта/класса в PHP/JAva разная, производительность разная, цикл работы разный. В итоге получаются монстры типа Zend или уродливого порта Hibernate.

    Я вообще крайне плохо отношусь к Open-source продуктам на PHP, их пишут как попало, бездумно, и не советую брать с них пример, а думать своей головой.

    Логгер вам не нужен — пишите либо App::log(string) либо сразу file_put_contents('', '', FILE_APPEND) — все равно эти логи никто читать не будет.
    Ответ написан
  • Игра для ребёнка?

    @egorinsk
    Driver: Parallel Lines — как и GTA, можно ездить (а можно ходить пешком) по прекрасному Нью-Йорку, слушать прекрасную музыку в стиле фанк, но увы, стрелять-убивать-давить людей и уезжать от полиции там тоже можно невозбранно.

    А просто ездить вроде можно в Need for Speed.
    Ответ написан
    Комментировать
  • HTTP request header: Origin?

    @egorinsk
    Для отличения ботов от людей можно использовать (так как у вас мутно описаны подробности задачи, пишу все сразу): проверку поддержки Cookie, Expires, Last-Modified, проверку поддержки HTTPS, проверку возможности и правильности исполнения JS/Flash-кода, проверку соответствия версии юзер-агенты и поддерживаемым возможностям, проверку загрузки статических ресурсов, проверку информации о локальных сетевых интерфейсах через Java-апплет, поведенческий анализ (анализ записываемых действий пользователя: например, пользователь должен подвести мышь или указатель фокуса к ссылке, прежде чем перейти по ней), статистический анализ (выявление тенденций), анализ источников запросов (например, запросы из Китая на русскоязычный сайт; запросы с Ip из спам-листов; запросы с IP дата-центров; запросы с компьютеров с открытыми портами прокси), сопоставление клиентской информации с параметрами запроса (например, яваскриптом видна русская локаль и московский часовой пояс на клиенте, а запрос приходит с китайского IP с немецкой локалью в заголовках = используется прокси + средство подмены заголовков).

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

    Умная система учитывает все эти факторы, накапливая и анализируя их в соответствие с набором правил. Вряд ли вы осилите сделать тот же объем работы, что например делает команда яндекс-рекламы. Но даже такую систему, как мне кажется, при желании можно обойти, если понимать, как она работает. И если например привлечь к этому делу человека вроде egorinsk и дать ему много денег.

    Предложенный вами способ примитивен и обходится несколькими строчками кода.
    Ответ написан
    Комментировать
  • Сервис (или программа) замедляющие музыку

    @egorinsk
    Музыкальная (платная) программа Ableton Live умеет это делать. Но. Надо учесть, что во-первых, есть 2 способа «замедления»: с сохранением высоты звука (pitch) и без. Для первого и второго существуют разные алгоритмы, и все они приводят к искажениям и артефактам.

    Например для замедления с сохранением pitch можно бить звук на семплы и играть их по несколько раз, можно играть по несколько раз с изменением направления, звук можно бить наугад или по transients, можно использовать DCT и пересчитывать звук по его спектру.

    Потому результат будет скорее всего не очень впечатляющий — достаточно почитать описание этих алгоритмов, чтобы понять что ничего хорошего на выходе они не дадут.
    Ответ написан
    Комментировать
  • Подключение к COM-порту через Telnet в Windows 7

    @egorinsk
    Putty используйте, им (в самой новой версии) можно соединиться с COM* Причем работает все и с виртуальным COM-портом (например, работающим через Bluetooth)
    Ответ написан
    Комментировать
  • Демон на PHP — как извне менять параметры?

    @egorinsk
    > Как можно сообщить демону, что параметры изменились и необходимо перезапустить запрос?

    Самый простой способ — демон слушает соединение и получает по нему команды.
    Ответ написан
    Комментировать
  • Реквестирую холивар на тему JavaScript framework?

    @egorinsk
    Самописные виджеты без jQuery (лучше, чем jQuery)
    Ответ написан
  • Доверите ли вы свой скан паспорта тематической социальной сети чтобы купить услугу в online?

    @egorinsk
    Что мешает нарисовать/отретушировать существующий паспорт и отправить его скан? Не вижу тут защиты.

    И да, естественно вашу сеть в случае популярности ломанут и все паспорта сольют.
    Ответ написан
    3 комментария
  • Проседает сеть от небольших нагрузок?

    @egorinsk
    C чего вы взяли, что проседает именно сеть? Попробуйте параллельно со стресс-тестом (на полную) пинговать сервер. Если под нагрузкой пинги идут стабильно, значит с сетью все в порядке. А апач может иметь 100 причин, почему он тормозит.

    Посомтрите вывод top под нагрузкой для начала, сколько времени сидит в ядре, какие процессы вверху, как используется свап.
    Ответ написан
    2 комментария
  • Оптимальная реализация поиска и сортировки объектов с фиксированным количеством полей?

    @egorinsk
    Ха, делаете поиск по пользователям в очередной недосоциальной сети или сайте знакомств? ну-ну, на майскуле с кучей индексов ваш поиск будет работать ровно до 10 000 пользователей. Вообще, стоило бы сначала изучить, какие параметры используют чаще для поиска, и делать индексы по ним.

    С ростом числа юзеров, как вариант костыля на первое время, можно попробовать прикрутить сфинкс или какой-нибудь Lucene, но с ростом нагрузки все равно этот функционал придется выносить в отдельный кастомный модуль. Спросите у вконтактеров, например, как у них сделан поиск по людям (отдельным модулем на Си).
    Ответ написан
  • Что делать когда кончаются названия для class/id

    @egorinsk
    Вообще, это очень важное и редкое умение, давать имена/названия объектам в программировании. Я часто трачу время именно на то, чтобы подобрать правильное и понятное название (и даже гуглю как аналогичные штуки называют другие разработчики, а также ищу переводы слов), а не написать сам код.

    Что касается вдохновения, тут лучше поменять систему наименований. Например, сделать уникальный класс для блока, а внутри использовать классы с префиксом (по типу предложенной яндексоидами системы БЭМ), вроде:

    .b-news-teaser (внутри b-new-teaser-header, b-new-teaser-list, b-news-teaser-item, b-news-teaser-sticky-flag и так далее), рядом .b-top-comments (внутри классы с таким же префиксом), потом .b-top-articles и так далее. То есть уникальные имена только у блока, а внутренние классы используют префикс.

    Это, кстати, даст верстке определенные свойства «железобетонности» — вы сможете перенести блок с одной страницы на другую, и ничего не сломается. А изменения CSS-стилей в одном блоке новостей не сломают верстку форума (так как у всех блоков используются уникальные имена классов).

    Естественно, вышеописанные свойства у вашей верстки будут только при соблюдении адекватного подхода (а то бывают товарищи, пишущие что-нибудь вроде p { font:… }, или даже * { color: black; } ну дуракам как известно, ничем уже не поможешь).

    Что касается id — их надо избегать или использовать умные именования. Представьте, вы сверстали форму логина на странице, в которой есть field-username и field-password, а завтра вам понадобилось добавить такую же форму внизу (и у вас клик по лейблу в нижней форме начинает прокручивать страницу вверх). Или открыть в попапе. Или еще что-нибудь. Надо либо отказываться от id, либо, если никак, добавлять к ним уникальные префиксы (например #top-form-field-username и #popup-form-field-username).
    Ответ написан
    1 комментарий