*nix artist
511 subscribers
21 photos
1 video
78 links
Про команды и код. Только добрые мысли, раз в неделю, just for fun.
Обзор блога: https://neexee.com/ru/about/
Download Telegram
Как принимать благодарность и похвалу

Слова благодарности — это подарок. Поэтому и относиться к ним нужно как к подарку.

Когда тебе дарят подарок, не нужно судорожно шарить по карманам и отвечать: «подожди-ка, у меня тоже кое-что для тебя есть». Со стороны дарящего это выглядит так, что его не поняли и не приняли.

Странно отказываться от подарка со словами «ой, да не за что». Со стороны дарящего это выглядит как отказ от подарка.

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

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

Статьи в таком формате тоже можно писать:
https://neexee.com/ru/posts/chinese-tactics/
👍7
Опенсорс на ТВ

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

kdenlive одна из таких. Это опенсорсный видеоредактор. Для казуалов вроде меня kdenlive явно не хуже Adobe Premier Pro, это 100%. На софт Adobe я насмотрелся пока работал у журналистов эникеем.

Конечно, без мини-игры в Linux там не обойдётся, но это даже и хорошо. У меня, например, не работала встроенная в редактор запись звука. Хотел сделать voiceover для куска видео, а редактор просто не видел мои аудиоустройства. Как сказали на форуме авторы kdenlive «Угу, мы эту функциональность временно удалили, чтобы упростить переезд с QT5 на QT6, в следующей версии вернём, не переживайте :)». В таких ситуациях два пути, либо компилить нужную версию редактора из исходников, либо писать внешние скрипты, которые будут подкладывать уже готовые записи в редактор. Я пошёл по первому пути.

В общем, очень радует, что есть крутой опенсорсный софт. Чистое искусство, которое ещё и масштабируется.
4👍2
Давно беспокоила тема ключевых сотрудников, а тут ещё книжка хорошая подвернулась. Записал, что думаю.

https://neexee.com/ru/posts/key-employees/
👍5
Природа техдолга

Впервые техническую сложность проекта сравнили с долгом в 1992 году. Перевожу:
Выпустить незрелый код — это как влезть в долги. Маленький долг ускоряет разработку, если быстро выплачивать долг переписыванием кода. Не выплачивать долг опасно. Процент по долгу — это каждая минута, потраченная на не-совсем-тот код. Бывает, целые организации встают колом под долговой нагрузкой из-за незрелой реализации.

Позже метафора сократилась до слова «техдолг». Метафора хорошая, но у неё есть ограничения.

Ограничение №1. Любому предпринимателю понятно, что финансовый долг — это прежде всего инструмент. Можно взять деньги в долг и построить новый завод. Для техдолга не так, язык не поворачивается сказать «мы использовали техдолг для того, чтобы...». Так что техдолг — это просто отходы производства, а не инструмент. Это сильно отличает его от финансового долга и это нужно учитывать, чтобы не путать людей с предпринимательской жилкой.

Ограничение №2. Бывает, проскакивают такие тирады:
Бизнес ничего не понимает в разработке! Мы используем метафору про долг, чтобы хотя бы на пальцах объяснить, почему всё так медленно!

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

В хороших разговорах о техдолге можно пробовать такие варианты:
1. Заменить «техдолг» на что-то близкое к доменной области. Если автоматизируем лесопилку, можно говорить, что выгребаем опилки из рабочей зоны в конце дня. Если автоматизируем ресторан, ноль вопросов к тому, что в коде нужно периодически мыть столы и посуду. Автор метафоры «техдолг» писал программу про финансы, поэтому у него сравнение зашло хорошо.
2. Заменить «техдолг» на что-то поярче. Например, мне кажется, любому человеку приятнее приплыть из моря отходов в горное озеро, чем поскорее выплатить долги.
3. Пойти ва-банк и ввести понятие техмикрокредита и техноипотеки. Почему нет? Нам как раз не хватает метафор, описывающих размер и опасность техдолга.
👍3🔥2😁21
i18n и домены

Есть разные схемы кодирования доменных имён, заточенных под совместимость со старым-добрым DNS. Например, есть ThaiURL и Punycode. Первая схема превращает человеческое тайское ชื่อไทย.คอม в понятное роботам byfdosbniqlse.bycc2ii.net, вторая превращает человеческое русское вперед.рф в понятное роботам xn--b1aeca2ch.xn--p1ai.

