Получи случайную криптовалюту за регистрацию!

Стой под стрелой

Логотип телеграм канала @nikitonsky_pub — Стой под стрелой С
Логотип телеграм канала @nikitonsky_pub — Стой под стрелой
Адрес канала: @nikitonsky_pub
Категории: Новости и СМИ
Язык: Русский
Количество подписчиков: 9.12K
Описание канала:

Ведет @nikitonsky. Рекламы нет

Рейтинги и Отзывы

2.00

3 отзыва

Оценить канал nikitonsky_pub и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

1

3 звезд

0

2 звезд

0

1 звезд

2


Последние сообщения 9

2022-04-08 14:39:47 Татарин Фронтенд пожаловался в твиттере:

«Бля, опять регулярку писать. Я как не умел, так и не умею. Но писать придётся.»

(Кстати, совет молодым: не делайте текущее увлечение частью ника. Заебет вас фронтенд через пару лет, захотите стать вебкам-моделью, а в нике «Фронтенд». И че?)

И вот что ему написали:

«А может не надо?»
«А нет готовых либ под задачу?»
«Может найдёшь готовую?»
«У тебя теперь две проблемы»
«Регулярку не пишут, регулярку гуглят»
«Отдай аналитику своему, тебе-то нафига это»

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

Мне писали: лень лучшее качество программиста. Но должен же быть предел? Хоть что-то же надо уметь делать? Кому нужен программист, который только профессионально отмазывается от работы?

Мне писали: зачем плодить код, если есть готовые, хорошо оттестированные библиотеки. Ну вот есть на npm библиотека mask-string. Заменяет слова в строке на звездочки. mask("arse", "Parser") => "P****r". Что там внутри? Конечно, регулярка. Более того, mask(".", "...") виснет нахрен, потому что абстракции протекли: хотел заменить подстроку, а в итоге пришлось разбираться с регулярками все равно.

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

Мне писали: у регулярок плохая репутация. Но это не повод не использовать их вообще нигде. Не используйте там, где они не подходят. Используйте там, где подходят. Я же не XML-парсер на них предлагаю писать. Задачу узнайте сначала!

Мне писали: регулярки вызывают критические простои сервисов. А что не вызывает? Что угодно вызывает: языки вызывают, библиотеки вызывают, процессы вызывают, сети вызывают, конфиги вызывают, логи вызывают. И ничего, штопают и работают дальше.

Так что, зачем напрягаться? Недавно узкий круг лиц поднялся в айти с лозунгом «как меньше работать и больше получать». Понятно, почему эта позиция нравится начинающим. Более того, на текущем рынке действительно можно до определенного предела эксплуатировать работодателя.

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

Поэтому я агитирую за противоположную точку зрения. Разбираться в чем-то — не зашкварно. Уметь что-то лучше, чем не уметь. Расширять кругозор, узнавать новое — чистое удовольствие. Если вы устроились программистом, то программировать — ваша работа. Не все, что вам нужно, будет написано в библиотеках. Библиотеки тоже кому-то надо писать. Чем больше вы умеете, тем ценнее как специалист.

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

P.S. Задача из твита: определить соответствие одному из 4-х шаблонов. Шаблоны a + b * c, a * b - c, a / b * c, приходит например 100 + 200 * 300. Надо определить шаблон.

Если ваш первый инстинкт — «не используй регулярки», даже до того, как узнали задачу — надеюсь, вам теперь стыдно. ВСЕГДА узнавайте задачу.

Если вам все еще не стыдно, вот мое решение: (\d+)\s*([+\-*/])\s*(\d+)\s*([+\-*/])\s*(\d+). Покажите мне, как это решить понятнее без регулярок, и я, может быть, поменяю свое мнение. Мало ли?

