?

Log in

No account? Create an account

[icon] /^.in$/
View:Recent Entries.
View:Archive.
View:Friends.
View:Profile.
View:Website (/me (домен, хотящийся в углу комнаты)).
Missed some entries? Then simply jump to the previous day or the next day.

Tags:,
Security:
Subject:Вебанутая ненависть
Time:02:17 am
Почему-то меня напрягает браузер, отжирающий 700 Мегабайт оперативной памяти. Последний айсвазель.

Только в сей раз проблема не в криворукости программистов браузера/флешплугина/etc (хотя и она присутствует), а в необходимости держать открытыми по 70 вкладок одновременно.
Просто как-то так получается, что если что-то отправляется в закладки/скрапбук, то оттуда в следующий раз выковыривается где-то через месяц. Потому держу открытым всё, что надо прочитать (например, статьи про производные happs, по теории типов, по математике, etc) в ближайшее время. И что-то даже сворачивание групп табов последнее время не спасает.

И вот подумалось мне, что как круто было бы, если бы долго неактивные табы автоматически скрапбучились и вымещались нафиг из оперативки, а при обращении восстанавливались обратно.
Далее нужно, чтобы какие-то табы можно было заморозить, тогда при восстановлении они просто читаются с диска и всё.
А какие-то могли бы ещё и автоматически релоадится.

Таким образом, вариант с заморозкой заменял бы собственно сам скрапбук, а вариант без заморозки — обычные букмарки. А что там можно уже делать с табами (пичкать их тегами, сортировать, леанирезовать дерево, искать по табам, etc) можно было бы оставить на совесть разработчиков.
Просто вот непонятно же, почему табы, букмарки и скрапбук делают примерно одно и то же, а сущности разные. Непорядок.

А ещё прикольно было бы, чтобы _всё_, что я вижу на мониторе куда-нибудь кешировалось. Потому что иногда хочется найти документ по отрывку фразы, которую я из него прочитал несколько недель назад, а уже поздно. Просто вот если, например, искать в истории браузера по заголовкам страниц, то это также убого, как и поиск в фс по именам файлов (на самом деле даже ещё более убого — файлам я даю осмысленные имена, а авторы страниц заголовки обычно делают не очень).

Но это всё ненависть со стороны юзера. Со стороны разработчика всех этих возможностей (если бы я им был) у меня была бы ненависть к отсутствию системы типов для веб-данных, ведь RAW-контент, как известно — говно, и, например, непонятно как скрапбучить странички, на которых много всякого аяксу.

Допустим мы заскрапбучим страничку вместе со скриптами, тогда в следующий раз, когда мы её откроем, версия API на сервере может не соответствовать API, подразумеваемому старой версией скрипта.
Если заскрапбучим без скриптов, то новая версия скриптов, добытая с сервера при следующем открытии, может не понять старую заскрапбученную версию разметки страницы.
Полностью отключать скрипты — не вариант, а то вдруг они там сворачивают/разворачивают какие-то куски на странице, или, например, рендерят «скрытые» от ботов емайлы.
Заметим также, что MIME-тип тут не поможет (определяет метод интерпретации, а не атрибуты данных), а парсить жаваскрипт на страницах в попытках эмпирически определить его «аяксовость» и ещё какие-нибудь полезные свойства — просто маразм (хотя именно это и делают разные плагины типа NoScript для файрфокса, но у них искомые свойства скриптов достаточно простые).

А вот с большой колокольни можно смотреть на веб-страницу, как на функцию, имеющую тип Reader-подобной монады, где в спрятанном состоянии изначально находятся все значимые для отображения статические данные (адрес страницы, её HTML-код, инклуженные ресурсы, etc), телом этой функции является код «JavaScript», функциями-членами этой Reader-подобной монады являются функции для работы с DOM, а удалённые запросы делались бы через какой-нибудь «liftAJAX».
Тогда, если наша система типов ещё и является dependent-typed, то браузер, скомпилировав полученные от сервера данные, мог бы сразу и чудесным образом вывести все необходимые свойства этой веб-страницы, руководствуясь только типами базовых функций (типа liftAJAX). Тогда «политика безопасности» была бы просто набором типов для этих базовых функций, а браузер мог бы при компиляции через зависимые типы выводить вообще только один бит информации — Safe | NotSafe. В тоже время, если браузер хотел бы выводить какие-то другие свойства, то собственно этому «JavaScriptу» на странице вообще ничего об этом не надо было бы знать.

Короче, это я к тому, что, на мой взгляд, современный веб развивается совсем не туда, куда надо. Всем давно понятно, что будущее за всякими распределёнными вычислениями, где «заказчик» вычисления и «исполнитель» этого вычисления, вообще говоря, не очень друг другу доверяют. Значит они должны обмениваться заданиями на всяких интересных языках, для которых можно доказать на стороне исполнителя какие-то свойства (например, вычисляемость задания за какой-то конкретный промежуток времени).
Ведь если вдуматься, то чистый HTML представляет собой язык рисования в графическом буфере, для которого известно, что, благодаря его иерархической структуре, это рисование когда-нибудь закончится. В свою очередь, невозможность доказать хоть что-то подобное для JavaScriptов, решается наложением всяких таймаутов на их исполнение, что весьма порочная практика, поскольку, время исполнения, вычисляемое в секундах, может быть сильно увеличено обычным своппингом процесса, соседнего с браузером. Но с JavaScriptом другого решения нет, да.
Короче, веб — говно, всё плохо.

То, над чем надо подумать. Допустим, мы заменили JavaScript на стековую машину (потому что, что императивный, что функциональный код в неё хорошо компилируется, и всё равно умные браузеры производят подобную компиляцию сами, а так ещё можно этот процесс возложить на создателей скрипта) со всякими интересными операциями а-ля, упомянутый выше, liftAJAX. Можно ли доказать что-то интересное о программе, записанной в этом коде, при условии, что машина может иметь любые операции, и можно положить любую систему типов на эти операции? Казалось бы вопрос интересный, поскольку рассматривая код этой машины не как «просто стековый ассемблер», а добавив туда какие-то операции, манипулирующие типами, может быть можно было бы получить что-то интересное (хотя я сам не очень понимаю что и как). Как-то мутно.

Я мог где-то тут выше ошибиться, так что вот, такие дела.
withComments $ arr (take 5) >>> delay new

[icon] /^.in$/
View:Recent Entries.
View:Archive.
View:Friends.
View:Profile.
View:Website (/me (домен, хотящийся в углу комнаты)).
Missed some entries? Then simply jump to the previous day or the next day.