Category: медицина

Category was added automatically. Read all entries about "медицина".

cat with many words

Из прочитанного. Выпуск 50

Крутые книжки все никак не могут закончиться. Но начнем с не очень.

1) Go Web Programming, Sau Sheong Chang

2 / 5

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

2) Concurrency in Go, Katherine Cox-Buday

3 / 5

Хотелось бы, чтобы эта книжка была лучше, но нет. Автор вначале долго и нудно рассказывает про основные элементы для конкуррентного кода, которые есть в го, потом рассказывает про конкретные типовые приемы, которые в коде применяются. Если бы я заранее прочитал Go Programming Language из следующего пункта, то первую часть можно было бы не читать совсем. С другой стороны этой книжки было достаточно, чтобы понять про каналы, горутины, мьютекс и Waitgroup и про то, как их использовать.

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

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

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

В книжке можно читать главы 4 и 5 про шаблоны конкуррентного кода.

3) Go Programming Language, Alan A.A. Donovan, Brian W. Kernighan

5 / 5

Книжку можно читать, даже если вы не любите и не хотите писать на го. Возможно, захотите!

В каждой строчке текста сквозит профессор CS в свитере с оленями. А рядом с ним стоит программист в свитере с цветочками, которые написал всяких систем уже столько, что все, что ему хочется - это писать их проще.

И книга она вся про это - что го был спроектирован, чтобы поддерживать программы было проще. Каждый элемент языка продумывался именно под этим углом. Почему я написал поддерживать - потому что упор делается именно на это. Вот крутая статья одного из авторов го, где он описывает то, почему и как они сделали версионирование в языке. Там есть очень интересное определение Software engineering:

Software engineering is what happens to programming when you add time and other programmers.

Написать программу один раз - это не software engineering, это программирование. А вот написать и поддерживать годами - это оно. Идея, которую я вынес из объяснений авторов - умно писать легко, поддерживать эту заумь сложно. Так что всякие дженерики, сложные языковые концепты - это здорово, но их сложно понимать, а следовательно сложнее поддерживать. И каждый элемент языка помогает поддерживать код проще и делает относительно сложнее писать умные штуки.

Например, там нет ООП в джава смысле этого слова. Нельзя иерархию классов нафигачить. Зато есть интерфейсы, но не такие, как в джаве, а ad-hoc. Если для типа по стечению обстоятельств определены методы с нужной сигнатурой, то этого достаточно, не нужно специально говорить, что типа этому интерфейсу удовлетворяет. Звучит страшно, но дает невероятную гибкость при сохранении контроля за корректностью. А что, если подсунут не тот тип? Авторы, говорят - возможно, на практике случается редко. Я до этого полтора года писал на джаве, не могу не согласиться. Зато в джаве из-за этого, что интерфейсы нужно указывать всегда, гораздо больше бюрократии, нужно писать обертки над любыми типами, которые не контролируешь. В результате еще больше писанины.

Другой пример - структуры. В го их можно и принято указывать инлайном прямо с остальным кодом, никакого класс=файл принципа. В результате код получается еще более компактным. Видимости всего да вида - protected и public. Первые поля указываются с первой маленькой буквы, вторые - с прописной. В результате контроль за видимостью есть, но визуального мусора гораздо меньше.

А вот еще - никаких автоматических приведений типов. Если хочется - приводи руками. В результате код получается полностью без сюрпризов.

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

Стандартная библиотека спроектирована отлично, и в ней действительно есть все для того, чтобы писать сетевые приложения.

Последний, но не самый маловажный элемент - язык написан так, что в нем сразу есть все из коробки - не нужен maven или composer или npm, не нужно ругаться про стили форматирования, не нужно договариваться о том, как писать доки - в стандартной поставке идет все это, дальше нужно писать код и эти инструменты использовать. Написал - go build . и на выходе полностью самодостаточный бинарник, который можно сразу загружать на сервер. В этот момент можно вспомнить последний раз, когда тот же maven отнимал от пары часов до целых дней жизни.

А, да, моя любимая фича! Я го можно делать новые типы на базе любых других. Т.е. можно написать:

type AccountNumber int

И все, этот тип будет полностью независимым от интов, хотя внутри будет числовое значение. В книге приводится пример разных шкал измерения температуры, где разные типы позволяют на этапе компилляции проверять, не складывает ли кто-то градусы цельсия с фаренгейтами. У меня на практике был другой пример. Приходит к вам значение, скажем, OrderID, только еще неотформатированное, а потом вы его форматируете. Если подобных типов у вас нет, как джаве, то в вашей системе будет куча переменных OrderID типа String, но не будет возможности наверняка проверить, какую версию вам подсунули. Я решал это именами переменных, что работало, но временами было больно. Как же я хотел разных типов на этот случай!

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

4) Plagues and Peoples, William H. McNeill

5 / 5

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

Основные утверждения автора:

  • Вирусы были с нами всегда, большинство пришло от домашних животных
  • Для распространения вируса нужна критическая масса людей
  • Слишком смертоносные вирусы быстро исчезают - все носители погибают, распространение невозможно.
  • Первая встреча населения с вирусом - обычно самая жестокая по эффектам. Далее в течение 4-6 поколений вырабатывается групповой иммунитет, люди учатся избегать заражения или болезни становятся гораздо менее опасными и переходят в разряд детских (ветрянка)
  • Если болезнь исчезает из конкретной местности, то со временем групповой иммунитет исчезает, болезнь снова становится опасной.
  • Болезни нужен физический носитель, она не может перемещаться сама.

Последний фактор чрезвычайно важен. Например, автор с этим связывает падение Римской империи (мореплаватели привезли чуму из Индии) и эпидемии в Европе в средневековье (монголы построили свою громадную империю, обеспечили безопасное перемещение между китаем и европой, в результате крысы-носители вместе с караванами пересекли континент)

Или он исследует причины исчезновения чумы и делает предположение, что чума ушла из Лондона в том числе из-за пожара 1666 года. Почему? До этого в моде были соломенные крыши, в которых крысы жили с больши комфортом. Как результат, на людей падали их инфицированные блохи или экскременты, люди заражались, эпидемия шла полным ходом. После большого пожара город перестраивали в интенсивным примененим камня, в результате чего место обитания крыс значительно отодвинулось от людей, и эпидемия пошла на спад.

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

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

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

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

Как пример, Римская империя. Автор делает предположение, исходя из разных источников, что эпидемии сильно подкосили население империи, в результате чего началось закрепление крестьян на территориях (иначе некому было бы сажать) и приглашение вшешних варваров жить в пределах границ страны. Если бы нароу было полно, то римляне бы этому смльно протестовали, вероятно были большие опустевшие территории, которые надо было заселять. На фоне упадка населения макропаразитизм, т.е. правители, не успели адаптировать свои запросы, и все схлопнулось.

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

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

Ясное дело, что в книге много предположений, но как я понял, потому последовало цунами из исследований, которые эту точку зрения подтвердили для разных исторических эпох.

cat with many words

Про топ

Для зарегистрированных пользователей есть замечательная функция скрывать авторов из топа, позволяет убрать мусор, желтуху и откровенную рекламу с главной страницы сервиса. На момент написания у меня скрыто 179 пользователей. Сто семьдесят девять. Теперь проблема оказалась в том, что без желтухи и рекламы в моем топе осталась только политика.

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

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

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