Но пост в первую очередь все-таки не про регулярки. Пост про рабочую этику. И про то, что инструменты надо выбирать соразмерно задаче. Не забывайте об этом.
7.9K viewsNikita Prokopov, 11:39
Открыть/Комментировать
2022-04-03 19:29:58 Канал опять закрывается на неопределенный срок. Я опять не вывожу. Извините
8.8K viewsNikita Prokopov, edited  16:29
Открыть/Комментировать
2022-03-31 22:02:54 Отдельный пост для тех, кому не понравился предыдущий. Не используйте регулярки, учите стандартную библиотеку, пользуйтесь только написанным другими кодом. Потому что он уж точно стандартный, уж точно без ошибок, точно делает что вам нужно и точно поддерживает все RFC до последней буквы. И все у вас будет хорошо
11.4K viewsNikita Prokopov, 19:02
Открыть/Комментировать
2022-03-31 18:31:33 Опрос, проведенный в интернете, показал, что 28% программистов не знают/не используют регэкспы. Еще 37% их ненавидят.

И тем не менее один из самых практичных советов, которые я могу дать начинающим — разберитесь в регэкспах. Это как плавать — научился один раз, а пользы потом на всю жизнь.

Да, к синтаксису есть вопросы (см. Egg Expressions, Verbal Expressions). Да, можно злоупотребить до write only. Да, HTML не распарсишь. Да, могут быть дырки в перформансе (это, кстати, один из поводов разобраться).

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

Как разобрать такой вот URL на части?


"https://example.com:8080/path?x=y#fragment"


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

Без библиотеки? Ну наверное как-то так:


let domain = s.indexOf("://", 0) + 3;
let port = s.indexOf(":", domain);
let path = s.indexOf("/", domain);
if (port > path)
port = -1;
...


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

Ух, короче. Как представлю, сразу глаз дергается. Лучше уж пусть библиотека выебет меня в ж^W^W^W отформатирует мне диск C:, чем такое вручную писать.

Или... Или можно накидать регэксп! Вот я за пять минут сделал, не подглядывая в интернет:


#"([a-z]+)://([^/:?#]+)?(?::(\d+))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?"


Да, читается отвратительно. Но при желании можно оформить по-приличнее:


(re-pattern
(str
"([a-z]+)" ;; schema
"://"
"([^:/?#]*)?" ;; domain
"(?::(\\d+))?" ;; port
"(/[^?#]*)?" ;; path
"(?:\\?([^#]*))?" ;; query
"(?:#(.*))?")) ;; fragment


Если я вас сейчас напугал и вы думаете «ну нафиг», то, во-первых, пример чуть экстремальный. Большинство реэкспов в жизни выглядят гораздо прозаичнее, типа .*\.(jpg|jpeg|png) или ([^@]+)@(.*). Что не делает их менее полезными!

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

И сколько геморроя это нам сняло! Ценой пяти минут работы мы сжали сотню строчек до одной (или сэкономили подключение целой библиотеки). Причем этот регэксп будет работать быстрее и надежнее любого алгоритма на indexOf, который вы напишете сами.

Но самое классное — это знание переносимо! Регэкспы есть везде: во всех языках, во всех редакторах, во многих консольных утилитах. Они слегка отличаются, но базовые функции примерно одни и те же и записываются одинаково. Что уже неплохо по сегодняшним временам. Настоящий learn once, use everywhere.

Я вижу регэкспы таким же обязательным инструментом, как сложение или там поиск в массиве. Без регэкспов как без рук.

Учите, короче, регэкспы. Потом спасибо скажете.
11.1K viewsNikita Prokopov, edited  15:31
Открыть/Комментировать
2022-03-29 16:29:38 Смотрел сейчас Random Jonathan Blow Moments 2, и там есть видео, где он копирует через проводник файл с моделью, модель подхватывается движком и перерисовывается в реальном времени, а винда к этому моменту только начинает рисовать диалог «Идет копирование». И потом еще секунды четыре рисует фейковый прогресс-бар. Хотя само копирование завершилось, наверное, за миллисекунду.

Тут же вспомнил видео с Essence OS, где у чувака ОС ставится за один кадр:

> Например, в инсталляторе он нажимает «Install» и тут же, в следующем кадре уже написано «Installation complete». Не секунду позже. Не полсекунды. Сразу же. Как будто ничего и не произошло.

Помогает, что дистрибутив весит 17 мегабайт всего. Мне тогда, помню, в комментариях разоблачители писали:

> А ничего и не произошло. Он использует следующий экран, где спрашивается логин, чтобы спрятать время на копирование 17 Mb самой ОС.

На что я отвечал:

