Category: литература

Гена

Скрипали и Четвертый протокол

Прочитал "Четвертый протокол" Форсайта.
Книжка очень хорошая, хотя, конечно, клюквы много, просто Вести из Зазеркалья какие-то, но как раз именно поэтому ситуация со Скрипалями (а заодно и Боингом KAL-007) становится совершенно ясной и понятной.
А заодно и с Британией вообще.
Если кто такой же тормоз, как и я - рекомендую.
Гена

Суета сует - все суета

https://www.facebook.com/joshua.raynolds/posts/1468436286535292
Письменность майя - это, пожалуй, круто.
Только вот сохранившиеся кодексы - какие-то мутные примитивные астролого-астрономические таблицы; ну вот расшифровал их и что? Зачем? На что он жизнь-то положил? Чтобы все и правда убедились, что индейцы изобрели неудобную письменность и использовали ее крайне идиотским способом?
Вообще эти майя и ацтеки при более-менее внимательном разглядывании вызывают какое-то отторжение.
Строго говоря, все древние цивилизации, кроме греко-римской и отчасти древнееврейской скучны и примитивны; но вот американские еще и неприятны своим людоедством.

Я вот как представлю себе, что вся печатная продукция в богохранимом Отечестве нашем представлена в виде многочисленных репринтов "Гадаем вместе на картах Таро и печени врага" - так сразу думаю, а надо ли ее вообще читать?

Ну и об испанцах - не так уж и зря они все посжигали, получается...

Collapse )
Гена

Картезианский продукт или маленькие хитрости

Так в одной переводной книжке обозвали декартово произведение. Мне понравилось - прямолинейно так, незамысловато.
Вообще оно - или он - обычно служат маркером звездеца: если в запросе получается оно (он) - то что-то идет не так. Но есть некоторый случай, когда он - или оно - наоборот, помогает правому делу.
Итак, пусть у нас имеется таблица как минимум о двух колонках - скажем, дата/время начала и дата/время окончания явления - и достаточно немаленького размера. Ну, чтобы не влезала в кеш. Требуется - посчитать, сколько явлений являлось в определенную минуту (будем грубы и прямолинейны, и всякие варианты типа "а что делать, если у нас в минуту началось и завершилось сразу несколько событий?" отметем. Как неорганизованные). Вариант решения - пусть начало события будет началом события, увеличивающим счетчик на единицу, а окончание - соответственно, окончанием, уменьшающим на все ту же единицу. Обрежем дату до минуты, просуммируем события:
with ev as(
 select start_date as dt, 1 as evcnt from data
 union all 
 select end_date as dt, -1 as evcnt from data
)
select date_trunc(dt,'date'), sum(evcnt)
  from ev
 group by date_trunc(dt,'date')

Работает? Работает. Офигенно? Офиганно. Смотрим план: table scan data два раза. Ну что же, никуда не денешься. Или денешься?
Конечно, денешься - давайте декартово произведем:
with  t as(
 select 1 as ev
 union all
 select -1 as ev
),
ev as(
 select t.ev, case when t.ev=-1 then d.end_date else d.start_date end as dt
   from data d left outer join t on 1=1
)
select date_trunc(dt,'date'), sum(evcnt)
  from ev
 group by date_trunc(dt,'date')


Как нетрудно видеть, второй случай дает практически в два раза меньше ввода-вывода, чем первый: data читается только один раз, а t мала и прекрасно прокеширована (даже если это реальная таблица). Чтобы гвоздями прибить порядок соединения (если соединять t c data, то получится, по сути, первый вариант), в постгресе приходится применять ненужный outer join.
На самом деле в том случае, если таблица целиком прокеширована, первый вариант быстрее - нет вычисления case и обрабоки соединения. Чем меньшая часть таблицы влезает в кеш - тем больше производительность второго запроса.
Вот такая вот загогулина.
Гена

(no subject)

Попалась книжка "Java: the Good Parts". Ну, название, конечно, радует. Не все так плохо, не надо отчаиваться, все же есть и хорошее! Посмотрел, что же там хорошего.

1. Type System (!)
2. Exceptions
3. Garbage Collection
4. JVM
5. Javadoc
6. Collections (!)
7. RMI (!)
8. Concurrency
9. The Developer Ecology (всякие IDE)

Что-то у меня не сложилось впечатления, что вышеперечисленное в жабе сделано как-то замечательно. Кое-что на стандартном уровне (типа исключений и concurrency), что-то более хреново, типа коллекций и системы типов, что-то вообще вызывает вопросы (жаба без IDE - это очень неудобно, беда только в том, что сами по себе IDE неудобны. Ну да, а кто сказал, что будет легко?), но в общем и целом как-то неубедительно.

Книжка 2010 года, и непонятно, почему не похвастались аннотацыями, генериками и невообразимой человеческому уму производительностью.

И если это - Good Parts, то какие тогда Bad Parts?
Гена

(no subject)

http://community.livejournal.com/ru_java/913026.html

Во-первых, непонятно, что не нравится человеку - для жабы 512М это, мягко говоря, не объем. Это так, размяться, плечи расправить, по сторонам оглянуться.
Во-вторых, в доисторической книжке по mod_perl ясно и доходчиво показывали, как хранить сессии в куках с хешом - но это ж жаба, они таких книжек не читают. В жабе оно, конечно, не так просто реализуется (а что там вообще просто реализуется?), но тем не менее.