Оставим ThaiURL наслаждаться под тропическим солнцем и посмотрим на Punycode. Punycode — это один из самых визуально заметных фейлов в истории Интернета.

Началось всё с того, что к 2002 году появилось движение под названием Internationalized Domain Names in Applications (IDNA). IDNA сначала породили RFC 3490, который описал схему превращения любой юникодной строки (1.1 миллиона возможных символов) в английские буквы-цифры и чёрточки (37 возможных символов). Потом вышел RFC 3492, который применил схему к доменным именам, заодно назвав такое применение Punycode.

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

IDNA расширили набор с 37 до 100 000 символов. В ozon.ru стало можно вписать русские буквы о. Выглядят они точно так же, как английские, но это будет даже близко не настоящий сайт. Это называется IDN homograph attack.

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

Разрешили конфликт интересов в 2002 году Евгений Габрилович (беларус, сейчас директор Facebook Reality Labs) и Алекс Гонтмахер, написав вайтпейпер «The homograph attack». Оказалось, что регистраторы никак не могут решить проблему. Атакующий всегда может купить красивый домен первого уровня (например, attacker.com), а затем на своём DNS-сервере создать запись про поддомен. Если применить IDNA-преобразования к такому поддомену, получится строка, похожая, например, на ozon.ru/. Последний / в ней не настоящий /, просто похож. URL выглядит вот так: https://ozon.ru/.attacker.com.

Регистраторы с таким не могут поделать абсолютно ничего, поэтому проблему пришлось решать на уровне браузеров (стандарты IDNA было уже не исправить). Если браузер видит, что локаль пользователя и домен в URL чужды друг другу, он отображает роботочитаемый Punycode. Также браузеры разрешают IDNA только для некоторых доменов верхнего уровня  (например, .рф). Для .com и подобных модных доменов верхнего уровня IDNA запрещены.

Итоги

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

Если в браузерной строке отображается https://xn-что-тотам, это огрызок древней уязвимости и еще более древней обратной совместимости. Так часто бывает, если безопасность и юзабилити не были заложены в систему с самого начала.

Для борьбы с подобными огрызками по части безопасности недавно появилась новая профессия под названием security engineer. Хорошая профессия, напишу про нее отдельно.
👍5🔥4
Как выбрать язык

На днях из любопытства навестил музей-усадьбу Державина. Сотрудники музея лапочки, показывают и рассказывают очень интересные вещи. Например, рассказывают, что господин Державин с друзьями планировал и исполнял реформы русского языка в 1810-х годах. У него была своя школа, у Карамзина, его противника, своя. Реформы нужны были для того, чтобы у читателей русской литературы сложилось правильное с точки зрения государства представление о мире. Для успеха реформ нужно было понимать, какими качествами должен обладать язык, чтобы он стал популярным.

Слово за слово, экскурсовод подвела к понятной идее. Популярными становятся языки, ведущие научно-технический прогресс человечества.

Это объясняет историческую популярность латыни, арабского, немецкого, английского, китайского и так далее. Без разницы, сложный ли язык в изучении. Без разницы, какие у него средства выразительности и лучшие художественные произведения. Важен только вклад в научно-технический прогресс. Если бы в России первыми придумали и нормально реализовали iPhone под названием айЛапоть, все по миру ходили бы с айЛаптями и знали кириллицу.

С такой точки зрения можно смотреть и на языки программирования. Вот, например, возьмём этот рейтинг (или альтернативный рейтинг). Он говорит, что прогресс в IT двигают Python, Java и JavaScript. Да, они могут кому-то не нравиться, но не практиковать их  — это всё равно что не практиковать английский, китайский и испанский. Если пишешь на непонятном языке, обнаружишь свой гениальный труд в мусорке истории.

Интересно, какой порог значимого вклада языка в общемировой прогресс? 1%, 5%? Хотелось бы понимать, на какие языки можно не тратить время. Какая задержка между превращением языка в топ-1 язык прогресса и началом его массового обучения в школах? Какой ROI от навязывания языка детям со школы? Насколько корректно сравнивать естественные и искусственные языки с точки зрения их влияния на прогресс? Где найти ответы на эти вопросы?

Итоги

Разбираться в истории эволюции языков интересно и полезно. Можно подкорректировать и жизненную, и профессиональную стратегию.

Новичку имеет смысл изучать язык, объективно двигающий человечество вперед, а не чью-то вкусовщину.
👍5🔥3
С современными свободными инструментами с картинками работать одно удовольствие. Сначала генерируешь картинку слева, а затем чистишь её, доводя до картинки справа.

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