> Ну вот в самом слабом макбучном SSD запись 4500 Mb/s. То есть на запись 17 Мб нужно 17/4500 = 0,004 секунды

И тут же вспомнил случай, когда у меня на каждый билд собирался и паковался ZIP на десяток мегов, а потом при запуске обратно распаковывался.

И я этого несколько месяцев не замечал. Тупо забыл про это. При том что я усердно выдрачивал время билда (не люблю ждать). Записать десятки мегабайт — не что-то, что способен заметить человеческий глаз.

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

Каждый раз, как вспоминаю эти примеры, удивляюсь, зачем условному Гредлу пара секунд на запуск. Не на сам билд, только на то, чтобы подготовиться к работе. Что он там даже чисто теоретически может такого делать? И ничего, вполне себе успешная билд-система. Джава-программисты даже нахваливают.
7.9K viewsNikita Prokopov, 13:29
Открыть/Комментировать
2022-03-27 03:27:13 2/2

Окей, разделы. Разделы же можно удалять? Можно. Я в общем-то все равно их форматировать собирался. Удаляю все. О, теперь можно ставить! Куда подевались проблемы с MBR, интересно?

Ладно, жму. Еще сообщение. «Винда может создать один или несколько разделов, которые нужны для правильного функционирования системы». Ну епт.

Во-первых, что за неопределенность? Определитесь, создаст или не создаст. Что значит «может»? По настроению, что ли?

А во-вторых, эта информация мне нахер не нужна. Ну создаст, мне-то что? Пусть делает что нужно.

Короче, винда поставилась. Довольно быстро, кстати. Перезагружаюсь. «Давай ставить винду, говорит».

ВСМЫСЛИ?

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

Бился я, бился, и пошел от бессилия в BIOS ковыряться.

Нашел там порядком интересных опций, названия которых включали слово «Windows» и даже специфичные версии (7, 8.1, 10). В BIOS-е! Как там, ребят, с потолка не капает? Абстракции не протекают?

И тут на глаза мне попались знакомые буквы. UEFI. Это как почти как EFI в том сообщении раньше! А значит, теоретически, может на что-то повлиять. Стояло «Legacy or UEFI», но можно выбрать просто «UEFI», без Legacy. Казалось бы, если с двумя типами загрузки он не может загрузиться, с чего бы ему грузиться только с одним из двух?

Но было бы большой ошибкой применить тут логику. Опытные пользователи компьюьтеров знают: компьютеры не устроены логически.

Конечно, выбор UEFI сработал и все починил. Ну как починил? В меню boot loaders у меня до сих пор порядка десяти пунктов с записями типа дисков (понятно), разделов (кажется??) и какого-то старого хлама типа Ubuntu и macOS, которых давным-давно нет. Интересно, на что они указывают?

И не говорите мне, что установщик про UEFI ничего не знает, поэтому и не показывает. Он явно куда-то в ту же таблицу смотрит: в нем были, например, опции типа «перезагрузиться в винду» и три варианта (видимо, ubuntu/macos он как-то отмел):

1. Windows 10 disk 5
2. Windows 10 disk 3
3. Windows 10 disk 3

Да, именно так. Сначала пять, потом два раза три. Где остальные цифры — хз. Что это все значит — я даже узнавать не хочу. А, и ни один из них не работал, конечно.

What have we learned, Palmer?

С компьютерами так тяжело не потому, что они что-то сложное делают. Проблема в том, что они не показывают то, что нужно, и показывают то, что не нужно. Бесполезная информация афишируется (сколько разделов нужно для функционирования винды), а критически важная, от которой на самом деле зависит поведение системы (boot loaders), спрятана до полной невидимости.

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

Не покупайте ПК, короче. Играйте в приставки, прогайте на ноутах, смотрите кино на умном тв. И ни за что, ни под каким предлогом не интересуйтесь, что там под капотом. Вам это не понравится.
8.2K viewsNikita Prokopov, edited  00:27
Открыть/Комментировать
2022-03-27 03:27:01 Решил я, значится, писю свою (пэка, то бишь) к продаже подготовить. Загружаюсь, а там AMD драйвер забыл настройки integer scaling. Не впервой, открыл, вернул. И цвета какие-то не такие. Тут пришлось побегать, потеребить всякие контролы (реально практичный способ — поменять какое-то значение, а потом вернуть как было), и в конце концов все стало как нужно. Почему? Хз.

