juan_gandhi: (VP)
Juan-Carlos Gandhi ([personal profile] juan_gandhi) wrote2013-10-20 05:36 pm

Here's a little song I wrote

Extracting PDF from Mozilla Browser - and Doing it Nicely

That's a detailed account of the thing I already posted a couple of days ago. And what I'm enjoying here is Functional Programming. I don't know why Stroustrup does not know that it works. Worked for me. :p

[identity profile] ivan-gandhi.livejournal.com 2013-10-21 02:48 pm (UTC)(link)
Он не знает, да. Но Good он не всегда, т.к. что творится в браузере - это нам неизвестно; мало ли что сломалось (селениум хрупок до ужаса).

[identity profile] sassa-nf.livejournal.com 2013-10-21 04:47 pm (UTC)(link)
тогда runsJS("return extractPdf()") andThen ... всегда успешен? (разве если сам вызов функции не смог вернуть даже 'JUST WAIT')

[identity profile] ivan-gandhi.livejournal.com 2013-10-21 05:20 pm (UTC)(link)
Ну этого мы не знаем. extractPdfContent() делает цепочку вызовов; по хорошему надо бы каждый результат внутри проверять и бросать исключение если чо.

[identity profile] sassa-nf.livejournal.com 2013-10-21 08:03 pm (UTC)(link)
дык, вот это вот и не ясно. Вроде бы extractPdfContent просто возвращает фиксированную строчку, а собственно выделение контента в отдельном потоке? Или как? extractPdfContent дожидается завершения?

Я к чему это всё допытываюсь - уточнить, что именно может fail в extractPdfContent() (т.е. практически ничего не может - тривиальная функция?), объяснить, чего дожидается Thread.sleep(1000), куда девается бросаемое исключение и как потом преобразование в хексы работает с null или чего там вместо потока pdf.

[identity profile] ivan-gandhi.livejournal.com 2013-10-21 08:07 pm (UTC)(link)
window.extractPdfContent = function() {
  dataPromise = PDFView.pdfDocument.getData()
  dataPromise.then (function(d) { extractedPdfAsString = intBuf2hex(d)}, function() { throw "Failed to extract pdf content" })
  return 'JUST WAIT'
}


может оказаться, что PDFView не определён
может рухнуть выборка pdfDocument
может рухнуть выборка getData
может оказаться, что then изменил сигнатуру, и рухнет при вызове.

Случается регулярно.

[identity profile] sassa-nf.livejournal.com 2013-10-21 08:11 pm (UTC)(link)
ок, но потом куда девается throw "чё-то там"? Сама переменная остаётся нулём? А runJS потом завершается Bad, когда в хексы не получается нуль превратить?

[identity profile] ivan-gandhi.livejournal.com 2013-10-21 10:10 pm (UTC)(link)
Да, конечно.

[identity profile] ivan-gandhi.livejournal.com 2013-10-21 10:10 pm (UTC)(link)
Он да, где-то в бекграунде возвращает, не в момент исполнения. Там же cps.
завалиться может любой шаг, где что-то откуда-то извлекают; а секунду я даю, чтобы threads, которых в данной задачке не так уж и много, все успели потрудиться. В принципе, можно и цикл всобачить, но по жизни не надо. Ведь данные-то уже тут, в джаваскрипте.

Исключение перебрасывается в драйвер селениума, а мой код их всех ловит и превращает в плохишей.