Уже более 5 лет я собираюсь написать браузер (до кучи и свой HTML, но это мелочи), что в последнее время стало особенно для меня актуально. Opera сыграла в ящик, Firefox с каждой версией все отвратительней, остальное и браузерами назвать сложно. А так как я сам не осиляю, то прошу вас всех сделать все за меня.
Пока меня интересует сама возможность запиливания своего браузера разными анонами. Так как у меня уже есть опыт коллективной разработки, в том числе на бордах, я прекрасно знаю, что все пересрутся еще на этапе выбора языка. Потому идея первая:
1. Каждый пишет что может и на чем умеет
В самом деле, хоть пиздон, хоть жабка, хоть луа, потом по сокету это можно высрать в процесс с HTML-рендерером, оттуда уже готовые квадратики с битмапами в процесс с рисовалкой, а его я (или кто-то другой) слепим на сишечке и будет все шустро.
2. На первых порах можно юзать кучи библиотек из разных языков
Можно быстренько будет слепить свой днс-кешер, http-кешер, работу с кукисами, http и https, скейлеры графики и еще миллион низкоуровневых утилит, которые будут нужны в процессе отображения странички. Посмотрите на links, половина которого они и составляют.
3. Можно тырить код из Links / Netsurf, если кто-то осилит собрать блинк или v8 то тоже милости просим.
4. Срать на стандарты, делаем удобный браузер, а если там где-то текст на 10 пикселей уедет в сторону - ну и хуй с ним. По мотивам http://habrahabr.ru/post/246857/
В общем, интересуюсь теорией и практикой написания подобной опердени с совместными усилиями анонов, хочу услышать слова о ненужности и своем идиотизме. Примерные этапы на картинке, чем больше шрифт - тем важнее. Самое главное, изобрести "сервер кукисов" или "сервер закладок" так, чтобы он не кушал больше всех остальных компонентов.
>>420393 Давай сначала ты скажешь, зачем тебе свой браузер? Чем он должен выгодно отличаться от аналогов? Почему бы просто не форкнуть какой-нибудь готовый браузер и не обвешать его плугинами?
>>420403 Парсинг страницы практически на любом языке будет занимать одинаковое количество ресурсов. Я бы конечно предложил сразу все писать на сишечке, но половина анонов сразу убежит, другая напишет неюзабельное говно через джва года.
>>420420 Вот охота получить такое же быстрое, только чуть красивше.
>>420393 https://www.mozilla.org/en-US/research/projects/ >Servo is an experimental project to build a Web browser engine for a new generation of hardware: mobile devices, multi-core processors and high-performance GPUs. With Servo, we are rethinking the browser at every level of the technology stack — from input parsing to page layout to graphics rendering — to optimize for power efficiency and maximum parallelism. >Servo builds on top of Rust to provide a secure and reliable foundation. Memory safety at the core of the platform ensures a high degree of assurance in the browser’s trusted computing base. Rust’s lightweight task mechanism also promises to allow fine-grained isolation between browser components, such as tabs and extensions, without the need for expensive runtime protection schemes, like operating system process isolation.
У тебя на пике по моему webkit рендерер. То есть тот же Хром без яваскрипта.
Можно использовать старый Хром (он ест раза в 2 меньше, но его трудно достать), или например отключить яваскрипт везде кроме избранных сайтов — потребление памяти снижается (я мерял, попробуй сам сравнить например html страницу c тестом и страницу с пустым тегом script). Можно подкрутить разные настройки типа размеров кешей — современные браузеры используют большие кеши в памяти чтобы создать видимость более быстрой работы.
Фаерфокс насколько я знаю, в истории сохраняет страницу полностью, со всем состоянием JS машины, а это тоже немало.
Также, в современных браузерах используется композитинг, то есть страница состоит из слоев и если у тебя экран большой, а на странице много CSS3 свойств типа теней, то эти слои вносят свою лепту в потребление памяти. А если ты их уберешь, то рендеринг начнет тормозить.
В общем, выгоднее форкнуть или подкрутить существующий проект. Алсо, прежде чем заниматься оптимизациями, нало померять, например на N самых популярных сайтах, кто и сколько памяти расходует и на что. Может эта память например кеширует распакованные картинки чтобы они быстрее отображались (распаковка блоьшого джипег может занимать 50-100 мс на хорошем CPU, а современные вебмастера люябт на фон страницу залепить джипег, пнг или даже видео).
Еще по моим скромным наблюдениям много ресурсов могут тратить сторонние скрипты. Это реклама (каждый рекламный блк это ифрейм со своей JS машиной в которую может быть загружено несколько тяжелых скриптов вроде джейквери), счетчики статистики (яндекс метрика например шлет аякс запросы чуть ли не на каждое движение мыши — и эти запросы отнюдь не бесплатны), большие тяжелые библиотеки.
Разумеется, померять, проанализировать и разобраться в ситуации вряд ли под илу разработчикам уровня pr. Возьмите старую Оперу, отключите в ней яваскрипт и флеш и она будет потреблять мегабат 200-300 на 40-50 вкладок. Только вот ее движок на современных сайтах тормозит нещадно (и криво их отображает) и прокрутка напоминает слайдшоу.
Я лично просто взял привычку закрывать вкладки в Хроме и докупил памяти.
> to optimize for power efficiency and maximum parallelism. Это значит он будет есть повышать скорость загрузки и рендеринга ценой потребления памяти, так как на мобильных устройствах ее относительно много, и вкладок обычно много не открвыают (то есть ты можешь открыть много но они все равно выгрузятся).
>>420494 >пердолинг с кешами и прочей хуитой вместо достойной нормального человека оптимизации коджа. Инфа 100%, что webkit писали криворукожопые обезьяны из гугла. Про V8 вообще умолчу. И да, страницы вообще не нужно кешить, ибо малые размеры.А вот тяжелые файлы - да, но не в ОЗУ, как это сделано у хромопидоров и их подсосков. В общем всё что ты написал - хуита малой оптимизации, в который выйграется максимум 50-100 мб, против 3 гб.
>закрывать вкладки в Хроме и докупил памяти. Ты просто не осознаешь какой ты дибил.
>Пока меня интересует сама возможность запиливания своего браузера разными анонами
Не существует такой возможности. Современные браузеры - это самое сложное програмное обеспечение создаваемое людьми, это сложнее чем написать ОС или ПО для запуска ракеты в космос. Не существует даже одного отдельного человека, который обладает всеми необходимыми для написания браузера знаниями.
хотелось бы что бы браузер был менее прожорлив, но так-же хотелось бы что бы он был более управляем. как emacs (emacs lisp), stumpwm (common lisp).
вот к примеру у firefox есть tab groups (ctrl+shit+e). так-же табы есть у pdf/djvu читалки (qpdfview), но нет групп. так-же мне хотелось быть регулярно делать backup табов и групп.
мне кажется такое можно было сделать универсально с помощью window manager для всех приложений: {math-group: [{exec: firefox, url: url, page-top-offset: ...}, {exec: firefox, url: ...}...
если будет какой-то механизм для обмена (url page-top-offset).. между WM и приложениями.
не разбирался с firefox, но мне кажется, будет сделать легче между lisp браузером, где я могу получить текущий url, и lisp WM. может у Xorg есть какие-то properties для каждого окна. не думал пока над этим.
>>420494 >Фаерфокс насколько я знаю, в истории сохраняет страницу полностью, со всем состоянием JS машины И при переходе "НАЗАД" грузит её с сервера. Либо ты чего-то не знаешь, либо это такой жуткий быдолкодинг, что мне и добавить нечего.
>>420539 >>420551 Два чаю этим ребятам, нужно совершенно новый принцип динамического интернета. А не устаревшее говно(http) на костылях(php с одной стороны и js c другой) что бы быть хоть сколько-то похожей не на парашу из 90-х. Сейчас веб по факту нихера не 2.0, сейчас все тот же 1.0, с кучей побочной хуйни, а вот когда изобретут простой и легкий способ передачи данных между сервером и клиентом, без кучи побочной хуйни, причем в реальном времени, а не как сейчас пошагово, то и будет настоящий 2.0
Берись, станешь богаче Цукенберга и Билла Гейтса, базарю. изучаю_вебмакакинг_и_охуеваю_от_того_как_там_все_ебано-кун
>>420559 Это всё уже есть, не знаю в каком говне ты там колупаешься, но у меня в проекте одни вебсокеты, вебмессаги, шаред воркеры, и т.д.
А так да, реализовать весь веб через модель акторов, например, был бы вин, но если у йоба-коммитетов получилось говно, то зекачеры соснут однозначно и прямо вначале.
предлагаю зделать распределенную борду, суть такова. полностью распределенная - вся инфа храница на клиентах. одна точка входа в виде js-SPA приложения, которая может хоститься где угодно. вся информация передается зашифрованно по хитрожопому протоколу типа tor, чтобы все было анонимно. джва года хочу такую борду.
>>420584 Обоснуй. Единственная достойная конкурентная модель с детонационной семантикой и формальный обоснованием же. Олсо, на практике тоже самая удобная и расширяемая.
Смоделировать веб через акторов вообще нехуй делать, другое дело реализовать.
>>420594 >на практике тоже самая удобная и расширяемая. Бесполезная хуита с заявкой на параллелизм и с глубоким отсосом у отладки. Да и объектно-ориентированные языки уже давно придуманы. Плюс, асинхронность здесь уже определяет сам погромист, разделяя данные.
>>420599 >с заявкой на параллелизм Параллелизм как раз не заявляется, потому что конкурентность =/= параллелизм. Будет обеспечен параллелизм или нет зависит от реализующей платформы. >и с глубоким отсосом у отладки Какая нахуй отладка, это математическая модель, всё зависит от реализации. В том же ирлонге весь месседж пассинг, хоть локальный, хоть распределённый отлаживается на нехуй делать. >Да и объектно-ориентированные языки уже давно придуманы. Это тут причём? И что тебе мешает выразить эту модель в термах ООП, как в Scala или Java Akka? > Плюс, асинхронность здесь уже определяет сам погромист, разделяя данные. Так на акторах задаются как асинхронные так и блокирующие протоколы. И данные заизолированы, sharing nothing же.
Короче, я так понял ты просто нихуя не сечёшь в этой теме, какой-то хуиты начитался по верхам и кукарекаешь.
>>420594 > Единственная достойная конкурентная модель с детонационной семантикой и формальный обоснованием же. Олсо, на практике тоже самая удобная и расширяемая. Зачем нужны акторы, если есть каналы?
>потому что конкурентность =/= параллелизм Википедия грит, что ты пиздунишка: >Concurrent computing is a form of computing in which several computations are executing during overlapping time periods – concurrently – instead of sequentially (one completing before the next starts).
>Какая нахуй отладка >В том же ирлонге весь >легко отлаживается Нечитаемый пиздец, ты хотел сказать?
>выразить эту модель в термах ООП Нахуя? Костыли костыльчики?
>я так понял ты просто нихуя не сечёшь в этой теме Двощую. Вижу ты просто начитался хуиты на эту тему и кукарекаешь, когда можно сделать всё несколько проще, со старым добрым С++.
>>420662 Тебя не смущает что в этой же статье >Concurrent programming is usually considered to be more general than parallel programming... Конкурентность - это модель вычисления, это больше свойство кода и моделирования. Паралельность - это выполнение, это свойство реализации. Конкурентные программы могут выполняться не параллельно. Некоторые платформы реализуют распаралеливание конкурентных программ, тот же Erlang, некоторые нет.
>Нечитаемый пиздец Это ты вообще о чём?
>Нахуя? Костыли костыльчики? Ты что дибил? Акторы это мат модель, выразить её можно любыми термами, при чём тут костыли? Вот в Scala, например, очень хорошо получилось, ты лучше бы посмотрел сначала, а потом ебало разевал.
>со старым добрым С++. А понятно, тупоголовый слесарь, залазь обратно под шконарь.
Даже годибилы знают что конкуренси != паралел, но только не крестоблядь. Крестобляди не нужны акторы, не нужно CSP, ССS, она останется верна архаичному контрол флоу на локах и блокировках как диды писали, в лучшем случае может высрать очередной FSM. Эриксоны с нокиями и моторолами позаменяли крестоговно на ирлонк ещё 10 лет назад, но креторабу это ничего не говорит, он будет превозмогать дальше.
>>420673 >..вместо простого и доброго OOP Как на мэйнстрим ООP выразить конкуретность? В нём объект и процесс (или тред) - разные сущности с разным временем жизни.
Вообще бывают конкурентность без параллельности (тот же ивент дривен), параллельность без конкурентности (всякая хуйня типа #pragma omp for) и конкурентность и параллельность вместе (когда компилятор или виртмашина автоматически распараллеливают конкурентный код в лучшем случае, или когда долбоёб байтораб задрачивает всякие локи, семафоры и т.д - в худшем).
>>420677 >В нём объект и процесс (или тред) - разные сущности Ебать дибил. Процесс - сущность действия, производимая над неким объектом(данными) в некий момент t, позволяющая повлиять на выполнение действия. ООП позволяет распределить часть объектов в систему и получить конкуренси (при условии, что DATA не будут связаны, что в вебе частично возможно) без пердолинга на функциональщине и прочих псевдо-ооп (акторы), как это любят делать функципетушки, а потом запутываются и тонут в собственном говнокоде (i.e. haskell, Erlang).
>>420393 Вам нужен по меньшей мере один человек, который прочёл стандарт от начала и до конца несколько раз, потом в обратном порядке не менее одного раза, затем рандомно по всей спецификации и ещё раз, следуя по кросс-ссылкам. Это касается как whatwg спецификаций, так и w3c спецификаций. Если у вас будет такой человек, то он вам скажет, почему эта затея по настоящему глупая
>>420694 Вут? Мы хотим создать СВОИ™ интернеты. Дропнул чтение спецификаций w3c, после прочтения нескольких первых глав. Такой лютой, тяжеловесной хуиты, без нормального оглавления и без лишних сложностей я еще не встречал.
проиграл с треда, вот уж действительно история повторяется, уже при мне 3 или 4й раз хотят сделать i2p борду и интернет. можете найти на гугло коде если не удалили, концепции прошлых участников.
Давайте лучше думать о написании своего браузера, для начала.
Итак, у нас есть: 1. links 2. netsurf 3. dillo 4. hv3
Осталось натырить кода/сделать свое. На днях попробую сделать "прокручиваемый канвас", который будет рендерить прямоугольнички с текстом/графикой. Можно будет кормить его по UDP байткодом, а в каком-то говне вроде пиздона изгиляться с парсингом всех этих ваших CSS и генерить layout.
Чот я не понял, а за счет чего наколеночное говно без идеи должно стать более эффективным в плане производительности и потребления памяти? В чем понт пилить очередной uzbl/dwb/surf/luakit/dildlo/hbro/тысячи их? Был бы смысл, если б какой-нибудь из вышеперечисленных огрызков к servo прикручивали, а так...
>>420849>>420854>>420856 Куки "как есть" зло и не нужны, но без них хуй куда залогинишься, даже поиском порой хуй воспользуешься, поэтому "куки менеджер" - это больше, чем просто хранилка кей-велью с идиотским поведением, доменами, путями и кучей флагов.
>>420685 >прочих псевдо-ооп (акторы) Поржал в голос с крестопидора-идиота. Акторы это и есть настоящее, а не псевдо-ооп. Просвещайся, чухан: http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en Про сетевое взаимодействие там тоже есть, кстати. >ООП позволяет распределить часть объектов >распределить часть объектов в систему и получить конкуренси >получить конкуренси (при условии, что DATA не будут связаны >DATA >псевдо-ооп (акторы), как это любят делать функципетушки >тонут в собственном говнокоде (i.e. haskell, Erlang). Вообще, ты бы поучился грамотно мысли выражать. Пока слышно только невразумительное кукареканье.
Вообще я тоже думал о таком. Запилю свой собственный браузер сразу после того, как закончу писать распределённый MMO-движок и впилю собственую операционку. После всего этого я возможно запилю свой ЯП даже на данный момент меня устраивают те ЯП, что уже есть.
>>420925 >запостил ссылку Смотри-ка, а ты не так плох, мартыхан. Уже начинаешь пытаться, что-то соображать, вон, ссылочки пошли. Того и гляди, соображать начнешь. Кстати ты бы прочитал, статейку-то, а то неразборчивое мямлянье да вскукареки с твоей параши только утомляют цивилизованных господ вроде меня.
>Акторы это и есть настоящее, а не псевдо-ооп. Необучаемость как есть. Процитирую, специально для тебя, бздунишка: >The Actor model adopts the philosophy that everything is an actor. This is similar to the everything is an object philosophy used by some object-oriented programming languages, but differs in that object-oriented software is typically executed sequentially, while the Actor model is inherently concurrent. http://en.wikipedia.org/wiki/Actor_model
>>420931 >object-oriented programming languages >object-oriented software >o-o-o-ko-ko-pok-pok-o-o-kok Чушок, ты вообще понимаешь что такое ООП? Причем здесь конкурентность? Я ему Алана Кея, он мне какую-то статью из википедии.
>>420927 > После всего этого я возможно запилю свой ЯП даже Блядь, это самое простое из всего, что ты назвал. > на данный момент меня устраивают те ЯП, что уже есть M-M-MAXIMUM GOVNOED
ИТТ дебил думает что смолток - это и есть модель акторов.
В смолтоке нет акторов, сюрприз. И смолтоковский месседж пассинг никак не связан с конкуретностью, это был тот же вызов метода, только с динамическим диспатчем и проксированием.
Актор =/= объект, потому что объект не конкурентен, он не может выполнять что-то одновременно с другими объектами, если его не запихнуть в отдельный тред. Тред - конкуретный примитив, актор - конкуретный примитив, объект - нет.
Главный проёб Алана Кея в том, что он хуй знает зачем взял месседж пассинг из модели акторов, чтобы выражать через него ПОСЛЕДОВАТЕЛЬНЫЕ операции, в то время как они более явно выражаются обычным вызовом метода. Акторы же нужны для выражения конкурентных операций.
Спроси у гейос-девелоперов, сильно им их месседж пассинг помогает для написания конкуретного кода или они по старинке ебутся с локами и синхронизациями. Без подключения всяких inspired by Erlang актор либ типа VVActors, разумеется.
По сути, Джое - первый кто запилил акторы в промышленный язык, и единственный кто не проебал главное правило всей концепции - sharing nothing. Сразу видно, что он осилил диссеры Хьюитта и Агха, в отличие от всяких Аланов-хуяланов, понапиздивших по верхам модных фитч, чтоб было.
>>420958 >ИТТ дебил думает что смолток - это и есть модель акторов. Нет, я думаю что актор это объект. >Актор =/= объект, потому что объект не конкурентен Ты знаешь что такое необходимое и достаточное условие,? >он не может выполнять что-то одновременно с другими объектами, если его не запихнуть в отдельный тред. Тред - конкуретный примитив, актор - конкуретный примитив, объект - нет. >взял месседж пассинг из модели акторов, чтобы выражать через него ПОСЛЕДОВАТЕЛЬНЫЕ операции Пруф? Статью неосилил чтоле? Короче, специально для умственно отсталых: >OOP to me means only >messaging, есть >local retention and protection and hiding of state-process, and есть >extreme late-binding of all things. есть Ни о какой конкурентности речь не идёт. Все, соси хуй, и так разжевал уже все для дауна.
Вангуя батхёрт печеньеедов приведу один пример, показывающий превосходство стораджа над куками.
Куки гоняются туда сюда при каждом запросе. Такова их природа. Ключи с хранилища можно запрашивать только при доступе к конфиденциальной информации.
Мало того, что сокращается количество гоняемого трафика, так ещё и снижается нагрузка на сервер (учитывая большое число клиентов), плюс повышается безопастность, так как меньше возможностей перехватить сессию.
>>420958 Не буду тратить много времени на разбор твоего поста. >Тред - конкуретный примитив, >актор - конкуретный примитив, >объект - нет, он не может выполнять что-то одновременно с другими объектами Ебать, ну так это проблемы shell, то бишь VM. При надобности, конкуренси (как я уже упомянул ранее) можно запилить и с помощью ООП, изъебнувшись с потоками. При этом разницу что на реализации акторопараши, что на ООП(хотя бы в smalltalk) никто не заметит (хотя зависит от хуевости VM). Плюс можно запилить нативную конкуренси в реализацию ООП, но тут на выходе мы получим реализацию акторов.
>>420969 >Ни о какой конкурентности речь не идёт В определении ООП, дебил. >>420972 >Начинается со слов >>The actor model in computer science is a mathematical model of concurrent computation Ну и как же это противоречит тому что я говорю? Модель акторов это и и модель конкурентных вычислений, и представление ОО-парадигмы.
>>420958 Дай ссылки на диссеры Хьюита и Агха, плиз.
>>420959 И ты тоже дай ссыль, я как раз такой стартап задумал.
>>420985 Ты забыл, что нативные C-шные структуры, указатели и особенно концепция памяти напрямую ложатся на фон-неймановскую архитектуру. Чего не скажешь про их ООП-шные реализации — компилятор должен быть либо сильно умным, либо засранным ad hoc оптимизациями, чтобы смочь нормально оптимизировать объект класса Pointer[X] и класс Memory.
> При надобности, конкуренси (как я уже упомянул ранее) можно запилить и с помощью ООП, изъебнувшись с потоками. Не надо изъёбываться. Есть сепаратные объекты. См. «Основы объектно-ориентированного программирования» Б. Мейера.
>>420997 Я так и не понял, как ты собрался состояние сайта хранить на клиенте. Вот смотри, подключается к твоему интернет-магазину клиент. Выбирает дилдо, нажимает под ним кнопку «в корзину». Его браузер, соответственно, подключается к твоему серваку, отправляет JSON «{tovar: "dildo modeli DLDX-100500", deistviye: "polojit w korzinu"}», отключается. Потом меняет разрешение экрана, меняет настройки прокси браузера, до кучи у него еще браузер крешится и перезапускается, он снова заходит на твой сайт и пытается завершить покупку. Как при помощи технологии локального стораджа сервак поймёт, что вновь подключившийся клиент с принципиально новым отпечатком браузера и чистой RAM — это во-о-он тот клиент, у которого в корзине лежит дилдо, 1 шт.?
>>421016 >вновь подключившийся клиент с принципиально новым отпечатком браузера и чистой RAM — это во-о-он тот клиент, у которого в корзине лежит дилдо, 1 шт.? Никак. Да это и не нужно же. Главный сценарий примерно следующий: - чел чего-то набивал вроде длинного текста - пнул системник и комп отрубился - после перезагрузки чел продолжил вбивать не с начала, а с того места, где закончил
Вы все, блядь, ебанутые. Вы рассуждаете в ключе "есть технология - как ещё применить?", а надо "есть задача - какие для этого есть технологии?". Ведь есть тысячи разных методологий и сами по себе они не являются верными или неправильными. Для самой чудесной штуки можно придумать ситуацию, когда это будет вредным.
Кирпичи это хороший материал. Но делать из кирпича табуретки по меньшей мере глупо же.
>>421017 Ты понимаешь, что ты поехавший, блядь? Я тебе говорю, что мне нужно состояние корзины сохранять между подключениями, а ты мне: «Вы рассуждаете в ключе "есть технология - как ещё применить?", а надо "есть задача - какие для этого есть технологии?"» Чего несешь? Вообще охуеть.
>>421016 >Ты забыл, что нативные C-шные структуры... ООП на структурах тоже эффективностью в т.ч. и в плане производительности не отличается. Но речь-то шла о принципиальной нереализуемости.
Хочу, чтобы кто-нибудь сделал headless-браузер. Требования такие:
1. Потребляет минимум RAM 2. Может сериализовать текущее состояние DOM в файл а затем восстановиться из этого состояния обратно 3. Предоставляет API для автоматизации страниц (поиск элементов в DOM-дереве, эмуляция мышки, скроллинга, ввода с клавиатуры, снятие скриншота) 4. Не имеет уникальных особенностей для идентификации через JavaScript, т.е. косит под какой-нибудь существующий браузер Firefox/Chrome/IE 5. Кроссплатформенный
Сейчас приходится довольствоваться связкой phantomjs+selenium, которая из этого списка может похвастаться только п.5
>>420393 Я знаю, на чем мы будем пейсать новый броузер: >BESEN is an acronym for "B ero's E cma S cript E ngine", and it is a complete ECMAScript Fifth Edition >Implemention in Object Pascal, which is compilable with Delphi >=7 and Free Pascal >= 2.5.1 (maybe also >2.4.1).
Близок к запиливанию браузера на bash + perl + imagemagick. Пиздец, но лучше ничего не придумалось. Как сделать совместную работу по проектированию? Ничего не понимаю.
>>427617 >онли на плюсах >слайдшоу Никаких плюсов! Только ассемблер. Эти ваши примитивные компиляторы никогда не сгенерируют более эффективный код, чем написанный программистом вручную.
>>420393 >Opera сыграла в ящик, Firefox с каждой версией все отвратительней, остальное и браузерами назвать сложно. Так может вот это остальное слегка допилить до того, что можно будет назвать браузерами, а не пилить заново?
>>428751 С движком нужно трахаться потому, что существующие движки вроде gecko и webkit — кривое говно, не способное даже в подобие параллельности (пример: http://www.youtube.com/watch?v=nwI69Smjhx8. На самом деле, всё ещё хуже, так как, емнип, существующие движки не способны пересчитать страницу частично после изменения DOM, только целиком) и с тяжёлым историческим наследием со времён Mosaic.
Хуле вы хуйней страдаете? Взяли бы hbro, накалякали в глэйде интерфейс, запилили необходимый функционал.
Design principles ° Do one thing well A web browser is not a {window|bookmarks|history|download|passwords|package} manager, let alone an operating system. A web browser retrieves, renders and traverses web pages, period. ° Keep It Simple, Stupid The program should be written with simplicity in mind, and without obsession for performance, features or release frequency. It should boot instantly, consume little memory and offer an uncluttered graphical interface. The code should be easy to grasp (well, as long as you speak Haskell...) to encourage users to hack it. Simplicity provides lightness, scalability, stability and maintainability. ° Extensible Configuration system should allow users to implement extra features. External programs should be able to query/command the web browser. ° Good defaults The default behavior should be suitable for users that cannot afford or don't want to spend (waste ?) their time in tweaks. ° Keyboard driven Keyboard control should be made as much convenient, with as little mouse intervention, as possible.
>>428751 >Тем не менее, ОПа не устраивал интерфейс браузеров, дык подпилить интерфейс, зачем с движком трахаться? ОП на связи. Свое путешествие в мир отсосов я начал именно с того, что матерясь взял вебкит и начал его "доводить до ума". К сожалению, получилось не очень. Вот то, что у меня не получилось:
1. Запретить ему ВСЕ редиректы. А то твиттер меня редиректит и грит "включить жабоскрипт". Хороший браузер отобразит твиттер как есть, если кто и будет послан нахуй - авторы твиттера, а не я.
2. Запрет на исполнение всех скриптов есть, а вот запретить часть скриптов - хуй.
3. Как запретить браузеру лазить на другие домены? Можно повесить хук за загрузку урла, но сложно понять что случилось - была нажата ссылка, сработал жабоскрипт, оно редиректится или произошло что-то еще. То, что я сейчас высрал - часто загружает лишнее, но блокирует переход по ссылкам. Типичный кондишонрейс.
4. Я никак не контролирую кеш или кукисы, о безопасности можно даже не заикаться.
5. Поиск текста на странице - вроде простая штука, а как сделать? В гугле можно найти способы залезть в недокументированные вызовы.
Есть еще куча всякой хрени, которую я или закостылял, или просто не смог решить никак вообще. С горя я написал стрипалку дизайна и вообще собираюсь переходить на отображение текста, вообще без разметки. Да, мне абсолютно похуй ваша параллельность, прогрессивная загрузка и прочее. Мне нужен браузер, который будет рендерить страницу (целиком) за 0.01 секунды, при этом я его смогу направить на любой сайт и не остаться с вирусней/малварей и прочей дрянью. Ближе всех под эти требования попадает links. Но вот загрузка картинок в нем через жопу (лично патчил, чтобы он сосач отображал), а о проходе теста клаудвафли и говорить нечего. Я уже не говорю, что оно лазиет на разные домены, вызывая потенциальный XSS. Ну и соременные "дивные" сайты в нем выглядят мегауродски. С каждым днем табличных сайтов все меньше.
Вообще, я очень долго хотел перепилить линкс. Линкс - это ОЯЕБУ сколько всего в одном флаконе: 1. свои библиотеки графики (картинки, скейл и т.д.) 2. своя подсистема графики (драйвера для вывода) 3. свои библиотеки шрифтов 4. своя подсистема работы с сетью 5. свой layout engine, который парсит HTML без промежуточного DOM И вот погружаешься во все это и просто охуеваешь. Я лично не смог разобраться во всем, сделал только штук 5 разных патчей, да и те не отослал никуда. Всякие Блинки и Сервы трогать боязно, там точно не разберусь.
Было бы круто, если бы можно было сделать "кубики" для браузера, из которых его и собирать, возможно даже в рантайме. Т.е. layout engine отдельно, шрифты отдельно, а "шкурки" со всякими букмарками - отдельно. Причем морда - это наверное самое сложное, вон посмотрите на операстов и то, что у них получается нынче.
>>429667 > линкс Может всё-таки лучше netsurf? > Всякие Блинки и Сервы трогать боязно, там точно не разберусь. Понимаю. Тем не менее, ты читал http://limpet.net/mbrubeck/2014/08/08/toy-layout-engine-1.html? > Было бы круто, если бы можно было сделать "кубики" для браузера, из которых его и собирать, возможно даже в рантайме. Т.е. layout engine отдельно, шрифты отдельно, а "шкурки" со всякими букмарками - отдельно. Причем морда - это наверное самое сложное, вон посмотрите на операстов и то, что у них получается нынче. Тебе может быть немного интересно вот что: http://breach.cc/
>>429670 >А ты уверен, что тебе нужен именно браузер, а не клиент к двачу, свитору, etc? И "да", и "нет" одновременно. На этот ваш свитер я захожу 1 раз в месяц (или того реже), матерюсь от того, что браузер тормозит/редиректит/вылетает и больше туда стараюсь не заходить. Поэтому держать выделенный клиент для него я согласен только в виде 2-3 регекспов, которые выдерут все со страницы и красиво мне покажут в простом textview.
Еще одна причина - мне надо гуглить, следовательно я попаду на сайты вида vasya-pupkin.narod.da.ru, а делать клиенты под них - сам понимаешь, занятие малореальное.
Поэтому если браузер будет "знать" как распарсить пару сотен сайтов - хорошо, но все равно нужно в первую очередь браузить, чтобы бродить по сети и читать всякое разное. Я вот в последнее время полюбил читать блоги разных разработчиков, очень удобно прокрастинировать с планшета, а там десяток социальных кнопок подгружается и пиздец, пользоваться невозможно. Но ведь статьи от этого хуже не стали?
>>429672 >Может всё-таки лучше netsurf? По идее, да. Достаточно красивый код, правда нахуя они там столько правил для CSS нагенерили я не понял. Правда я его уже третий год пытаюсь собрать под сперму, все руки не доходят. В идеале, мне нужен браузер под сперму и ведроид, что там с портабельностью плохо уже помню. Надо будет выковырять layout engine из него.
>Тем не менее, ты читал http://limpet.net/mbrubeck/2014/08/08/toy-layout-engine-1.html? Конечно читал, правда последние серии про рисование не осилил, сильно был жар в заднице. Ведь основная цель браузера - это всеже работа с текстом, а не рендеринг прямоугольничков. В статье совершенно никак это не показывается.
Алсо, похоже я как-то давно читал перевод этой статьи или похожую статью, тоже рассказывалось про анонимные блоки, но в несколько ином контексте. Лично я не понимаю зачем такие сложности, зачем инлайн и блочные элементы так разделять, я бы засовывал это в простой связный список. Мне это понять несколько сложно.
>Тебе может быть немного интересно вот что: http://breach.cc/ Блять, мою задумку все же реализовали! Правда, уходить от хрома, чтобы придти к хрому и ноде? Как экспериментальный проект, штука наверняка интересная, но я убежал оттуда в ужасе, представив это на десктопе.
>>429696 Опять же, проблемы движка. Вот почему так нужен Servo.
>>429727 > Ведь основная цель браузера - это всеже работа с текстом, а не рендеринг прямоугольничков. Когда-то давно это было так, сегодня же не совсем. Даже в бложиках сейчас много динамики. > Как экспериментальный проект, штука наверняка интересная, но я убежал оттуда в ужасе, представив это на десктопе. Почему? Меня лишь смущает JS вместо языка программирования (хотя возможность компилировать в него другие языки несколько сглаживает ситуацию).
>>420393 Можно парсить HTML с помощью libxml2, самое сложное вообщем-то состоит именно в этом, в построении DOM, парсинге CSS, построении slyte tree и layout tree.
Всё это сделать, и считай браузер готов, осталость только отрисовку на OpenGL прикрутить. Правда, браузер будет супертормозной всё равно. Но что угодно лучше, чем говно которое сейчас есть.
>>431135 >Можно парсить HTML с помощью libxml2 Нельзя. У тебя половина сайтов работать не будет. >самое сложное вообщем-то состоит именно в этом Нет. Ещё жаваскрипт, как минимум.
>>420694 Вот чем отличаются англоязычные ресурсы от русскоязычных - на первых тебе скажут so cool let's hack it! и может даже помогут немного, а на вторых тебя пошлют подальше с мутным обоснованием почему то что ты предлагаешь работать не будет. Может так получается потому что люди в странах третьего мира ненавидят свою жизнь и работу, и не имеют времени на pet projects.
>>431586 Вот чем отличаются англоязычные ресурсы от русскоязычных - на первых бегают розовые пони и может даже какают бабочками немного, а на вторых при получении малейшей критики жалуются: А В ЕВРОПИ ВСЁ ПАДРУГОМУ. Может так получается потому что некоторые до сих пор думают, что люди в джинсах и с жвачкой просто не могут какать не бабочками.
Я не тот анон, но тоже считаю, что полноценный движок силами анонов нереализуем, т.к. не хватит никакого энтузиазма, не говоря уж об остальном.
>>431663 собрал, падает часто. При любом переходе по ссылке на tumblr, youtube, больше ничего не открывал. Неюзабельно. Хотя, идея проигрывать видео во внешнем плеере мне очень понравилась.
>>432442 Я тебе больше скажу. Я тут почитал NPAPI, оно хоть и подыхает, но все еще есть. Так вот, при инициализации, происходит слияние плагина (говнофлеша) и всех кишок браузера, которые можно дергать из плагина. Надо сказать, что на этот интерфейс ложится даже менеджмент памяти. Будет сделать не просто, но было бы очень полезно. Сделать это надо ради хуков на все-все возможные функции. Хуки эти транслируют события в некий абстрактный интерфейс, откуда можно было бы скармливать события простым скриптам, хотя бы на JS.
А дальше можно делать все быстро и смешно. К примеру, заходим мы на ютуб, вимео, всякие говносайты с порнухой. Там открывается родной флеш-плеер, проходит всяческие авторизации, считает хеши и прочее говнецо. Так как это настоящий оригинальный флеш, то он пройдет абсолютно любые верификации. И как только мы отловим вызов, окончившийся video/x-flv, то СНОСИМ ПЛАГИН НАХУЙ БЛЯТЬ, СНОСИМ НАЧИСТО! На этом месте можно аллочить мплеер или просто вывести прямую ссылку на видео, запустить внешний плеер и все такое. И смотреть кино без говнофлеша. Можно делать АЗАЗА и БУГОГА.
Кстати, теперь я хочу таким образом рендерить все остальное, даже простые кортинки.
>>432517 Линкс есть в графическом виде, даже с кортинками.
>>432522 Двачи - это отличный пример. Вспомни куклоскрипт, без которого многие считают двачи неюзабельными! Вот он, пример альтернативного клиента, который запускается без спроса со стороны сервера и облегчает жизнь пользователю. Особенно в свете последних событий, когда обезьяна начала блокировать куклоскрипт из-за политических разногласий. А если клиент (браузер) полностью самописный, то тут уже ничего не поделаешь, ничего не заблокировать и никак не навязать пользователю своих правил.
>>432524 Стековерфлоу отлично выглядит без JS, все заебись. Правда, я его только читаю, ничего там не пишу.
>>432842 Про линкс в курсе, запостил скрины по-приколу. Что до графической версии, то там вырвиглазные шревты, нет вкладок и нет жс. Куклоскрипт туда никак не присобачить, и вообще, для его работы надо разрешать и жс, и куки, если мы про лису.
>>432941 > они там вкомпилированы и за это я готов любить линкс еще больше. Равно как и за пост-процессинг шрифтов. Спасибо я в курсе. Это не делает их менее вырвиглазными. >за это готов любить линкс ещё больше Это очень нишевое применение, тупо как тестер работы интернета на мироволновках, не более. >и нахуй не нужны, у меня открыты сотни окон оного. Когда браузер почти не кушает ресурсов - можно себе позволить Да просто непривычно. >выпилен за ненужностью Ну у меня двачи не работают, например, про контактики всякие я вообще молчу. >но его можно переписать как часть браузера (расширение) и JS для этого совсем не нужен Переписывай. Ещё для твиттера и ютуба костыли напиши.
>>432956 Сижу на сперме7 ультимейт с клиртайпом, шрифты линкса - лучшие. Для поддержки двочей я его патчил, впрочем нынче и ванильная версия работает, обезьяна починила.
Появилась идея и проблема. Каждый сайт должен иметь свои настройки. К примеру, какие куки блокировать, какие файлы можно загружать, какие домены являются доверенными. К примеру, я могу разрешить ходить на yandex.net отсюда, но только за капчей.
Подумав шире я понял, что к любому объекту можно применить правила фильтрации, спуфинга и скриптинга (эмуляции). К примеру, работа с сетью и URI: http://example.com/ads.png - отфильтровать (просто не загружать) http://example.com/script.js - подменить на свой (даже если его нет) http://example.com/feed.rss - запустить локальный скрипт, который распарсит главную и сделает RSS
Аналогично с доменами, куками, CSS и даже с селекторами DOM. Да с чем угодно, до включения/выключения события onclick/onmousemove
Как вы понимаете, настроек надо допизды и для каждого сайта, каждой куки, каждой формы свои настройки. Какое хранилище мне заюзать? И чтобы памяти много не юзать и к диску не обращаться? Я сразу думаю делать мобильное приложение, там с памятью и IO туго все. В голове пока вертится только фильтр Блума и всякие хеши, но это еще больше только увеличит использование памяти.
>>420559 >А не устаревшее говно(http) ох ебать, http это просто протокол передачи файлов, хули ты до него доебался? >что то бы быть хоть сколько-то похожей не на парашу из 90-х ебаные хипстопидоры, это вы скатили интернеты в говно, в 90-х сайты были прекрасны - только текст и графика, а потом пришли петухи с "хачю шобы музыка играла и снежинки падали и закругленные края!", и пиздец
>>436453 Одно хорошее правило проебали-таки. Правило ненавязчивого жаваскрипта. Сейчас без этого говна ничего работать не будет. И ладно бы, нормальный язык и нормальные работники, так хуй там. Страничка документации по qt при любом действии подвешивает браузер на 5-6 секунд. Но все жрут и нахваливают. И это в то время, когда производители железа жопу рвут, чтобы экономить энергию.
>>436488 > Страничка документации по qt при любом действии подвешивает браузер на 5-6 секунд ...из-за убогости современных движков, которые не могут в параллелизм. Как починить — см. Servo.
>>436532 >...из-за убогости современных движков, которые не могут в параллелизм ты охуел что ли, просто вывести форматированный текст ему уже нужен параллелизм
>>436797 Что есть словарик? хеш? Нет, не пробовал, списки в хешах хранить жутко неудобно, на перезапись много ресурсов. А списков у меня много. Да и запрос, скажем кукисов с учетом path сделать сложно, надо все и вся перебирать
>>436225 >>454777 У меня от тебя ПРЕЖДЕВРЕМЕННАЯ ОПТИМИЗАЦИЯ. Уже наговнякал бы с обычными хешами, а потом прикрутил какой-нибудь berkdb. Но нет, надо зациклиться на какой-то малозначимой хуйне.
Пока меня интересует сама возможность запиливания своего браузера разными анонами. Так как у меня уже есть опыт коллективной разработки, в том числе на бордах, я прекрасно знаю, что все пересрутся еще на этапе выбора языка. Потому идея первая:
1. Каждый пишет что может и на чем умеет
В самом деле, хоть пиздон, хоть жабка, хоть луа, потом по сокету это можно высрать в процесс с HTML-рендерером, оттуда уже готовые квадратики с битмапами в процесс с рисовалкой, а его я (или кто-то другой) слепим на сишечке и будет все шустро.
2. На первых порах можно юзать кучи библиотек из разных языков
Можно быстренько будет слепить свой днс-кешер, http-кешер, работу с кукисами, http и https, скейлеры графики и еще миллион низкоуровневых утилит, которые будут нужны в процессе отображения странички. Посмотрите на links, половина которого они и составляют.
3. Можно тырить код из Links / Netsurf, если кто-то осилит собрать блинк или v8 то тоже милости просим.
4. Срать на стандарты, делаем удобный браузер, а если там где-то текст на 10 пикселей уедет в сторону - ну и хуй с ним. По мотивам http://habrahabr.ru/post/246857/
В общем, интересуюсь теорией и практикой написания подобной опердени с совместными усилиями анонов, хочу услышать слова о ненужности и своем идиотизме. Примерные этапы на картинке, чем больше шрифт - тем важнее. Самое главное, изобрести "сервер кукисов" или "сервер закладок" так, чтобы он не кушал больше всех остальных компонентов.