Заметки Андрея
前往频道在 Telegram
Публикую ссылки на заметки из своего блога, видео, ссылки на интересные статьи и отвлечённые мысли. Пишу о своей жизни, программировании, компьютерной безопасности, дизайне и образовании. Мой блог: andgein.ru/blog Жаловаться и хвалить: @andgein
显示更多495
订阅者
无数据24 小时
无数据7 天
无数据30 天
帖子存档
Но если вы думаете, что это всё, то очень даже нет! 🙃
Австралийцам пришлось защищаться не только от Динго, но и от … кроликов! Кроликов, в отличие от Динго, в Австралию завезли колонизаторы. И уже через 50 лет после завоза они расплодились в таких количествах, что полностью уничтожили часть растительных видов и некоторые леса (деревья они не кушали, конечно, а вот побеги новых — вполне).
В итоге на западе материка в начале XX века пришлось построить более 3000 километров забора. Сейчас этот забор, правда, менее актуален, чем собачий, и сохранился похуже. Почему? Дело в том, что в 1950-х с кроликами начали бороться инвазивно: целенаправленно распространяли вирус, вызывающий у животных конъюнктивит…
Но на самом деле и это ещё не всё! В 30-х годах двадцатого века Австралию постигла новая напасть: эму атаковали посевы пшеницы на западе материка. Заборы от них не спасали: эму оставляли в них большие дыры (через которые потом проникали и кролики, только ухудшая ситуацию). Пришлось с эму воевать! Не образно говоря, а по-настоящему: Австралия объявила военную операцию по истреблению животных, которую позже назвали «войной Австрали с Эму». Военные брали пулемёты и расстреливали эму, однако те были очень проворные, а стрелки, вероятно, плохо приспособены к таким противникам, так что эффективность была минимальна. К третьей неделе сражений пулемётчики уничтожали по 10-20 эму в день. Майор Мередит из седьмой тяжёлой батареи Королевских Австралийских сил артиллерии в своём докладе утверждал, что совершено 986 убийств с 9860 очередями выстрелов. Кроме того, он сказал, что ещё 2500 птиц погибло в результате ранений.
Эффекта это, однако, не имело: эму продолжали съедать урожай пшеницы. Австралийские фермеры вновь просили военной помощи, но правительство им отказало. Вместо этого активизировалась система «поощрений» за самостоятельное уничтожение эму: более 50 000 «поощрений» было получено в течение только шести месяцев в 1934 году…
Забавно, да? Почему-то раньше я считал, что в Австралии много опасных животных: пауки, крокодилы, медузы, осьминоги… Но вот по-настоящему человечеству пришлось там защищаться от собак, кроликов и эму.
Ладно, хватит пока о программировании 🙂
Все знают или хотя бы слышали про Великую Китайскую стену, построенную ради защиты китайской цивилизации от кочевых народов. Но мало кто знает, что в другой части света, в Австралии, люди построили не менее впечатляющий забор! Забор, спросите вы? Представьте себе! Забор длиной 5500 километров (это как от Екатеринбурга до Москвы, обратно, а потом снова до Москвы) тянется через весь юго-восток материка. От кого же защищались австралийцы этим забором в конце 19-го века?
Правильный ответ — от собак Динго! Собаки Динго — это такая порода собак, которая когда-то была одомашнена людьми, а затем снова одичала. Внешне выглядят как смесь волков с гончими, имеют квадратную мордочку и стоячие ушаи. Не лают, зато рычат, воют и по ночам охотятся на кроликов, овечек и другой домашний скот. Именно поэтому и понадобилось от них защищаться, да. Местные фермеры ловили Динго капканами, отстреливали и травили ядами, но помог в итоге только огромный забор, оградивший самую густонаселённую часть материка от собак. Куда более гуманный способ, надо сказать!
Забор этот стоит и функционирует до сих пор. Его так и называют: собачим забором или забором Динго. Каждый километр забора ежедневно проверяется специальными людьми: раньше они ездили на верблюдах, а теперь пользуются более современными джипами.
Когда-то я очень любил PHP — писал на нём много маленьких сайтиков, активно следил за изменениями в языке, знал нюансы и умел настраивать PHP в связке со всеми популярными веб-серверами. С тех пор прошло десять лет, а лет 5-6 назад был последний раз, когда я писал на PHP. Примерно тогда вышел PHP 7.
Это нормально — технологии развиваются быстро и иногда не выдерживают конкуренции: веб жёстко разделился на бэкенд и фронтенд, бэкенд повсеместно перешёл на JSON API и долгоживущие процессы вместо одноразовых скриптов, PHP сменился (в моём случае) си-шарпом, джаваскриптом и питоном.
Что я знал про судьбу PHP? Что всё ещё есть люди, пишущие на нём, что некоторые фреймворки типа друпала и вордпресса всё ещё пользуются популярностью в определённых сферах, что старые болячки так и не починили, и именно из-за этого PHP проиграл в своё время другим языкам. В общем, PHP ожидала медленная смерть некогда популярной технологии: так умирали Delphi, Flash, SVN и многие другие.
И какого же было моё удивление узнать, что PHP как язык, оказывается, активно развивается! Оказывается, у кого-то нашлись силы активно взяться за переделку PHP с целью исправить ошибки его молодости. Нет, такие попытки происходили и раньше (вспомнить, например, Composer для управления зависимостями), но теперь случились семимильные шаги, и ребята выпустили PHP 8.
Вот неполный список того, что добавили или сделали в PHP 8+ (список никак не упорядочен):
1. JIT-компиляция (в том числе для M1/M2)
2. Аннотации методов типа
#[Route("/api/posts/{id}", methods: ["GET"])]
3. Именнованные аргументы у функции типа htmlspecialchars($string, double_encode: false);
4. Union-типы (сразу с синтаксисом через вертикальную черту: int|float!)
5. Match-оператор вместо устаревшего switch-case
6. Nullsafe-оператор ?->, знакомый разработчикам на си-шарпе и котлине, и которого мне так не хватает в питоне
7. Сравнение числа и строки наконец-то всегда возвращает false (см. 0 == 'foobar' )
8. Собачка @ перед методом теперь не заглушает фатальные ошибки
9. Методы типа str_starts_with()
10. Разрешили висящую запятую в списках
11. Упрощенный try-catch
12. Enum-ы
13. Readonly-свойства у объектов и readonly-классы
14. Указание возвращаемых типов (в том числе специальных типов never, null, false и true ).
15. Атрибут final
16. Выпилили неявную восьмиричную систему счисления при указании ведущего нуля (типа 016 == 14)
17. Корутины (пока слабенько поддержанные в синтаксисе, правда)
18. Оператор ... как в джаваскрипте, аналог *array в питоне
19. Выпилили $GLOBALS (ну почти)
20. Запретили создавать атрибуты у объекта, если они не были объявлены в классе (ну почти)
21. Внедрили нормальные RFC
(более полные списки — здесь, здесь и здесь)
Увидел у них интересную штуку, которую не видел раньше в других языках вне дженериков: вместе с Union-типами они предлагают Intersection-типы, чтобы принимать объекты, удовлетворяющие сразу двум интерфейсам. Например, так:
function count_and_iterate(Iterator&Countable $value) {
}
Более того, в 8.2 завезли возможность указывать произвольную ДНФ из типов:
public function foo((Iterator&Countable)|null $value) {
}
Думаю ли я, что PHP воскреснет из мёртвых? Однозначно нет. PHP дальше продолжит постепенно терять позиции и умирать, обратной дороги нет.
Но тем интереснее наблюдать за экспериментами, которые сейчас над ним проводятся. Да и можно что-нибудь полезное для других языков подчерпнуть 🙂Замолвлю пару слов о легаси.
Некоторые считают, что одна из самых сложных вещей в программировании — это работа со старым кодом или апи, то есть с легаси. Нередко в ответ на вопрос «Почему так?!» можно услышать «Потому что так исторически сложилось», и это правда работает как аргумент, ведь если мы решим актуализировать весь код мира, переписать его по новым заветам и правилам, то он снова устареет раньше, чем мы закончим это благородное дело 🙃
На практике это иногда проявляется очень странным образом. Решил я тут на свежей убунте захешировать пароль утилитой
mkpasswd. Нужного пакета в системе не оказалось, но убунта умная — сразу предлагает установить его:
# mkpasswd Command 'mkpasswd' not found, but can be installed with: apt install whoisЧто, простите? Утилита
mkpasswd идёт в составе пакета whois? Тут наверняка какая-то ошибка, ведь mkpasswd — это про хеширование паролей, а whois — про владения IP-сетями. Так что идём и проверяем на сайте убунты: https://packages.ubuntu.com/kinetic/amd64/whois/filelist. Странно... действительно написано, что в пакете whois лежит исполняемый файл /usr/bin/mkpasswd. Почему же так?
Потому что так исторически сложилось.
Более того, более 20 лет назад автора пакета (дебиановского, потому что убунты тогда ещё не было) спрашивали об этой странности: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=116260. И тогда, в 2001 году он ответил: «Historical reasons. It was part of the original RIPE whois package which I packaged before writing my own implementation. ... I think mkpasswd and whois are both small enough and useful enough that creating another package is only a waste of space.»
Что делать с этим пороком нашей профессии — решать вам🤷♂️Repost from AoC 2025
Новогодняя чёртова дюжина у нас тоже есть 🐍
Задачу 13-го дня Distress Signal решил Андрей Гейн с помощью новой версии питончика. Посмотреть, как он это сделал можно по вот этой ссылке: https://youtu.be/nVH_ajen3xc
Начинаем день не с чашки кофе, а с разминки для серого вещества! Подписывайтесь на канал ребят и решайте Advent of Code вместе с ними🎄
Уже традиционно веду в этом году YaTalks, который начинается через считанные минуты: https://yatalks.yandex.ru/ru
В этом году конференция двухдневная, и я веду трек «про жизнь» завтрашнего дня, но мои речи — не самое интересное, что там будет, поэтому приходите послушать доклады и дискуссии в оба дня. Паралелльно с нашим треком и сегодня, и завтра будет идти технологический трек с сугубо программистскими докладами — для тех, кто любит пожётсче 🙂
В этом году у конференции несколько новинок — трансляция в прямом эфире автоматически переводится на английский язык, а вещаем мы из двух студий в разных странах (подсказка: я вчера ужинал чевапчичи). Выбирайте в программе интересное и обязательно приходите посмотреть, не откладывая на «посмотрю потом» 🙃
Пятница! Пора отдыхать 🏖
И смотреть видео про сумашедший дивный мир, в котором мы живём: https://www.youtube.com/watch?v=Z8SHvJnGUCM&ab_channel=AndreyGein