Благодаря soft inpainting можно делать магию. Если интересно, могу подробнее написать, как это делается.
👏2
Какой гофер выглядит лучше?
Anonymous Poll
40%
Розовый (слева)
60%
Голубой (справа)
Оказывается, бывают качественные курсы

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

Понедельник - практика переговоров.
Вторник - практика для тимлидов.
Среда - практика для CEO.
Четверг - практика для project manager-ов.
Пятница - практика для CTO.

По сути это были 5 бесплатных пробников полноценных курсов, которые идут отдельно и по нескольку месяцев. Лендинг у курсов сделан для каких-то инопланетян, поэтому ожидания были низкие. Тем не менее, по итогу узнал много нового. Если учесть, что полноценный курс для CEO стоит 300 тысяч рублей, получить порцию контента бесплатно было приятно. Ну и времени на обучение адекватно вышло, для занятых инженеров это важно.

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

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

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

Самое интересное, конечно, было на практиках для CEO и CTO. Много там было такого, что рвало шаблон. Напишу отдельно следующим постом.
👍4🔥2
Уроки с курсов для CEO
Урок №1. Сомнительные компании


Несколько лет назад я собеседовался в компанию «что-то-там Bet». Игровыми ставками они занимались. Ребята попались на удивление приятные. Возможно, поэтому во время собеседования они спросили: «тебе нормально, что мы ставками занимаемся?». Я на автопилоте сказал, что нормально, но реально задумался только когда собес закончился. Отказал им.

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

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

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

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

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

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

Если по владельцам информации нет, тогда уж можно переходить к самой ненадёжной (в силу субъективности) информации — отзывам работников об этой компании.

Анализируя компании в таком порядке (фин. показатели → владельцы → отзывы сотрудников) можно сэкономить кучу времени и нервов, не ввязываясь лишний раз в собеседования. Ну а если уж дошёл до собеседований, там самое главное — оценить потенциального руководителя, а не компанию или проект. Но про это как-нибудь в другой раз.
👍8
Уроки с курсов для CEO.

Урок №2. Задачи гендира

Я раньше частенько слышал, что Илон Маск исключительный CEO, но вот почему он хорош, не знал. CEO-коуч красиво разложил нам основные задачи гендиров:

1. Привлечение ключевых клиентов.
2. Найм ключевых людей.
3. Привлечение капитала.

Если смотреть через призму таких задач, Илон с ними прекрасно справляется (по крайней мере на вид).

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

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

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

Так что читать мысли гендира (и заодно судьбу компании на год-два вперёд) не сильно сложно. Надо только глаза разуть на его задачи.

Урок последний. «Менеджерское» мышление
.
Чего я не ожидал, так это отношения CEO-препода к классическим миддл-менеджерам. Прямо так и говорил иногда, когда комментировал ответы студентов: «фу, менеджерское мышление, не надо быть таким». Не знаю, может, это C-level мем какой-то, но смысл я уловил.

Менеджерское мышление — это когда к тебе приходит человек и говорит: «что вы хотите, чтобы я сделал?». Неменеджерское мышление — это когда человек говорит: «по таким-то причинам нам нужно сделать X».

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

Короче, человеком с «менеджерским мышлением» быть сильно проще. Настолько проще, что его может попугай заменить. А человеком с «неменеджерским мышлением» быть сложнее, но с таким человеком можно хотя бы серьёзно поговорить и о чём-то договориться. В долгосрочной перспективе таким быть сильно лучше.
🔥6👍2
Portable Document Format

Раньше думал, что кнопку «Скачать в PDF» в разных системах делают для контрпрогрессивных людей.

Роботам читать PDF неудобно. Людям со смартфонами PDF читать тоже неудобно. Редактирование PDF — дело заморочное (можно потратить на это три года). Миленько, что формат не закладывает ограничений на размер страницы, но читалки ожидают страницы шириной до 381 километра. Цирк, что первая читалка PDF называлась Акробат, а её первая версия — Карусель. Со временем цирк уехал, а уязвимости остались.

А потом оказалось, что формат сделан очень добротно. Он открытый и имеет красивый номер ISO 32000. В него заложена совместимость не только назад, но и вперёд. Редкость в наше время. Читалкой 1993 года можно смотреть современные PDF, если там нет всякого странного вроде DRM. Современной читалкой можно читать ископаемые PDF 1993 года. При этом вёрстка не съедет. Короче, учитывая постоянные переделки UI систем, экспорт в PDF — идеальный вариант.

