en
Feedback
igrishaev

igrishaev

Open in Telegram

Ivan Grishaev on everything // grishaev.me

Show more
686
Subscribers
No data24 hours
-17 days
+230 days
Attracting Subscribers
September '26
September '26
+2
in 0 channels
August '26
+9
in 0 channels
Get PRO
July '26
+24
in 0 channels
Get PRO
June '26
+12
in 0 channels
Get PRO
May '26
+24
in 1 channels
Get PRO
April '26
+7
in 0 channels
Get PRO
March '26
+7
in 0 channels
Get PRO
February '26
+13
in 0 channels
Get PRO
January '26
+20
in 0 channels
Get PRO
December '25
+17
in 0 channels
Get PRO
November '25
+13
in 0 channels
Get PRO
October '25
+21
in 0 channels
Get PRO
September '25
+8
in 0 channels
Get PRO
August '25
+14
in 0 channels
Get PRO
July '25
+18
in 0 channels
Get PRO
June '25
+26
in 1 channels
Get PRO
May '25
+66
in 1 channels
Get PRO
April '25
+64
in 0 channels
Get PRO
March '25
+15
in 0 channels
Get PRO
February '25
+21
in 0 channels
Get PRO
January '25
+105
in 0 channels
Get PRO
December '24
+14
in 0 channels
Get PRO
November '24
+16
in 0 channels
Get PRO
October '24
+15
in 0 channels
Get PRO
September '24
+15
in 0 channels
Get PRO
August '24
+20
in 0 channels
Get PRO
July '24
+60
in 1 channels
Get PRO
June '24
+37
in 2 channels
Get PRO
May '24
+7
in 0 channels
Get PRO
April '24
+6
in 0 channels
Get PRO
March '24
+39
in 0 channels
Get PRO
February '24
+9
in 0 channels
Get PRO
January '24
+18
in 1 channels
Get PRO
December '23
+12
in 0 channels
Get PRO
November '23
+5
in 0 channels
Get PRO
October '23
+8
in 0 channels
Get PRO
September '23
+8
in 0 channels
Get PRO
August '23
+7
in 0 channels
Get PRO
July '23
+6
in 0 channels
Get PRO
June '23
+3
in 0 channels
Get PRO
May '23
+3
in 0 channels
Get PRO
April '23
+2
in 0 channels
Get PRO
March '23
+13
in 0 channels
Get PRO
February '23
+4
in 0 channels
Get PRO
January '23
+4
in 0 channels
Get PRO
December '22
+6
in 0 channels
Get PRO
November '22
+4
in 0 channels
Get PRO
October '22
+1
in 0 channels
Get PRO
September '22
+15
in 0 channels
Get PRO
August '22
+12
in 0 channels
Get PRO
July '22
+5
in 0 channels
Get PRO
June '22
+8
in 0 channels
Get PRO
May '22
+2
in 0 channels
Get PRO
April '22
+5
in 0 channels
Get PRO
March '22
+17
in 0 channels
Get PRO
February '22
+7
in 0 channels
Get PRO
January '22
+7
in 0 channels
Get PRO
December '21
+8
in 0 channels
Get PRO
November '21
+8
in 0 channels
Get PRO
October '21
+20
in 0 channels
Get PRO
September '21
+11
in 0 channels
Get PRO
August '21
+6
in 0 channels
Get PRO
July '21
+11
in 0 channels
Get PRO
June '210
in 0 channels
Get PRO
May '21
+193
in 0 channels
Date
Subscriber Growth
Mentions
Channels
07 September0
06 September0
05 September0
04 September0
03 September0
02 September+1
01 September+1
Channel Posts
В этот светлый день не помешает вспомнить, как пишутся праздники-даты. Если число пишется прописью, оно принимает на себя заглавную, а месяц пишется со строчной. Пример: Третье сентября. Если число пишется цифрой, заглавная переходит к месяцу: 3 Сентября. Не перепутайте!

