September 14th, 2015

vit_r

Про новостную ленту

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

Ещё интересна Меркель. Газеты заполнены злобными карикатурами и коллажами. Особенно злорадствуют сегодня в связи с закрытием границы.

Журналисты и политики дружно повторяют, что Фрау Канцлер совершила несусветную глупость. Можно считать и так. Но...

Стоит вспомнить, что старушка показала себя коварным политиком, пожалуй, единственным на немецком олимпе, кто умеет рассчитывать будущее на много ходов вперёд, оставившем по пути в отвалах истории более видных и перспективных когда-то кандидатов.

Если посмотреть под этим углом, то любые «разумные действия» сулили бы невосполнимые потери из-за воплей красно-зелёных и их обвинений в негуманности и бесчеловечности.

Волна беженцев смыла с лиц бюргеров притворные маски. Хорошо рассуждать о гуманизме, когда он происходит где-то вдали от родного дома, в Средиземном Море или под колючей проволокой на венгерской границе, и совсем другие мысли появляются, когда сытых и весёлых мужиков размещают в палатках на полянке прямо перед окнами.

Прошу заметить, Меркель в сети светится не со стариками, женщинами и детьми. (Я не говорю, что она не фотографировалась с людьми, выглядящими как те, кому хочется помогать. Я говорю, что в сети таких фотографий не видно.)

Что получается в сухом остатке? Получается шоковая терапия.

Да, партия Меркель может потерять небольшой процент голосов. Если, конечно, рекламный эффект от последующих действий не затмит решение, вменяемое ей в вину.

Зато значительная часть электората тех, кто кричит о том, что нужно больше отбирать и делить, перетечёт резко вправо. Кто-то к неадекватным партиям, но большинство к потенциальным союзникам и партнёрам.

Плюс, любое глупое решение и любое необдуманное действие будет лучше нынешней ситуации. А запоминаются те расклады, которые оказываются на столе перед выборами.

Ходят слухи, что в Ляйпциге долговременно-безработных будут применять для обучения и интеграции вновьприбывших беженцев. Они поверили, испугались, и местные форумы заполнились стонами, плачем и тем, что администраторам в срочном порядке приходится вымарывать. Впрочем, в большинстве политических новостей теперь комментарии отключают. Во избежание.

Короче, я не сторонник теории заговора, и предпочитаю не искать второе дно у того, что объясняется глупостью. Но в Меркель я верю.
vit_r

Про ёжика в тумане, зазнайство, языки программирования и вериги

Интересно наблюдать, как проповедники функционального подхода чуют расставленные ловушки и гордо в них не идут. Ещё интереснее, когда люди поддаются на троллинг.

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

(Почему это чистой воды провокация, написано ниже.)

После небольших препирательств _xacid_ оставил код. Это была тактическая ошибка. Потому что в ответе

...[всякая ажурная фигня]

val content = getURLContent("garbage") recover {
  case e: FileNotFoundException => Iterator("Requested page does not exist")
  case e: MalformedURLException => Iterator("Please make sure to enter a valid URL")
  case _ => Iterator("An unexpected error has occurred. We are so sorry!")
}



Конечно, это не обработка ошибок, а паника разных оттенков, и в нормальных случаях всё делается совсем не так, но интересно другое.

Что мы видим на картинке, если снять штукатурку и рассмотреть голую структуру?
switch error_type
  FileNotFoundException:
    "Requested page does not exist"
  MalformedURLException:
    "Please make sure to enter a valid URL"
  default:
    "An unexpected error has occurred. We are so sorry!"


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

А иначе не получается.

[Spoiler (click to open)]
Грубо говоря, обработка ошибок - это выбор альтернативных путей преобразования данных или реакций на входящие сигналы. Если, конечно, мы рассматриваем что-то существеннее падения на спину и дрыганья лапками или сообщений пользователю, которые можно смело начинать с обращения «Ей ты, козёл!».

Для адекватного выбора этих путей надо знать не только ошибку, но и контекст, в котором она произошла. Причём, разнесение контекста и обработки по разным местам кроме создания шарад чревато ещё и фатальной рассинхронизацией.

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

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


Конечно, это не вся глубина открывающихся проблемы, а только лёгкий намёк. Математичность тянет за собой ещё много интересного.