Ладно, гуглю, значит, как загрузочную флешку создать. Майкрософт говорит: вот, скачай утилиту. Ну окей. Десять гигов говна вы, значит, в дистрибутив положили, сканер с попапом, проверяющие на Windows 11, тоже положили, рекламу Candy Crush положили, а на утилитку весмо 200 килобайт места не нашлось. Чтош.

Утилитка говорит: непонятная у тебя какая-то флешка. Открываю в Disk Management и реально какая-то странная: прямо посередине какой-то раздел на 200 мегабайт, неудаляемый. Очень неудобно. Пришлось брать мак и форматировать там. Винда не хотела, да.

Дальше утилитка пошла качать ISO-образ. Заняло это примерно час. Ну да, час, хотя на 50 Mbit должно было около 15 минут.

Дай, думаю, запущу Divinity 3 ^W^W Baldurs Gate 3 в последний раз, пока она качает. Запускаю — уровень грузится, моделек нет. Можно из этого сделать аргумент, что у разработчиков руки кривые, но для меня это все-таки ПК экспириенс в первую очередь: все настолько плохо организовано экосистемно, что никто не может делать нормальные приложения, независимо от количества денег или желания. Баг чинится только переустановкой драйверов, кстати.

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

Почему для этого нет кнопки? Что, люди компьютеры никогда не продают, что ли? Меня всегда это удивляло — административные интерфейсы винды никогда не были особо продуманными, зато всегда развесистыми. Но какие-то операции делаются только через командную строку. Казалось бы — раз у вас уже и так мегатонны говна, соберите тогда уж совсем все туда. Но нет.

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

Тем временем сделалась флешка. Перезагружаюсь. Грузится с флешки. Давай ставить винду, говорит. Давай! говорю.

Вот, говорит, какие у тебя разделы. И список в семь штук показывает. На два диска!

Интересно, думаю. Нажимаю на самый большой. Не, говорит. Не буду. Нажми, чтобы узнать, почему. Че бы сразу не показать? Нажимаю. И она выдает, внимание, фразу:

«На этот раздел установка Windows не представляется возможной. Это MBR раздел, а чтобы EFI, надо GPT».

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

И тут, возможно, если вы знаете, что такое MBR/EFI/GPT, вы удивитесь: все же понятно? Я не знал. И вот для того, кто не знает, это максимально идиотская формулировка, просто чистая тарабарщина. Знаете, как в фильмах про хакеров те несут полную ахинею, которая типа «звучит компьютерно»? Вот это в точности такая же ахинея. У вас же XYZ, но чтобы ABC, вам нужен SPQR. ЧТО, БЛЯДЬ? Я даже хрюкнул, насколько по-программистски это звучит.

Вообще, в моем детстве все было просто. Показываешь винде на диск, она говорит «окей» и ставится, потом показываешь на него же биосу, он говорить «окей» и грузится.

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

1/2
7.0K viewsNikita Prokopov, 00:27
Открыть/Комментировать
2022-03-23 16:29:27 Че, как вы вообще? Держитесь?
8.4K viewsNikita Prokopov, 13:29
Открыть/Комментировать
2022-02-24 17:08:00 Вчера шутил шутки про размер телефона, а сегодня война. Очень плохо Хуй войне, сил украинцам.
4.6K viewsNikita Prokopov, 14:08
Открыть/Комментировать
2022-02-24 02:33:38 Был у меня когда-то прекрасный телефон: Lumia 1520. Здоровый как лопата, OLED экран, Windows 8, интерфейс стильный, приложений нет, красота короче.

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

Прошло восемь лет и я купил себе лопату-айфон. Размеры практически такие же (160x80 mm), но в кармане лежит прекрасно, никакого дискомфорта, нигде не упирается и не отдавливает.

Что случилось? Я вырос? Мода на джинсы поменялась? Нет. Все очень просто: у Lumia углы были прямые, как логотип Виндоус, а у айФона — скругленные.

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

А мораль простая: иногда для успеха достаточно спилить углы.
3.8K viewsNikita Prokopov, edited  23:33
Открыть/Комментировать