Тут нужно уточнить, что под зонтиком «PDF» живет целый список форматов. Например, есть вариант под называнием PDF/A, он заточен под архивы документов. MIT рекомендует студентам сохранять свои дипломы именно в PDF/A, чтобы потом сотни лет с ними было удобно работать.

Так что формат не просто хорошо сделан для своих узких задач, но и помогает нам бороться с цифровым тёмный веком. Кнопка «Скачать красивый PDF» хорошая.
🔥6😁5
​​Cделал, чтобы на карточках постов на https://neexee.com/ru/ отображалось время на прочтение. Всегда интересно было, как это время считается.

Оказалось, это время считается по-простому. Берётся количество слов в тексте и делится на среднюю скорость чтения (слов в минуту). Посчитать слова в тексте легко. А вот скорость чтения у разных людей на разных языках разная. Так что надо знать аудиторию и язык контента.

На русском скорость чтения 120-180 слов в минуту. На английском ~230, на китайском ~160. Так что китайское слово в среднем в 1.5 раза плотнее английского. Всё это очень примерное, поэтому когда-нибудь реализую оценку чтения времени постов по хаотичности движений пользователя мышью :)

Ещё заморочился, сделал, чтобы слово «минута» было в правильном падеже (1 минута, 3 минуты, 15 минут). Там правила можно считать нашенским ответом ихнему FizzBuzz.

В жизни бы не отцентрировал иконки книжки и календаря, если бы не CSS Debugger. Для Chrome выглядит вот так, у меня вариант получше встроен в браузер. Хорошо, что такие расширения для браузеров делают добрые люди.
🔥10
Вернёмся к теме про курсы, остался один пост про то, чему учат CTO. Учат много чему, но самое полезное — это про инженерные стратегии.

https://neexee.com/ru/posts/engineering-strategy
👍6
Тестовое задание с потенциалом пет-проекта

Писал вчера бота для Telegram. Гораздо более приятный опыт, чем боты для Jabber, которых мы с ребятами ради забавы писали 9 и 12 лет назад. Бот постарше (на C++) был хорош тем, что мог загружать плагины на любом языке программирования на лету. Бот помладше (на Java) был хорош тем, что работал без «Segmentation fault (core dumped)».

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

Разработчику можно дать задание написать бота. Через 2 часа у него даже приятный артефакт останется, а не бесполезный репозиторий-стыдоба на github.

Тестировщику можно подсунуть бота с багами и сомнительным дизайн-решением. Вполне реально проверить навыки тест-дизайна и автоматизации за пределами CRUD.

Аналитика можно попросить описать текущую функциональность бота и какое-нибудь улучшение. Вполне реально проверить, умеет ли человек писать, и понимает ли человек, что такое функция.

Простор для фантазии безграничен. Например, если вы занимаетесь картинками, пусть бот преобразует картинки. Если занимаетесь инфобезом, пусть бот шифрует файлы или объясняет JWT. Можно даже пойти кандидату навстречу и дать ему бота на ту тему, которая ему интересна. Почему нет? Все гениальные идеи проходят стадию крошечной искорки.

Кстати, недавно впервые встретился с меню ресторана, оформленным в виде бота в Telegram. Ссылка на бота была в QR-коде на столе. Сначала воспринял скептически, но когда посмотрел видео дымящегося борща с наиподробнейшей информацией по нему, успокоился. Ни одному бумажному меню такое и не снилось. Так что это к лучшему.
🔥5👍3💯31
Бывает, кнопка скрывает целую драму. Пока не реализуешь такую кнопку, драму не посмотришь.

https://neexee.com/ru/posts/telegram-instant-view/
🔥4👏3
test — основа слова latest.
😁4💯3🔥211🗿1
Люди не должны делать работу машин

Пока делал проект из поста выше, хардкодил все переменные и не парился. Например, захардкодил номер микрофона, с которого снимать звук. Захардкодил название модели, которую использовать для распознавания слов.

Скормил получившийся скрипт LLM и попросил вынести захардкоженные переменные в аргументы CLI. LLM красиво сгенерила парсер аргументов, и имена аргументам придумала, и дефолты подставила, и help написала. Потом прокинула эти аргументы до нужного места. В общем, спасла от смертельно скучной работы. Очень удобно.
🔥6👍2👎1👏1🤔1💯1