Архив за 23 марта 2015 - 8

Давайте придумаем решение вот такой-вот простенькой задачи.
Имеется: браузер (IE, Chrome или Firefox), уже запущенный пользователем.
Требуется: написать программу, которая получит URL, который в данный момент введён в адресной строке.

Давайте подумаем, каким образом эту простенькую задачу решить НЕ получится:

1. FindWindow + GetWindowText

Почему не получится

Первая идея — найти окно браузера, в нём дочернее окно адресной строки и взять URL оттуда. Практика показывает, что отдельное дочернее окно для адресной строки имеет только IE. FF и Chrome кросплатформенны, поэтому предпочитают весь свой контент отрисовывать самостоятельно.

2. Браузерное расширение, которое отдаст URL нашей программе (например, через запрос к localhost)

Почему не получится

Можно. Но во-первых, для трёх браузеров нужно будет написать 3 разных расширения, а во-вторых, для FF и Chrome мы будем вынуждены распространять его только через их магазины расширений. Писать программу, работоспособность которой зависит от того, зачешется ли сегодня левая пятка модератора — нет уж, увольте.

3. Давайте напишем сниффер и посмотрим что там пользователь открывал

Почему не получится

А давайте! Но что дальше? Даже если из потока трафика мы выделим данные, полученные именно браузером и расшифруем HTTP-протокол, мы всё-равно не узнаем именно текущий URL (ссылок в потоке будет много). Кроме того, сразу идут в сад HTTPS-соединения, HTTP/2, ссылки на локально открытые файлы, ссылки на внутренние страницы (типа chrome://settings) и т.д.

4. Давайте воспользуемся Remote Debugging Protocol ну или каким-нибудь Selenium-ом

Почему не получится

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

5. Может быть, хуки?

Почему не получится

Ну, внедриться-то мы в браузер сможем. А на что вешать хуки? Для IE всё ясно — SetWindowText для окна адресной строки (но с ним и более простой способ №1 проходил). А в FF и Chrome у нас нет каких-то чётко определённых объектов и интерфейсов, на которые мы можем завязаться. Можно что-то сделать с конкретной версией браузера, но универсального решения не получится.

6. Скриншот окна браузера, определение положения адресной строки, распознавание текста с картинки!

Почему не получится

Уже как-то начинает смахивать на отчаяние, правда? Прикинем все варианты цветовых схем ОС, разрешений, масштабов, учтём наличие в браузере плагинов, цветовых схем, нестандартного расположения элементов, right-to-left языковых локалей ну и закончим случаем, когда окно адресной строки слишком узкое, чтобы вместить URL полностью.

7. Ваш вариант
А напишите в комментариях, какие ещё решения вам приходят в голову и мы подумаем, получится или нет.

А теперь один из правильных ответов: мы воспользуемся уже старенькой, но весьма стабильной и поддерживаемой всеми браузерами во всех ОС с Win95 до Win10 технологией Microsoft Active Accessibility, которая даст нам возможность не только получить текущий URL (при чём одинаковым образом для всех браузеров), но и вообще дать доступ ко всему контенту браузера — от самого родительского окна с его заголовком, меню, тулбаром, вкладками и до содержимого открытой веб-страницы вплоть до самого последнего её элемента.
Читать полностью »

Virgin работает над своей версией электромобиля - 1

Ричард Брэнсон ничем не уступает Илону Маску по глобальности замыслов и дальновидности. Кроме того, Брэнсона также можно смело назвать универсалом: его компании работают во множестве сфер, включая аэрокосмическую. Правда, в одном из направлений Брэнсон сильно уступает Маску, а именно — в электромобилях. Virgin просто не занималась электрокарами, предназначенными для выхода в массы, но теперь, похоже, все изменилось.

Сам Брэнсон недавно заявил, что его компания работает над собственным проектом электромобиля, который в будущем можно будет противопоставить Tesla. Сейчас, по словам главы Virgin, над этим проектом работает несколько групп инженеров и проектировщиков. Правда, в детали Брэнсон вдаваться не стал.
Читать полностью »

Футболист опубликовал научную статью по математике - 1

Нападающий команды NFL Baltimore Ravens Джон Уршел (John Urschel), известный в твиттере как @MathMeetsFball, имеющий степень бакалавра по математике, опубликовал научную статью «Каскадный многосеточный алгоритм вычисления вектора Фидлера для графика лапласианы».
Читать полностью »

Компания Xilence анонсировала продажи новых процессорных охладителей серии Performance C. Модель I402, показанная на верхней иллюстрации, предназначена для процессоров Intel в исполнении LGA 1150, 1155 и 1156, а модель A402 — для процессоров AMD в исполнении FM2+, FM1, FM2, AM3+, AM3, AM2+ и AM2. За исключением креплений, две модели ничем не различаются.

Максимальное значение TDP процессора, на которое рассчитаны охладители Xilence A402 и I402, равно 130 Вт

Читать полностью »

Введение

Как-то раз я сидел и грустно смотрел на написанный в рамках изучения эрланговский код. Очень хотелось написать на нем что-нибудь более полезное, чем крестики-нолики, но как назло никаких подходящих задач в голову не приходило. Зато есть JavaScript, в котором есть и функции первого порядка, и каррирование, и map/filter/fold, и, главное, задачу придумать куда проще. А вот pattern matching-а своего нету. Беглый поиск выдал мне несколько библиотек, но предлагаемый ими синтаксис показался мне тяжеловесным. Можно ли сделать лаконичнее, ближе к родному эрланговскому синтаксису?

Спойлер: можно, если взять coffeescript, сделать так:

fn = Match -> [
  When {command: “draw”, figure: @figure = {type: “circle”, radius: @radius}}, -> 
    console.log(@figure, @radius)
  When {command: “draw”, figure: @figure = {type: “polygon”, points: [@first, @second | @rest]}}, -> 
    console.log(@figure, @first, @second, @rest);
]
fn {command: “draw”, figure: {type: “circle”, radius: 5, color: “red”}}
#output: {type: “circle”, radius: 5, color: “red”} 5

Кому интересно, как это получилось — добро пожаловать под кат.
Читать полностью »

По сообщению The Wall Street Journal, член комитета европейского парламента по экономическим вопросам Рамон Тремоса предложил ужесточить антимонопольные меры против Google. Парламентарий сделал вывод о том, что компания нарушает правила конкуренции, основываясь на новом расследовании Федеральной комиссии по торговле США (FTC).Читать полностью »

Предыстория

Так сложилось, что уже пять лет мой раздел ntfs с операционной системой Windows располагается на рамдиске. Решено это не аппаратным, а чисто программным способом, доступным на любом ПК с достаточным количеством оперативной памяти: рамдиск создается средствами загрузчика grub4dos, а Windows распознаёт его при помощи драйвера firadisk.

Однако до недавнего времени мне не был известен способ, как реализовать подобное для Linux. Нет, безусловно, существует огромное количество линуксовых LiveCD, загружающихся в память при помощи опций ядра toram, copy2ram и т. д., однако это не совсем то. Во-первых, это сжатые файловые системы, обычно squashfs, поэтому любое чтение с них сопровождается накладными расходами на распаковку, что вредит производительности. Во-вторых, это достаточно сложная каскадная система монтирования (так как squashfs — рид-онли система, а для функционирования ОС нужна запись), а мне хотелось по возможности простого способа, которым можно «вот так взять и превратить» любой установленный на жесткий диск Linux в загружаемый целиком в RAM.

Ниже я опишу такой способ, который был с успехом опробован. Для опытов был взят самый заслуженный дистрибутив Linux — Debian.
Читать полностью »

Система школьного образования в Финляндии перешла на новую ступень развития. Теперь для школьников старшего возраста (15-16 лет) обычные уроки по предметам заменены на курсы по специально отобранным комплексным темам. Вместо последовательных уроков математики, химии или истории, молодые люди будут изучать профессиональные курсы, имеющие прямое отношение к реальной жизни. К примеру, курс «Работа в кафетерии» (cafeteria services) для школьника будет включать элементы математики для расчётов, способы общения, иностранный язык и прочие навыки, предусмотренные программой.
Читать полностью »

Коста-Рика уже 75 дней получает только «зеленую» энергию - 1

Некоторые страны продвинулись в вопросе использования возобновляемых источников энергии дальше, чем другие. К примеру, Коста-Рика уже 75 дней использует только «зеленую» энергию, получаемую из возобновляемых источников.

Это стало возможным благодаря большому количеству осадков, в результате чего ГЭС страны работают на полную мощность весь 2015 год. В этом году Коста-Рика еще не использовала нефть, газ или уголь для получения энергии. Пока хватает того, что страна получает от турбин ГЭС. Также используется геотермальная энергия, ветрогенераторы, биогаз и солнечное излучение.
Читать полностью »

Как происходит рендеринг кадра видеоигры - 1Deus Ex Human Revolution — это компьютерная игра 2011 года, которая является более успешным продолжением оригинальной Deus Ex, чем Invisible War. Но этот пост не о качестве игры, а о демонстрации её технических принципов. Адриан Курреж провёл несколько часов за реверс-инжинирингом, пытаясь понять с помощью инструмента Renderdoc, как происходит обработка каждого из кадров Human Revolution, и изложил результаты в своём блоге.Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js