Сравнение потребления памяти различными браузерами
Сегодня я расскажу, что получилось из моей давней идеи скормить каждому более-менее популярному браузеру, до которого руки дотянутся, сотню-другую вкладок, и посмотреть, сколько памяти он сожрет.
Для сих целей был взят TOP-1000000 сайтов по версии Alexa, из него выбрано первые 120 и положены в файл links.txt. Затем товарищ Voker57 помог скриптом на Ruby, читавшим этот файл, запускавшим указанный браузер и после загрузки страницы грепавшим список процессов (ps aux) по соответствующему имени. Сумма значений в столбцах, соответствующих RSS, и считалась потреблением памяти соответствующего браузера. Таким образом, учитывалась многопроцессность Chromium'а и процесс operapluginwrap Оперы. Отдельно стоит отметить, что данные результаты, возможно, завышены на 10-15% по сравнению с тем, что ты, мой читатель, можешь увидеть в своем process manager'е.
Тестировались:
- Arora 0.10.2-r1
- Chromium (chromium-bin-5.0.376.0_p44230) (без аддонов)
- Firefox 3.6.3 (без аддонов)
- LeechCraft 0.3.65-830-g57e30dc (полный боекомплект)
- Midori 0.2.4
- Opera 10.10-r1 (более свежие версии неработоспособны вообще) (без всяких довесков)
- Rekonq 0.4.0
- uzbl 2010.04.03 (без скриптов, поставка по умолчанию)
Учат в школе
Давно я не писал сюда. Это по большей части потому, что сейчас я обитаю в жуйке (да, сраный микроблоггинг поглотил и меня), учусь на втором курсе и въя^W работаю по трем направлениям.
Проблема, мой дорогой бложек. Может быть, я хороший программист. Пишу говнокод на плюсцах и немного на пейтонах, пытаюсь на хаскелях. Но вот возникает та самая проблема: не могу я работать в команде. Не получается.
Возьмем те же личкрафты. Казалось бы, отличный проект для командной работы: один программист пишет один модуль, второй — другой, третий — еще какой-то. Стандартизуешь API, если надо, между плагинами, и всё. А если плагины не связаны между собой (один пилит IM, а другой — плеер), то и этого не нужно. Но не все так просто.
Начнем с того, что ВНЕЗАПНО, несмотря на описания, хаутушки и мануалы (и даже гайд по написанию плагинов на примере простенькой скриншотилки), код среднему человеку, пытавшемуся тыкать личкрафты, кажется сложным. C++! STL! Qt! Boost!
IM, мессенджер, то бишь. Архитектура проста. Отдельным процессом ядро мессенджера, запускается, получает список .so-шек с реализациями протоколов от личкрафта, грузит их и использует для коннекта к серверу. Это чтобы от сервера не отключаться, когда личкрафты упадут. А ядро IM'а, в свою очередь, через какой-нибудь локальный IPC связывается с соответствующим плагином к личкрафтам, который уже рендерит ростер, показывает табы с чятиками и делает множество других интересных вещей.
API этого всего дела. Да не знаю я API. Не могу я сейчас предугадать, какие сегодня абстракции понадобятся для libpurple-based протокольного плагина, какие завтра — для iris-based, а через неделю — для SIP. API я буду рожать по мере написания кода. И изменять буду. И удалять старое, и добавлять новое. Да и код в моей голове. Архитектура в моей голове. Идеи и цели в моей голове. Я все это вижу, чувствую, но быстрее написать самому, нежели кому-то что-то объяснять.
Что делать, моя любимая жежешечка? И почему меня в моих физтехах учат какому-то жалкому подобию C++, учат умирающим технологиям типа SQL на примере MS SQL, но не учат таким банальным вещам?
ФП, Boost и С++ головного мозга
Вот что ФП с мозгами делает:
void Call (F f) { f (static_cast<QComboBox*> (w)); } Call (boost::bind (&QComboBox::setCurrentIndex, _1, boost::bind (std::minus<int> (), boost::bind (&QComboBox::count, _1), 1)));
Проходит по коллекции комбобоксов и для каждого комбобокса активирует самый последний для него в списке элемент. Кроме этого места Call юзается еще в куче подобных конструкций.
Олсо. C++ — одновременно говно и офигенен. Говно, ибо вместо «-» приходится юзать std::minus, а офигенен потому, что это можно сделать.
WYFV (Watch Your Fuc^W Funny Video)
Теперь не нужен флеш, чтобы смотреть видео на ютубе. Плагин Poshuku WYFV юзает любой установленный плагин для медиа-плеера, чтобы заменить стандартный флешевый плеер:
![]()
(Кликабельно, 193kB)
Соответственно, есть поддержка выбора желаемого качества: от 3gp, 176x144 до HD, 1280x720, но не у всех файлов поддерживается каждое разрешение. Скоро добавлю навигацию по related videos.
И да, ищутся могущие добавить поддержку других видеохостингов. Там не особо сложно, я б и сам мог, да траффик сильно дорогой.
We contribute!
Накатал вот статью в википедию про Теорему Кёнига.
Перепиливаю потихоньку статью про дальнодействие и короткодействие.
Не говорите потом, что я только личкрафты лоббирую.
Неделя
Написал письмо в Яндекс, что у них невалидная верстка на http://slovari.yandex.ru, и что вообще там DOCTYPE-декларация неправильно написана. Пофиксили, заработало. Расспросили, зачем мне это. Рассказал про Qt и их SAX-парсер, про ненахождение Opensearch на их странице. Упомянул про личкрафты. Как-то так.
Помог авторам Qt/KWin-темы Bespin, которую можно видеть на моих скринах, пофиксить хитрый баг. Исключительно приятные люди, не то, что лиддев qutIM'а, страдающий терминальной стадией ФГМ. Хотя, может, у кутимовцев за год и поменялось чо.
Сдал ТРЯП на отлично. Это радует, учитывая отношение семера ко мне.
Теормех затягивает.
Научился играть Breaking Benjamin — So Cold. Легко.
Поставил UT2004 на линух. Ностальгирую.
Трололо
Письмо с восстановлением пароля от ютюба попало в спам-фолдер на гмейле. Забавно.
Чем больше я учу хаскель...
...тем больше я понимаю, что, скорее всего, никогда не буду на нем писать ничего, кроме прототипов или чего-нибудь академического-научного. Лучше после такого мощного, жесткого, но офигенно драйвового погружения в ФП выучу за вечерок-другой Erlang/OCaml и буду писать на них.
Haskell vs C++
Задали мне тут по информатике задание на пол-семестра, дабы не приходил и не стебался на семинарах. Нужно написать программу, читающую файл с расписанием запуска программ из строк в формате
<количество секунд от запуска> <путь к программе>
Сначала написал на C++ за 30 минут — 118 строк. Этак строк 100, если убрать проверку на ошибки.
Потом подумал и решил, что неплохо было бы написать на Haskell, ибо как раз учу язык, попрактиковаться лишний раз неплохо, да и просто посмотреть на реакцию препода. Да, заняло часа два. Да, обратился к помощи коллег. Но язык непривычный, не знал, как лучше сделать те или иные вещи, да и вообще. Итог: 43 строки, прозрачный код и никакого лоу-левела. Приятно и фапабельно.
C++-вариант (код говно, знаю).
Haskell-вариант (код еще большее говно, знаю).
Да, с радостью выслушаю критику обоих вариантов.
Экспорт фидов в fb2
Посмотрел я сегодня с утра на 674 непрочитанных новости в слешдоте и решил сделать экспорт фидов в fb2, дабы прочитать потом все с КПК по дороге куда-нибудь.
Вот так выглядит диалог экспорта:
![]()
(Кликабельно, 126kB)
Можно выделить несколько разных фидов, выбрать категории для экспорта, а также экспортировать либо все новости, либо только непрочитанные.
И вот так потом все это смотрится в Okular:
![]()
(Кликабельно, 210kB)
AlReader на КПК тоже читает. Уже проверено :)
Кое-что новое в личкрафтах
Почитал я RSS-фиды и решил теперь освещать всякие новые фичи в LeechCraft. Понтовые и не очень, грандиозные и не очень, трудновыполнимые и не очень.
Начнем с предложения добавить некие стандартные RSS-фиды и OpenSearch-поисковики в мастере первого запуска. Выглядит это так:
![]()
(Кликабельно, 223kB)
LeechCraft автоматически определяет пользовательскую локаль и выводит релевантные фиды. Кроме того, есть набор неких глобальных (возможно, интересных всем) фидов (Slashdot, Euronews), которые добавляются ко всем локализованным наборам и выводятся, если для данной локали нет набора. Аналогично с OpenSearch'ем. Кстати, по-прежнему принимаются предложения на тему фидов по умолчанию.
Вторым пунктом идет упрощенная и переработанная система поиска. С пылу, с жару, только что закоммитил и push'нул:
![]()
(Кликабельно, 148kB)
По умолчанию предлагается простой поиск, где пользователь может выбрать одну или несколько категорий (автоматически сразу подхватываются новые из плагинов по мере их появления) и тип поиска, а потом ввести обычную строку, без всяких логических выражений. Сняв галочку с чекбокса, он активирует продвинутый режим, который соответствует поведению LeechCraft до этого. В этом режиме пользователь сам может целиком и полностью сформировать самый извращенный запрос, который только пожелает.
Ну и напоследок, представим новый плагин с символичным названием AnHero. При наличии кед позволяет личкрафтам падать красиво и со спецэффектами, удобно посмотреть бектрейс и отправить кому-нибудь отчет:
![]()
(Кликабельно, 151kB)
LeechCraft в rion overlay
Благодаря славному товарищу Andor личкрафты появились в gentoo-оверлее rion. Так что делаем layman -a rion и эмержим leechcraft-9999 с полным набором юз-флагов. Ну, кроме DC, она пока еще не компилится под гентой почему-то. Если кто разберется, почему — сто интернетов тому.
Break teh promise
Внезапно, в связи с добавлением ссылки на мой уютненький в статью на Википедии про личкрафты, да и с тотальным пониманием, что не важно, доля Programming в JABAPLS вырастет, а Life упадет. Упадет, но никуда не денется, и будет сраться под замочек в жежешечку. Под замочек до сих пор я еще никода не писал, а в жежешечку не писал с появления этого блога — этак с января-марта 2008. Такие дела.
Teh lulz
19 августа выпущен LeechCraft 0.3.0, наконец, почти через полтора года после предыдущего, выпущенного 5 апреля 2008 года. И я попал на глагне Хабра и ЛОРа с этой новостью. В конференцию leechcraft@c.j.r подтянулись посанчеги с упомянутых сайтов.
В тот день количество скачиваний личкрафта — около 300, на следующий — больше 100, хотя обычно в последнее время в день скачивают 20-30 раз.
Почти сразу после поста на Хабре статью на Википедии один товарищ поставил под удаление, хотя остальные товарищи против. Посмотрим, что будет. Да, особенно интересно сравнить со статьями про rTorrent и CTorrent, например. Эти клиенты тоже упомянуты в BitTorrent-шаблонах, тоже ни одного официального ресурса, и никто не сомневается в их значимости. Чую личный интерес.
Какой-то чувак зачем-то добавил ссылочку на мой бложек. Я уже выпилил и попросил у него в обсуждении обосновать, схренали. Нефиг. Посмотрим.