2
Прогресс не стоит на месте, и все чаще я сталкиваюсь с результатом вайб-кодинга. Сначала я хотел написать “с нейрослопом”, но передумал. Кажется, это слово считается обидным: людям неприятно, когда их работу называют помоями, поэтому обойдемся нейтральным термином. Я смотрю на результат вайб-кодинга и не знаю, что с ним делать. Во-первых, объемы: текущий PR, что передо мней, включает 3200 новых строк. Вдумчиво их просмотреть – это сорок минут мозговой деятельности, а если учесть набор комментариев – то весь час. Далее, комментарии. Набирая их, понимаешь, что автор скорее всего не будет их читать. В лучшем случае он скормит их модели и скопирует ответ, но скорее всего просто проигнорирует. Качество сгенерированного кода посредственное. Код раздут, ему не хватает краткости. Я не говорю о стремлении записать все в одну строку; речь о той краткости, при которой код передает идею. Вместо встроенной функции – свой костыль: на момент обучения модель не знала о возможности языка. Вместо одного класса – два: абстракция и транспорт, хотя можно было свести к нескольким функциям. В коде на Питоне везде проверки: это словарь? это строка? это число? И много другого в том же ключе: приемлемо, но лучше исправить. Ощущение, что код писал джуниор с заявкой на мидла. И тут возникает момент: был бы автор человеком, мы бы сели и разобрали все минусы. В следующий раз он напишет код лучше, а через какое-то время ему можно будет доверять. А вот что делать с коммерческой моделью – я не знаю. Автор очевидно не хочет учиться сам. Зачем мне тратить час на объяснение недостатков? С таким же успехом я могу объяснять их уборщице или коту. Насколько я понял, код, написанный моделью, поддерживается одним способом – моделью. Если требуются изменения в логике, править вручную будет тяжело – не найдешь концов. Ожидается, что у разработчика развернуто окружение, плагины и всякие модели, чтобы сказать, что именно поправить в слопе, и модель поправит. Возникает противоречие: как быть, если кто-то (например я) не пользуется моделями. Как править этот код? Разворачивать окружение, переходить на вайб-кодинг? Не знаю. Лично я не собираюсь этого делать и, наверное, пересмотрю место работы, если слопа станет все больше. Уже на этом этапе заметна зависимость от моделей и подписок, в которую впадают разработчики. Чтобы поправить код, произведенной моделью, нужна модель. Нам же известно понятие “вендор-лок” и его последствия, ведь так? Разве эти ваши клоды-копайлоты не вендор-лок? И вы, друзья-элэлэмщики, не только садитесь задницей на иглу моделей все глубже и глубже, но и затягиваете других.
393
3
Когда что-то не работает, очевидное решение в том, чтобы починить. Второе неочевидное – отказаться. Чем старше становлюсь, тем чаще отказываюсь от того, что ломается. Разумеется, тезис слишком абстрактный и решается по ситуации. Но часто отказ не рассматривают в принципе и чинят одно и то же годами. Не надо так: отказ и пересмотр очень важны.
482
4
Читаю Конфуция. Вот какой случай дал повод о нем напомнить. Жил в Америке ультра-мага-патриот. Трамп, все дела. Потом он женился на русской эмигрантке, и пара поехала в отпуск. Супруга как раз продлевала визу, и оказалось, что старый документ уже недействителен, а новый еще не выдали. В аэропорту к паре подошли представители ICE – Immigration and Customs Enforcement (иммиграционная и таможенная служба США). Тут важно понимать контекст. Формально ICE борется с незаконной миграций, однако при Трампе штат расширили на порядок, чтобы проводить облавы. На работу в ICE устраивается отребье: отставные военные, бывшие таксисты и охранники. Мало того, что эти люди озлоблены на всех и вся; государство дает им в руки летальное оружие, чтобы задерживать мигрантов. То, что подобные облавы проходят со всеми возможными нарушениями, нет смысла и говорить. Достаточно не той одежды, головного убора, цвета кожи, чтобы оказаться в приемнике на месяцы. Семьи разделяют. Иногда при задержании гибнут люди. Представителям ICE не понравилось, что у супруги виза еще не выдана. Ее отправили в приемник, и там она провела несколько недель. Ситуация в приемнике ICE местами хуже, чем в тюрьме. Например, свет никогда не выключают, а охранники нарочно громко говорят по рации. Неделя – и от недосыпания едет крыша. Никаких медикаментов достать нельзя, правозащитников не пускают. За грубое слово изобьют и скажут родственникам, что поскользнулся на банановой кожуре. Все это время муж пытался вызволить супругу, навещал ее трижды в неделю. Видел все своими глазам. В итоге женщину отпустили под залог с надетым на ногу браслетом. В обращении к прессе мага-патриот сказал, что разочарован в Трампе и ситуации с преследованием людей. История пары на этом не кончилась: им еще ходить по инстанциям (в браслете) и доказывать правоту. Однако оставим их и подумаем над другим вопросом: при чем же тут Конфуций? При том, что примерно в 680 году ДО нашей эры (то есть 2700 лет назад) Конфуций вывел формулу человеколюбия: не делай другим того, чего не желаешь себе. Разумеется, и до Конфуция эту мысль высказывали в том или ином виде, но он возвел ее в абсолют. На человеколюбии держится все учение Конфуция. Условный мага-патриот уверен: можно устраивать облавы на мигрантов ради высшего блага. Ведь это мигранты: они цветные, глупые, что с них взять. Подумаешь, в приемнике тяжело спать и нет медикаментов? Это ложь правозащитников. Но когда в жернова попадает близкий человек, все меняется. Товарищ Сталин Трамп, произошла чудовищная ошибка… Если бы у мага-патриота был хоть грамм мозгов, он бы понял, насколько справедлива формула Конфуция. Не желай другим гнить в приемнике, если не хочешь, чтобы то же самое случилось с тобой – или близким, что отнюдь не лучше. За последние 2700 лет люди не придумали ничего лучше этой формулы. Остальные религии и учения – просто ее повторы. Например, формула целиком вмещает десять христианских заповедей: почитай родителей, не укради, не убий… В самом деле: хочешь, чтобы дети тебя уважали как родителя? Уважай своих родителей. Не хочешь, чтобы у тебя крали? Не кради сам. Не хочешь быть убитым? Не убий. И так далее. Глядя на историю людей, иной раз поражаешься. Мысль высказали 2700 лет назад и с тех пор повторяют во всех вариациях. Понять ее – это ведь не вырастить плавник или третью руку: тут не нужны тысячелетия. Но судя по текущей обстановке, до понимания формулы осталось еще очень и очень долго.
863
5
Глава 9. Версии и патчи
637
6
Когда вы увозите ребенка к бабушке в деревню, скорее всего там нет микроволновой печи, кондиционера, интернет-канала под 4К и других полезных вещей. Но никто не сомневается, что ребенку в деревне полезно: речка, солнце, животные. Отдохнет от гаджетов, помоется в дачном душе и вообще – не развалится. Так и здесь. Да, чего-то не хватает, но не развалитесь. Можно и на Кложе писать хороший софт, зарабатывать и получать удовольствие. Да и не только на Кложе: я бы с удовольствием взялся бы за коммерческий проект на Common Lisp или Cobol — да на чем угодно! Нет тулинга? Не беда: либо обойдусь, либо напишу свой. С таким настроем легко жить и смотреть в будущее.
798
7
Если я правильно понимаю ты писал (пишешь?) на питоне в том числе. Просто я немного поглядываю что происходит в мире clojure и вижу, люди как-то справляются без linter-ов, typechecker-ов и без такого инструмента, как uv (это менеджер интерпретатора, зависимостей проекта и виртуального окружения) в мире python. Когда работаешь с чужим кодом и погружаешься в него, то такие вещи очень сильно помогают. Возможно, в мире clojure как-то можно обойтись без них, но тогда мне интересно как? До прихода в Кложу я много писал на Питоне. Сейчас, хоть и меньше, тоже приходится: на работе есть Python-лямбды и скрипты. Питон — популярный язык, и я прибегаю к нему в случаях, если нужно что-то продемонстрировать для широкой аудитории. Если отвечать на вопросы буквально, то да: тулинг Кложи не дотягивает до Питона. Для него созданы десятки линтеров и чекеров, а к каждому — еще столько же плагинов. Есть Jetbrains с Pycharm, которая выводит типы и предлагает автокомплит на любой чих. Программирование на Питоне в Pycharm стало как в Джаве — все типы подхватываются, и возникает ощущение, что в языке строгая типизация. Что касается uv и uvx, то я не застал их, но знаю, что это мощные средства. До этого изобилия Кложе далеко как до Луны. IDE нет, есть только плагины к редакторам. Я пользуюсь связкой Emacs + Cider, но понимаю, что освоить ее новичку трудно. Автокомплит каждый настраивает как может. Проверку синтаксиса в полете и прочие удобства — тоже. Централизованным решением вроде Jetbrains даже не пахнет, и вряд ли оно когда-либо появится. Не все так плохо с линтерами. Есть весьма развитый clj-kondo, который отлавливает много ошибок, например неверное число аргументов, необъявленные переменные и так далее. Суммарно кложурных линтеров наберется с десяток, и если использовать хотя бы пару из них, это решит некоторое число проблем. Также есть форматтеры кода по определенным правилам. Существует кложурный LSP сервер (Language Server Protocol). Во многих редакторах LSP-клиент идет из коробки (VS Code, Emacs), так что здесь наблюдается развитие. С LSP у вас будет автокомплит, переход по коду и остальные базовые вещи LSP. В Кложе есть REPL, который закрывает много проблем. REPL основан на том положении, что единственный способ доказать, что код работает – это запустить его. Бывает, что код на Джаве выглядит корректно, но не работает. Непойманное исключение, ошибка индекса в массиве, NPE и так далее. Все это проверяется на практике, компилятор не поможет. Будет глупо оправдываться тем, что компиляция прошла: какая разница, если прод падает? Зато REPL позволяет выполнить код в редакторе и отловить подобные случаи. Кстати, замечаю вот что: все больше джавистов топят за TDD – разработку от тестов. Парни не понимают, что TDD – это прокисший REPL, своего рода костыль, чтобы поскорее запустить код. В Джаве нет репла, но есть зеленая кнопочка Run, которая появляется в Main- и Test-классах. Нажатие этой кнопочки – просто убогий способ запустить код и ничего больше. REPL не отменяет тестов, и их пишут – юнит-, интеграционные и так далее. Если переходить на Кложу с языков вроде Питона или Джавы, будет неудобно. Там у вас уютный Jetbrains, который по одной клавише угадывает экран кода. Здесь — самосбор: плагины к редактору, запуск линтера из командной строки. Зачем все это? Затем, чтобы выйти из зоны комфорта, увидеть разнообразие, попробовать себя в чем-то другом. IDE и тулинг на все случаи жизни — это здорово, но нельзя на них замыкаться. Не вся работа делается в IDE по подписке. Когда Рич и Кен делали Unix и Си, разве были у них средства, аналогичные нашим? Они сами написали линтеры, парсеры, чекеры и прочие обвязки. А как написали IDE без IDE? Удобства – это хорошо, но плохо, когда зависишь от них. Если точнее, плохо, когда кругозор сужается до той степени, когда жизнь без удобств становится немыслимой. Речь не о том, чтобы полностью от них отказаться. Но полезно быть в состоянии что-то сделать без привлечения мощных средств.
634
8
Да или нет? Кстати, лютейше бесят ребята, которые делают кнопку подтверждения слева. Это неправильно. Продолжение действия до
Да или нет? Кстати, лютейше бесят ребята, которые делают кнопку подтверждения слева. Это неправильно. Продолжение действия должно быть справа, а слева — возврат или отмена. Разумеется, к тем ребятам, которые не могут показать текст, это не относится — у них еще все впереди.
567
9
Почти на всех сайтах я замечаю повторный рендер. Это когда контент нарисовался, а потом Реакт решил, что виртуальное дерево устарело. Поэтому вжух – и контент рисуется еще раз. То же самое во многих мобильных и настольных приложениях вроде Slack или Teams — которые только называются "приложениями", а на самом деле оболочка Хрома или WebView. Никто не считает это проблемой. Подумаешь, мигнул контент! В нулевые скорость была низкая, верстали таблицами, и сайт собирался по 30 секунд. Бывало, уже давно читаешь текст, и раз – что-то подгрузилось, подпрыгнуло, перестроилось. А тут – всего-то мигнуло. Забавно, что современный фронтенд по-прежнему в ситуации эпохи нулевых – не может победить технические трудности. Должен быть улучшенный алгоритм рендера, который бы не срабатывал дважды. Еще лучше – дать над этим контроль разработчику. Ну и фронтендеры хороши: никого не парит, что экран мерцает. Я вот заметил недавно, что на каждый клик огромная таблица повторно рендерится. А мне отвечают – не приоритетная задача. Спасибо, починим через никогда. Давайте договоримся: не важно что у вас под капотом, Реакт-Вуй или что угодно. Контент не должен перерисовываться только потому, что ему так показалось. А если эти ваши Реакты-Вуи не починить, то верстайте так, чтобы не провоцировать повторный рендер.
836
10
Коротенькая заметка о ребятах, которые на все отвечают выхлопом нейросети: Don't be a meat proxy. Хороша уже тем, что метко вводит новый термин: meat proxy. Мясной посредник между человеком и нейросетью. Замечаю, что все больше людей скатываются к роли посредника. Задаешь коллеге вопрос – он подвисает на пять минут и кидает md-выхлоп. Разумеется, он его не читал: тебе надо – ты и разбирайся. Попадаются ребята, которые открыто пишут: Иван, я передал твои замечания по ревью нейросети, и вот что она сказала… Далее идет md-выхлоп, который, конечно же, заботливый коллега даже не читал. Некоторое время я не знал, что делать с такими людьми – по каким углом смотреть и как взаимодействовать. На мой взгляд, человек, который проксирует каждое обращение к нейросети – словно проблемный родственник. Лучше его не провоцировать и не подкидывать горячих тем, и тогда, может быть, все обойдется. Со временем я понял, что, похоже, некоторые люди плохо улавливают этикет. Каждая технология требует своего этикета, но не все это понимают – в инструкции не написано. Скажем, когда появились мобильные телефоны, считалось нормальным обсуждать бытовые дела на всю маршрутку. Когда появились планшеты и мобильный интернет, каждый решил, что можно включить сериал или игру без наушников. Сейчас так поступают разве что дети и пенсионеры. С нейросетями та же история. Есть те, кто по какой-то причине не понимает: людям нравится нормальное, живое общение. Взаимодействие с машиной – это один протокол, с коллегой – другой. Если коллега отвечает макрдаун-выхлопом, с ним просто не хочется общаться – каким бы лапочкой и хорошим человеком он ни был. Верю, что когда-то это поймут. Я подожду.
1 168
11
Иногда русская озвучка бывает, мягко говоря, спорной. Актеры кричат в тех местах, где персонаж шепчет; интонация странная, пропадают акценты, идиомы, игра слов. Так что если вам позволяют условия (знаете язык, партнер(ша) не возражает), лучше потреблять фильмы и игры в оригинале (или позже пересмотреть ключевые сцены). У этого правила, однако, есть исключение: иногда в оригинале звучит русская речь. Сделано это так, что хочется не слышать ее ни за какие деньги. Имеем американского персонажа. Всем он хорош: и силен, и умен, и женщину спас. Одна беда – русского происхождения. И вот на середине фильма всплывает русская мафия, дядюшка или бывшая, с которыми герой изъясняется по-русски. То есть как по-русски: в Гугл-транслейт набивается текст на английском, тот выдает русский транслит. Актер учит его наизусть как абракадабру: “Татиана, как дафно ты юже десь?” Татьяна: “Пивет Джон, две ньидели ка пиехаля”. Разумеется, у меня нет претензий к американскому зрителю. Им без разницы – русский, бурятский, венгерский – все это диалекты каких-то варваров. Но куда смотрят создатели фильма? Разные факт-чекеры и прочие специалисты, которые отвечают за реалистичность сцен. Неужели нельзя найти русскоговорящего актера с похожим голосом и озвучить пару фраз? В чем сложность? Когда русский бандит обращается к американцам, проблемы с акцентом не возникает. Тут даже переигрывают: “лэт мы спык энглиш фр-р-ром май хар-р-рт”. Плохой персонаж всегда будет с рокочущим “р”. Как обезьянничать, так все мастера. А как насчет нормальной речи? Много лет назад со мной был случай. Я играл в одну игру, и там на хороших парней (американцев) напали плохие (конечно, русские). Атаку отбили, и одного молодого бандита взяли в плен. А он оплакивает убитую шальной пулей сестру: Наташа, очнись, солнышко, пойдем… и все это – на чистом русском. Ощущение, словно за спиной кто-то говорит. Я аж подскочил на стуле. Из Википедии и всяких ссылок я узнал, что этот фрагмент – инициатива русскоязычного сотрудника студии. Изначально дорожку записали как есть – транслитом. Вообразите, как бы звучали слова скорби из уст человека, который не знает языка? Картавые “встаувай, Натаща, ти живуа? Нье умиай!” Все это – в момент смерти? Это даже не кринж, а пиздец, и так делать нельзя. Разработчик прекрасно это понимал, и сделал вот что. Когда все ушли, он записал дорожку на нормальном русском и подменил в ассетах. Никто не заметил, и русская речь ушла в релиз. Позже игру хвалили в том числе и за это: впервые за вечность в игре адекватная реалистичная речь, а не транслит. Выходит, что инди-студия смогла, а Голливуд не может? Слабо верится. Интересно, что в локализации фильмов мы не сталкиваемся с подобным кринжем: герой говорит с родными на нормальном языке, в то время как в оригинале звучит тарабарщина. Оригинал, увы, нет-нет да подкинет подобный сюрприз. Длятся подобные сцены недолго, но даже их хватает, чтобы свалится на пол от отчаяния и стыда.
1 067
12
Как-то давно, аж в 2023 году, я жаловался на куко-баннеры. Проблема вот в чем: сегодня почти любой сайт выстреливает плашкой о том, что выставляет куки. Десятилетиями мы с этим жили, но пришли европейские бюрократы и сказали: непорядок. Надо не только уведомлять, но и предлагать пользователю выбор. Все куки, только обязательные, необязательные и обязательные, свой выбор. Дополнительно прилагается простыня о том, как эти куки. За европейскими бюрократами подтянулись другие по всему миру. Вместе с тем нам не повезло с дизайнерами: никто не стал договариваться, каждый кто в лес, кто по дрова. Один сайт показывает выпадашку, другой две, третий – полоску, четвертый прячет контент и так далее. Мечта еврочиновника сбылась: все сайты уведомляют. Стало ли конечному пользователю удобней и безопасней? Нелепый вопрос. Пользователю ничего не остается как ставить плагины вроде "I don't care about cookies". Одновременно схожую функциональность добавили в блокировщики рекламы. Последнее особенно забавно: между блокировкой рекламы и куко-баннера нет разницы. Не все ли равно, что там в выпадашке? То и другое одинаково мешает увидеть контент, поэтому выход — резать. На мой взгляд, совершенно очевиден следующий факт. Если каждый сайт спрашивает о какой-то ерунде, эту ерунду выносят в настройки браузера. Должен быть особый раздел, где я жму галочку "пофиг на куки". Это свойство доступно в JavaScript; сайт читает его и определяет, показывать окно или нет. Другой способ без JavaScript – браузер отправляет заголовок вида X-Cookie-Policy-Preferences=pofig Бэкенд проверяет значение на множество all, none, essential-only и другие и определяет, показывать окно или нет. Можно написать спецификацию, которая определяет важность кук, признак их передачи сторонним фирмам и так далее. Все это технические детали, но важно одно: когда есть соглашение, под него можно сделать интерфейс. Повторюсь, текущая ситуация, когда каждый сайт кукарекает о куках, никуда не годится. Чиновник доволен, а нам-то с вами этим пользоваться. Вспомните, что было, когда в браузеры добавили уведомления. Каждый сайт при открытии долбил: включи нотификации, включи нотификации, че ты как лох, включи-включи-включи. А еще дай доступ к геолокации и трекингу, чтобы два раза не вставать. Позже нотификации и прочие разрешение вынести в настройки: можно задать глобальное умолчание и исключения. (В скобках: удивляюсь, почему нет глобального запрета на перевод страницы. Открыл сайт на английском – перевести на русский? Открыл на русском – перевести на английский? Чинится системной опцией в Firefox, а настройки "никогда ничего не переводить" до сих пор нет). Так вот, к чему это все. Появилась инициатива под названием Kill the cookie banner! От каждой страны набираются волонтеры, которые будут сражаться за то, чтобы кук-обаннер настраивался в опциях браузера. Проект полезен уже тем, что показывает: есть люди, которым не все равно. Не хомяки вроде меня с плагином-банерорезкой, а те, кто хотят что-то изменить. Искренне желаю им успехов, пусть даже локальных, например на территории каких-то стран. Напоследок напомню, что в интернете все еще есть сайты, которые прекрасно работают без кук. Например, мой: https://grishaev.me/
640
13
Глава 8. Функции на языке Python
549
14
+1
No text...
758
15
Долгое время в Телеграме нельзя было постить текст с картинками. То есть было можно, но со скрипом. К обычному тексту нельзя добавить картинку, а если это сделать, то сообщение становится типом "медиа", и его текстовая часть сильно меньше. Премиум закрывает этот недостаток, но появляется другая беда: текст выравнивается по ширине картинки. Если картинка маленькая, текст превращается в мышиный хвост. В результате народ постит текст и картинки отдельно, чтобы не страдало ни то, ни другое. Но получается два сообщения, и если хочешь поделиться ими, приходится пересылать пару. Словом, бред. Со временем Телеграм стал полноценной медиаплощадкой; есть даже проекты, у которых единственный канал – месаджеры. При публикации картинок каждый извращался как умел: выносил их в галереи, объединял в коллажи и так далее. И вот в Телеграм завезли полноценный визивиг-редактор. Это когда картинки и текст чередуются, и нет смысла делить публикацию на текстовый блок и медиа. Также сделали заголовки, списки и редактор таблиц – этакий Ворд. Что ж, на словах все прекрасно, а вот на деле… ради интереса я сверстал небольшую статью: три абзаца, а между ними картинки. Сбросил в сохраненные сообщения и проверил на ноутбуке и телефоне. Оказалось, что шрифт статьи на один-два пункта меньше, чем обычный текст (см. картинку). Получается, тот, кто читает с ноута, будет напрягать глаза. Проверил настройки: шрифт выкручен на максимум, отдельной опции для шрифтов статьи нет. На телефоне оба шрифта – обычной публикации и статьи – одинаковы, и это хорошо. Но блок статьи срезан слева на один сантиметр. Почему? Зачем его срезать? Для чего пустота слева? Там ни одной кнопки, просто щель шириной в сантиметр, и через нее сквозит фон. На обоих устройствах клиенты последних версий. Надеюсь, что в будущем шрифты подтянут. Увы, пока что я не готов оформлять текст с картинками в виде статей: щурить глаза ради чередования картинок – так себе удовольствие.
805
16
a.set(b.get() + c.get()) Или, если речь идет об x = x + 1: x.set(x.get() + 1) Другой дело, что на тот момент, когда на доске впервые записано x = x + 1, ученик еще не знает об объектах. Поэтому в ход идут коробочки, из которых достали сто рублей, добавили и положили обратно. Повторюсь: кому-то сказанное покажется банальным, но я считаю, о присваивании говорят мало – а тема очень интересная и сложная.
733
17
Небольшая добавка к заметке про x += 5. В жизни каждого программиста был момент, когда учитель информатики писал на доске: x = x + 1, после чего смотрел в класс – поймут или нет? Класс, разумеется, не понимал и смотрел на учителя: что он несет? В школьной математике переменные неизменяемы: если взялся решать квадратное уравнение или систему уравнений, x не может по ходу дела переобуться во что-то другое. Да, можно подать на вход разные иксы и получишь разные игреки. Но одно дело входные данные, а другое – их мутация в полете. Учитель начинал рассказывать про коробочку, из которой достали сто рублей, прибавили рубль и положили обратно в коробочку. Что ж, какое-то объяснение это давало. Чувствуя наше сомнение, учитель откровенно продавливал свою аргументацию: если написать в Паскале x := x + 1, то икс увеличится. Видите? Спорить с этим было нельзя, но ясности не добавляло. Класс принимал объяснение как данность, но знаете что? Где-то глубоко во мне сидела мысль, что учитель и сам не понимает, как это работает. Да, он знает, какой получится результат, но не понимает истинных причин. Просто потому, что когда точно что-то знаешь, объяснение простое. Если бы меня попросили объяснить, как работает x = x + 5, я бы ответил так. В языках высокого уровня мы работаем с переменными: x, y и так далее. Этот код становится машинными командами, а в них никаких переменных нет. Лучше всего это видно на примере ассемблера. В ассемблере нет переменных – только адреса. Для удобства некоторым адресам можно сопоставить метку – логическое имя. Меткой может быть что угодно: переменная, точка входа в процедуру, место, куда нужно совершить условный переход и так далее. Выше я написал "переменная", но это не совсем верно: в ассемблере нет переменных. Мы резервируем память и одновременно добавляем к ней метку. Если метку убрать, программа скомпилируется и будет работать, просто мы не сможем сослаться на эту память – или сможем, но косвенно, отталкиваясь от других меток. Таким образом, метка – это адрес, просто именованный. Метка представляет собой число, и к нему можно что-то прибавить, чтобы сместиться в памяти. Если же взять метку в квадратные скобки, получим значение по указанному адресу. В этом и состоит двойственная природа метки: это адрес (число), однако можно либо взять ее значение по адресу, либо поместить значение по этому адресу. Если предположить, что в ассемблерном коде есть метки a, b и c, то выражение a = b + c выглядит так (пишу по памяти): mov eax [b] ; поместить в eax ЗНАЧЕНИЕ b add eax [c] ; добавить к eax ЗНАЧЕНИЕ c move a eax ; поместить ПО АДРЕСУ a значение eax Видим, что в случае с "переменными" b и c мы использовали оператор [], чтобы получить значение. А когда мы "присваиваем" результат в a, квадратные скобки не требуются – метка используется как адрес. Вот почему выражение a = b + c следует читать так: в адрес a заносится выражение, полученное как.... Важно, что в первой части: не "a становится" чем то, а именно "в адрес a" заносится то-то и то-то. Большая разница. Язык Си предлагает указатели – считай, именованные адреса с той же семантикой. Мы вправе работать с ними как вздумается: использовать их как числа для адресной арифметики или получать из них значения. Указатели – непростая тема, но по крайней мере здесь есть какой-то контроль. В выражении x = x + 5 этого контроля нет. Как я уже говорил, слева от присваивания стоит адрес, а если это что-то сложное вроде items[get_index(foo)], оно вычисляется, чтобы получить этот адрес. Таким образом, переменная в Си — это тоже указатель (метка), и компилятор трактует ее по ситуации: иногда как значение, а иногда как адрес. Единственный язык, где адрес и значение не перемешиваются — это ассемблер. В нем foo — это всегда адрес, а [foo] — значение по адресу. Как ни странно, присваивание неплохо ложится на объектную модель. Как мы выяснили, переменная – это пара адрес-значение. Ее операции: дай адрес, дай значение по адресу, помести значение по адресу. Можно представить переменную объектом с методами get и set. В этом случае выражение a = b + c мы бы записали так:
613
18
Оказывается, на 11 винде нельзя открыть блокнот (notepad.exe), если нет получения к интернету. Причем как и все у микрософта,
Оказывается, на 11 винде нельзя открыть блокнот (notepad.exe), если нет получения к интернету. Причем как и все у микрософта, даже это ограничение сделано через задницу. По нажатию на иконку 20 секунд ничего не происходит. После чего вылезает плашка: "Я не могу запустить это на этом устройстве. Чтобы запустить это, идите туда-то...". Ту ран зыс он зыс, ран зыс. Господи, какие же беспросветные уроды! Честно говоря, не знаю, как можно пользоваться операционкой, где даже блокнот не запустишь без приключений. Яблочные софт в последнее время тоже не сахар, но такого там нет: блокнот все еще открывается. Кстати, недавно на работе была драма: люди обновили Edge и потеряли закладки, куки, историю. Взамен получили нулевый браузер с приветствием. Добро пожаловать в Edge! Недаром Микрософт в последнее время называют Микрослопом. Все сходится.
763
19
Слушайте, ребят: уж если вы взялись набирать таблицы в маркдауне, то делайте не так: | id | title | comment | |---------|----------------|--------------------| | 1 | some title one | a long comment one | | 1001 | some | small commant | | 5551312 | - | foo | а вот так: | id | title | comment | |---------|----------------|--------------------| | 1 | some title one | a long comment one | | 1001 | some | small commant | | 5551312 | - | foo | Как я эту кашу буду читать на ревью? В емаксе это делается ОДНОЙ клавишей — TAB. Для других редакторов ест ьплагины. Вы и так все сгенерили нейронкой, неужели нельзя хоть чуть-чуть причесать?
610
20
Глава 7. Отчеты, функции, расписание
594