Я, кстати, потеплел к ChatGPT и начал пользоваться. Главное, что я понял — не задавать ей сложные вопросы, а задавать простые. «Сколько хранится открытый йогурт», «какие есть варианты поставить Стим на Маке», «как избавиться от трупа», «как работает VAT», «куда вставлять лицензию от библиотеки, код которой используешь», «как сконвертировать mp4 в gif».
Типа, что-то, по поводу чего нет каких-то особенных точек зрения, дискуссий, неоднозначностей, что давно, широко и одинаково используется и обсуждается, просто так получилось, что я — лично я — этого конкретного кусочка знаний не имею.
Действительно, в поисковике это заняло бы больше времени, пришлось бы почитать много плохого SEO-оптимизированного текста, причем текста, который не на мои вопросы отвечает, а вообще.
А так — получил свой ответ и пошел.
Что насчет кода? Ну код это пока сложный вопрос :) По крайней мере у меня. Но заглушки неплохо генерит.
UPD: А, еще она ошибки в тексте хорошо исправляет. Потому что языковая модель же
Типа, что-то, по поводу чего нет каких-то особенных точек зрения, дискуссий, неоднозначностей, что давно, широко и одинаково используется и обсуждается, просто так получилось, что я — лично я — этого конкретного кусочка знаний не имею.
Действительно, в поисковике это заняло бы больше времени, пришлось бы почитать много плохого SEO-оптимизированного текста, причем текста, который не на мои вопросы отвечает, а вообще.
А так — получил свой ответ и пошел.
Что насчет кода? Ну код это пока сложный вопрос :) По крайней мере у меня. Но заглушки неплохо генерит.
UPD: А, еще она ошибки в тексте хорошо исправляет. Потому что языковая модель же
Провел выходные за оптимизацией Java кода. Периодически слышу, как люди говорят «JVM может быть быстрой», и я в целом им верю, но какой ценой?
Например, смотрел доклад, и там чел говорит: ну вот, JVM любит когда ты код попроще пишешь, и не любит по-сложнее. Когда массивы-индексы-примитивные типы так вообще хорошо.
Проблема в том, что это не точные инструкции. Например, сходить в другой класс прочитать поле или даже вызвать несложный метод может быть бесплатно. А может и нет. Как узнать? Никак, пробовать. Вчера мой код начал работать в 10 раз медленее просто потому, что я какую-то переменную перенес из локальной в поле класса. В 10 раз! И только одну конкретную переменную. Пять других перенеслись прекрасно. ПОЧЕМУ?
И в итоге ты не работой занимаешься, а шаманством каким-то, перестановкой инструкций наугад. Я уважаю научный метод, гипотеза-эксперимент, вот это все, но это не он, это уже граничит с магией. Если честно, неудобно даже как-то называть себя инженером после такого.
Закончилось все тем, что я написал версию, которая работает за 50 микросекунд на ASCII файле, но если запустить ее на файле с не-ASCII символом, а потом снова на ASCII, то она начинает работать за 100 микросекунд. То есть еще раз, тот же вход, та же функция, просто начинает работать в два раза медленее если кто-то где-то однажды позвал ее на другом файле.
А потом выйдет новая версия и все опять начнет работать по-другому. Или не начнет. Потому что гарантий никаких нет, а внутри магия.
Например, смотрел доклад, и там чел говорит: ну вот, JVM любит когда ты код попроще пишешь, и не любит по-сложнее. Когда массивы-индексы-примитивные типы так вообще хорошо.
Проблема в том, что это не точные инструкции. Например, сходить в другой класс прочитать поле или даже вызвать несложный метод может быть бесплатно. А может и нет. Как узнать? Никак, пробовать. Вчера мой код начал работать в 10 раз медленее просто потому, что я какую-то переменную перенес из локальной в поле класса. В 10 раз! И только одну конкретную переменную. Пять других перенеслись прекрасно. ПОЧЕМУ?
И в итоге ты не работой занимаешься, а шаманством каким-то, перестановкой инструкций наугад. Я уважаю научный метод, гипотеза-эксперимент, вот это все, но это не он, это уже граничит с магией. Если честно, неудобно даже как-то называть себя инженером после такого.
Закончилось все тем, что я написал версию, которая работает за 50 микросекунд на ASCII файле, но если запустить ее на файле с не-ASCII символом, а потом снова на ASCII, то она начинает работать за 100 микросекунд. То есть еще раз, тот же вход, та же функция, просто начинает работать в два раза медленее если кто-то где-то однажды позвал ее на другом файле.
А потом выйдет новая версия и все опять начнет работать по-другому. Или не начнет. Потому что гарантий никаких нет, а внутри магия.
Самая смешная фигня на свете — инструкции, как подбирать «сочетающиеся» цвета на цветовом круге.
Обычно так: выберите точку, проведите прямую через центр, и на противоположном конце будет «противоположный» цвет, который гарантированно хорошо будет сочетаться с вашим. Дальше там начинаются варианты, типа, можно не два цвета выбрать, а три, тогда они должны по кругу на одинаковом уголовом расстоянии друг от друга находиться, и так далее. Можно четыре, пять, вы поняли.
А смешная она по многим причинам. Начнем с того, что цветовой круг — абсолютно рандомная штука, она никем не дизайнилась и ничему в реальности не соответствует. Спектр света линейный, поэтому чтобы его закольцевать к нему добавили мадженту — сумму красного и синего. Почему бы и нет? Далее, ваш круг скорее всего sRGB, то есть его пики — красный, синий, зеленый — просто соответствуют частотам соответствующих светодиодов, которые получилось придумать. Придумали бы другие светодиоды — пики были бы в другом месте, и вы составляли бы другие палитры. Наконец, sRGB довольно корявое цветовое пространство — яркость скачет, цвета складываются нелинейно, градиенты грязные.
Так что тут побеждает не здравый смысл и не глаза, а простота рецепта. Любой может провести отрезок через центр и получить два цвета. Получится хорошо или нет — уже не важно, важно, что это легко сделать.
Так рецепты и размножаются.
Обычно так: выберите точку, проведите прямую через центр, и на противоположном конце будет «противоположный» цвет, который гарантированно хорошо будет сочетаться с вашим. Дальше там начинаются варианты, типа, можно не два цвета выбрать, а три, тогда они должны по кругу на одинаковом уголовом расстоянии друг от друга находиться, и так далее. Можно четыре, пять, вы поняли.
А смешная она по многим причинам. Начнем с того, что цветовой круг — абсолютно рандомная штука, она никем не дизайнилась и ничему в реальности не соответствует. Спектр света линейный, поэтому чтобы его закольцевать к нему добавили мадженту — сумму красного и синего. Почему бы и нет? Далее, ваш круг скорее всего sRGB, то есть его пики — красный, синий, зеленый — просто соответствуют частотам соответствующих светодиодов, которые получилось придумать. Придумали бы другие светодиоды — пики были бы в другом месте, и вы составляли бы другие палитры. Наконец, sRGB довольно корявое цветовое пространство — яркость скачет, цвета складываются нелинейно, градиенты грязные.
Так что тут побеждает не здравый смысл и не глаза, а простота рецепта. Любой может провести отрезок через центр и получить два цвета. Получится хорошо или нет — уже не важно, важно, что это легко сделать.
Так рецепты и размножаются.
Главное правило интерфейсов: если у вас нарисована скрепка и я на нее нажму, должен открыться диалог выбора файла. Не меню какое-то, а выбор файла.
А то некоторые любят там пофантазировать: какие-то «недавние» файлы предлагать, или дробокс с гугл драйвом, или еще как-то, или вообще не файлы тоже туда засунуть. Слак так делает, Телеграм так делает, Whatsapp, FastMail, Notion. Не надо так!
Во-первых, я никогда не буду прикреплять файлы из какого-то стороннего сервиса, потому что я ими не пользуюсь.
Во-вторых, если бы и пользовался, вы все больные там, если думаете, что я буду полагаться на какую-то интеграцию. Наверняка там надо восемь кругов ада пройти чтобы условный Слак узнал про условный Гугл Драйв, наверняка за этим никто не следит (потому что фича бесполезная), наверняка оно работает кое-как. Нет уж, у меня есть руки, я сам могу файл откуда надо достать и куда надо положить, спасибо, не надо мне помогать.
В итоге скрепка с меню — это еще один бесполезный шаг, который мешает нормальным людям прикрепить файл. Не надо так.
А то некоторые любят там пофантазировать: какие-то «недавние» файлы предлагать, или дробокс с гугл драйвом, или еще как-то, или вообще не файлы тоже туда засунуть. Слак так делает, Телеграм так делает, Whatsapp, FastMail, Notion. Не надо так!
Во-первых, я никогда не буду прикреплять файлы из какого-то стороннего сервиса, потому что я ими не пользуюсь.
Во-вторых, если бы и пользовался, вы все больные там, если думаете, что я буду полагаться на какую-то интеграцию. Наверняка там надо восемь кругов ада пройти чтобы условный Слак узнал про условный Гугл Драйв, наверняка за этим никто не следит (потому что фича бесполезная), наверняка оно работает кое-как. Нет уж, у меня есть руки, я сам могу файл откуда надо достать и куда надо положить, спасибо, не надо мне помогать.
В итоге скрепка с меню — это еще один бесполезный шаг, который мешает нормальным людям прикрепить файл. Не надо так.
Я уже писал, что главный принцип хорошего кода — названия переменных из одного слова. И вот вчера тырил код (опен-сорсный, релакс) и там у чела синдром второго слова во все щели, просто невозможно. И, главное, все без проблем переименовывается и читается в сто раз лучше:
Не надо так.
curChar - ch
bufChar - ch
idata - i или data
startpos - start или pos
cbBuffer - cb или buffer
nElems - n или len или cnt
retval - ret или res
strdata - str, блин!
keyVal - key
valVal - val
mapObj - map или m
aryObj - res или acc (ну там по смыслу)
objReader - reader
Не надо так.
«Код должен читаться как книга». Ну что за бред. Конечно же нет.
Книга — это LinkedList. Единственный способ ее потребления — слово за слово, по порядку.
Код — это HashMap. Он читается с произвольного места, у него нет линейного развития, начала и конца.
Даже просто внешний вид кода — по одному выражению на строку, огромные меняющиеся отступы, несогласованные предложения, сильно расширенная пунктуация — должен намекнуть, что это совсем не книга. Единственное, что есть общего у книги и кода — буквы.
Этот пост напоминает вам об опасности аналогий. Плохая аналогия отдалит вас от правды, а не приблизит. Прямо как котенок с пуговицей.
Книга — это LinkedList. Единственный способ ее потребления — слово за слово, по порядку.
Код — это HashMap. Он читается с произвольного места, у него нет линейного развития, начала и конца.
Даже просто внешний вид кода — по одному выражению на строку, огромные меняющиеся отступы, несогласованные предложения, сильно расширенная пунктуация — должен намекнуть, что это совсем не книга. Единственное, что есть общего у книги и кода — буквы.
Этот пост напоминает вам об опасности аналогий. Плохая аналогия отдалит вас от правды, а не приблизит. Прямо как котенок с пуговицей.
Мало кто думает про долгосрочные психологические эффекты программ, а они есть.
Простой — надежность. AirDrop классный, когда он работает, но невозможный, когда нет. На его фоне Телеграм кажется истинным чудом — ни разу еще такого не было, чтобы ты положил файл на одном устройстве и он не появился через пару секунд на другом. Это ощущение надежности не купишь никакими интерфейсами, шрифтами, кнопками или анимациями. Что толку в Аирдропе, если в конечном итоге я не получу файл? Команде Телеграма удалось сделать лучший файлообменник, настолько хороший, что им можно пользоваться даже несмотря на другие ненужные функции вроде чатов. А нужна-то была — всего-навсего — надежность.
Со звонками наоборот: на телефоне Телеграм работает кое-как, а Вотсапп гораздо лучше. А вот на компе найти программу для созвонов, на которой вот чтобы совсем не было ебли, у меня пока не получилось. Причем тут речь не о 90% успеха, а именно о 99,999%. Чтобы пропал страх, нужно прям долгое и стабильное закрепление.
Или наушники — с блютусными ты знаешь, что в 10% случаев будет какая-то боль, у тебя прям в голове этот психологический барьер, когда их надеваешь — ух, щас или все хорошо будет, или я знатно поебусь. А с проводными или вайфайными такой проблемы просто нет, нет этого барьера.
Другой долгосрочный эффект — стабильность. Как мы уже говорили, современные компании не хотят делать продукт, они хотят делать новости. Поэтому интерфейс постоянно меняется, кнопки переезжают, привыкать ни к чему нельзя. В итоге ты не привыкаешь пользоваться продуктами, ты привыкаешь сканировать интерфейс каждый раз и ориентироваться на лету, потому что наверняка что-то опять перепридумали, перерисовали, переставили.
Операционные системы больше не выполняют роль стандартов в построении интерфейса, потому что сами меняются раз в два года. В двухтысячных все воротили нос от интерфейсов на Флеше, потому что они были кастомными и нестандартными, надо было разбираться. Так вот, сегодня ВЕСЬ компьютер это набор интерфейсов на Флеше. И не только веб, нативные приложения тоже.
Результат? «Учиться» пользоваться компьютером потеряло смысл. А не могу показать маме, где кнопка «выбрать аудиоустройство», потому что она сегодня тут, а завтра — там, и выглядит по-другому. В компьютере сегодня нужно учиться ориентироваться на незнакомой местности.
Простой — надежность. AirDrop классный, когда он работает, но невозможный, когда нет. На его фоне Телеграм кажется истинным чудом — ни разу еще такого не было, чтобы ты положил файл на одном устройстве и он не появился через пару секунд на другом. Это ощущение надежности не купишь никакими интерфейсами, шрифтами, кнопками или анимациями. Что толку в Аирдропе, если в конечном итоге я не получу файл? Команде Телеграма удалось сделать лучший файлообменник, настолько хороший, что им можно пользоваться даже несмотря на другие ненужные функции вроде чатов. А нужна-то была — всего-навсего — надежность.
Со звонками наоборот: на телефоне Телеграм работает кое-как, а Вотсапп гораздо лучше. А вот на компе найти программу для созвонов, на которой вот чтобы совсем не было ебли, у меня пока не получилось. Причем тут речь не о 90% успеха, а именно о 99,999%. Чтобы пропал страх, нужно прям долгое и стабильное закрепление.
Или наушники — с блютусными ты знаешь, что в 10% случаев будет какая-то боль, у тебя прям в голове этот психологический барьер, когда их надеваешь — ух, щас или все хорошо будет, или я знатно поебусь. А с проводными или вайфайными такой проблемы просто нет, нет этого барьера.
Другой долгосрочный эффект — стабильность. Как мы уже говорили, современные компании не хотят делать продукт, они хотят делать новости. Поэтому интерфейс постоянно меняется, кнопки переезжают, привыкать ни к чему нельзя. В итоге ты не привыкаешь пользоваться продуктами, ты привыкаешь сканировать интерфейс каждый раз и ориентироваться на лету, потому что наверняка что-то опять перепридумали, перерисовали, переставили.
Операционные системы больше не выполняют роль стандартов в построении интерфейса, потому что сами меняются раз в два года. В двухтысячных все воротили нос от интерфейсов на Флеше, потому что они были кастомными и нестандартными, надо было разбираться. Так вот, сегодня ВЕСЬ компьютер это набор интерфейсов на Флеше. И не только веб, нативные приложения тоже.
Результат? «Учиться» пользоваться компьютером потеряло смысл. А не могу показать маме, где кнопка «выбрать аудиоустройство», потому что она сегодня тут, а завтра — там, и выглядит по-другому. В компьютере сегодня нужно учиться ориентироваться на незнакомой местности.
На кейсе от аирподсов есть лампочка, которая иногда горит зеленым, а иногда — оранжевым. И вот после трех лет использования я сдался и загуглил, что же она показывает.
Ожидание: лампочка горит оранжевым, когда кейс пора заряжать. Ну, типа, как на ЛЮБОМ другом устройстве.
Реальность: лампочка горит оранжевым, если она заряжает наушники. То есть, по сути, всегда: если я складываю в кейс наушник, значит я им только что пользовался, а значит он чуть-чуть, но разряжен.
С другой стороны, может я какое-то время носил кейс и решил достать наушник. Но в этом случае мне глубоко пофиг, насколько он там зарядился: если я решил достать наушник, значит я его достану. Вывод: в лампочке смысла нет в обоих случаях.
Как же тогда узнать, когда пора заряжать кейс? Очень просто, следите за руками:
Включаем телефон
Разблокируем телефон
Выходим в хоум скрин
Подносим кейс к телефону
Открываем кейс
Трогаем экран, чтобы телефон не успел заблокироваться
Ждем
Ждем
Открываем-закрываем кейс пару раз НА ВСЯКИЙ СЛУЧАЙ
Перемещаем его в пространстве вокруг телефона, трем об спинку, постукиваем, пытаемся приложить к чему-то чувствительному внтури
Сомневаемся в собственной адекватности
Ставим под сомнения каждый жизненный выбор, приведший нас к этой ситуации
О, окно с уровнем зарядки появилось!
Но это только если кейс не сдох совсем в ноль, тогда секунд через 30 ты догадаешься это проверить по лампочке (она не будет включаться совсем)
Никита, но есть же виджеты, показывающие уровень заряда? Есть. Но они показывают заряд в произвольный момент времени в прошлом И НИКАК ОБ ЭТОМ НЕ УВЕДОМЛЯЮТ. То есть 37% на виджете легко может означатт «в среду в семь утра на прошлой неделе уровень заряда был 37%». И никак об этом узнать нельзя.
И все это ради того, чтобы не делать нормально одну гребаную лампочку.
Честное слово, как Ватсон не мог без трубки, так и пользователи Эпла не могут ПРОСТО взять и чем-то пользоваться. Эпловоды должны страдать.
Ожидание: лампочка горит оранжевым, когда кейс пора заряжать. Ну, типа, как на ЛЮБОМ другом устройстве.
Реальность: лампочка горит оранжевым, если она заряжает наушники. То есть, по сути, всегда: если я складываю в кейс наушник, значит я им только что пользовался, а значит он чуть-чуть, но разряжен.
С другой стороны, может я какое-то время носил кейс и решил достать наушник. Но в этом случае мне глубоко пофиг, насколько он там зарядился: если я решил достать наушник, значит я его достану. Вывод: в лампочке смысла нет в обоих случаях.
Как же тогда узнать, когда пора заряжать кейс? Очень просто, следите за руками:
Включаем телефон
Разблокируем телефон
Выходим в хоум скрин
Подносим кейс к телефону
Открываем кейс
Трогаем экран, чтобы телефон не успел заблокироваться
Ждем
Ждем
Открываем-закрываем кейс пару раз НА ВСЯКИЙ СЛУЧАЙ
Перемещаем его в пространстве вокруг телефона, трем об спинку, постукиваем, пытаемся приложить к чему-то чувствительному внтури
Сомневаемся в собственной адекватности
Ставим под сомнения каждый жизненный выбор, приведший нас к этой ситуации
О, окно с уровнем зарядки появилось!
Но это только если кейс не сдох совсем в ноль, тогда секунд через 30 ты догадаешься это проверить по лампочке (она не будет включаться совсем)
Никита, но есть же виджеты, показывающие уровень заряда? Есть. Но они показывают заряд в произвольный момент времени в прошлом И НИКАК ОБ ЭТОМ НЕ УВЕДОМЛЯЮТ. То есть 37% на виджете легко может означатт «в среду в семь утра на прошлой неделе уровень заряда был 37%». И никак об этом узнать нельзя.
И все это ради того, чтобы не делать нормально одну гребаную лампочку.
Честное слово, как Ватсон не мог без трубки, так и пользователи Эпла не могут ПРОСТО взять и чем-то пользоваться. Эпловоды должны страдать.
И вдогонку: коллективным разумом выяснили, что лампочка показывает уровень заряда кейса, если вытащить наушники, и «заряжаются ли наушники», если они в нем. ОДНА И ТА ЖЕ ЛАМПОЧКА. ОДНИМ И ТЕМ ЖЕ ЦВЕТОМ. ДВЕ ПРИНЦИПИАЛЬНО РАЗНЫЕ ВЕЩИ. К вопросу о модальности и как она легко может запутать даже взрослых умных людей.
Очень жаль, что Эплы решили не делать свою машину. Представляю, как у них внутри была бы лампочка, которая показывает уровень заряда батареи, если водительская дверь открыта, и «включены ли фары», если закрыта. Столько возможностей, ух
Очень жаль, что Эплы решили не делать свою машину. Представляю, как у них внутри была бы лампочка, которая показывает уровень заряда батареи, если водительская дверь открыта, и «включены ли фары», если закрыта. Столько возможностей, ух
В любом нормальном языке можно работать с путями до файлов. Только иногда пути это просто строки (String), а иногда — специальные классы (File, Path и т.д.).
Так вот, сколько я на это смотрю, так и не понял преимуществ оборачивать пути в классы. Над строками работают все обычные операции со строками — склеить, поделить, интерполировать, сериализовать. А на «путях» — нет. Существование таких классов как правило только возни добавляет. Преимущество делать
Может вы знаете? Объясните?
UPD: поменял File на Path чтобы было понятнее
Так вот, сколько я на это смотрю, так и не понял преимуществ оборачивать пути в классы. Над строками работают все обычные операции со строками — склеить, поделить, интерполировать, сериализовать. А на «путях» — нет. Существование таких классов как правило только возни добавляет. Преимущество делать
new
Path(path
Str).exists()
вместо Path.exists(path
Str)
довольно сомнительное.Может вы знаете? Объясните?
UPD: поменял File на Path чтобы было понятнее
Знакомлюсь потихоньку с фронтендом, узнал, что у нас используется библиотека Turbo. Как я это узнал? А очень просто. На запуске она печатает здоровый такой баннер, что у нее вышла новая версия и пора бы обновиться.
Офигеть, да? Какая-то сраная библиотечка считает себя насколько пупом земли, что позволяет себе а) занять десяток строчек в логе, б) сходить в интернет и проверить версию, хотя ее об этом никто не просил, и в) присесть мне на уши по поводу обновления, как будто у меня других дел нет.
Отдельно бесит, что вообще говоря в использовании более старых библиотек никаких проблем нет: меня все устраивает, все нужные функции есть и работают как мне надо, нафига мне обновляться? Чтобы что? Просто чтобы еще работы на пустом месте создать и еще чуть больше устать? Спасибо, услужили.
Серьезно, вот что происходит, если у разработчиков слишком много денег и свободного времени: все функции уже реализовали, на Раст переписали, что дальше делать? Приходится какую-то ерунду выдумывать, «улучшать» стандартный воркфлоу не там, где нужно, а там, где проще, и отвлекать пользователя. Понятно, что это работает на саморекламу — у нас, может, еще десяток других библиотек, про которые я так и не узнал, а эта хоть и бесяче, но заняла место в моей голове — но как же я от этого устал. Не надо, пожалуйста, из каждой библиотеки делать источник новостей.
С ужасом жду момента, когда другие переймут эту практику и на старте в логе будет пяток-другой баннеров, в идеале с мигающими буквами, бегущей строкой и анимированной псевдографикой, которые будут просить обновиться, занести денег бездомным котятам, переименовать master в main и стать веганом. Даже библиотека для этого будет, shame.js. Как будто к этому все и идет.
Офигеть, да? Какая-то сраная библиотечка считает себя насколько пупом земли, что позволяет себе а) занять десяток строчек в логе, б) сходить в интернет и проверить версию, хотя ее об этом никто не просил, и в) присесть мне на уши по поводу обновления, как будто у меня других дел нет.
Отдельно бесит, что вообще говоря в использовании более старых библиотек никаких проблем нет: меня все устраивает, все нужные функции есть и работают как мне надо, нафига мне обновляться? Чтобы что? Просто чтобы еще работы на пустом месте создать и еще чуть больше устать? Спасибо, услужили.
Серьезно, вот что происходит, если у разработчиков слишком много денег и свободного времени: все функции уже реализовали, на Раст переписали, что дальше делать? Приходится какую-то ерунду выдумывать, «улучшать» стандартный воркфлоу не там, где нужно, а там, где проще, и отвлекать пользователя. Понятно, что это работает на саморекламу — у нас, может, еще десяток других библиотек, про которые я так и не узнал, а эта хоть и бесяче, но заняла место в моей голове — но как же я от этого устал. Не надо, пожалуйста, из каждой библиотеки делать источник новостей.
С ужасом жду момента, когда другие переймут эту практику и на старте в логе будет пяток-другой баннеров, в идеале с мигающими буквами, бегущей строкой и анимированной псевдографикой, которые будут просить обновиться, занести денег бездомным котятам, переименовать master в main и стать веганом. Даже библиотека для этого будет, shame.js. Как будто к этому все и идет.
Понял кое-что про цветовые схемы.
Смотрите. Если у вас классическая светлая тема, то цвета текста надо брать темные — темно-синий, темно-зеленый, темно-сиреневый. Ну потому что фон светлый.
А темные цвета что? Правильно, некрасивые. Например, в дефолтной Light у JetBrains весьма неприятные синий, темно-сиреневый, темно-бирюзовый (буэ) и даже темно-желтый кое-где есть. Я какое-то время думал, что они просто плохо их подобрали, но вчера осознал, что это принципиальное ограничение, которые вытекает из необходимости контраста.
А вот если у вас темная тема, то и использовать вы можете самые классные цвета, свежие, яркие, насыщенные. Просто потому что _все_ цвета лучше выглядят в светлом варианте.
Так мы научно обосновали преимущество темных тем перед светлыми.
Также я понял, что когда-то подсознательно выкрутился из этой патовой ситуации, сам того не осозновая. В моем Alabaster используется «подсветка фоном». Т.е. текст всегда остается черным, а если надо выделить, например, строки, то выделяется фон вокруг них. И вот при выделении фоном контраст как раз не нужен, и можно опять же использовать чистые светлые зеленый-желтый-голубой-сиреневый _в светлой теме_. И кайфовать.
Ну и вдогонку, чтобы два раза не писать. Когда начал разбираться с цветом, наверняка, как и многим другим, мне пришла в голову «гениальная» идея сделать идеально сбалансированную цветовую схему. Типа, взять OkLCH, зафиксировать яркость и насыщенность и сгенерировать пять-восемь цветов равномерно распределенных по цветовому кругу. Ну и получится идеально сбалансированная, математически точная цветовая схема.
И знаете что получилось? Что цвета хрен отличишь друг от друга. Потому что натурально, яркость одинаковая, насыщенность одинаковая, а к оттенку наш глаз сильно менее чувствителен. Смысл выделения не в том, чтобы все выглядело одинаково, а в том, чтобы все выглядело по-разному, _выделялось_.
Но попробовать все равно стоило. Хотя бы ради инсайта.
Смотрите. Если у вас классическая светлая тема, то цвета текста надо брать темные — темно-синий, темно-зеленый, темно-сиреневый. Ну потому что фон светлый.
А темные цвета что? Правильно, некрасивые. Например, в дефолтной Light у JetBrains весьма неприятные синий, темно-сиреневый, темно-бирюзовый (буэ) и даже темно-желтый кое-где есть. Я какое-то время думал, что они просто плохо их подобрали, но вчера осознал, что это принципиальное ограничение, которые вытекает из необходимости контраста.
А вот если у вас темная тема, то и использовать вы можете самые классные цвета, свежие, яркие, насыщенные. Просто потому что _все_ цвета лучше выглядят в светлом варианте.
Так мы научно обосновали преимущество темных тем перед светлыми.
Также я понял, что когда-то подсознательно выкрутился из этой патовой ситуации, сам того не осозновая. В моем Alabaster используется «подсветка фоном». Т.е. текст всегда остается черным, а если надо выделить, например, строки, то выделяется фон вокруг них. И вот при выделении фоном контраст как раз не нужен, и можно опять же использовать чистые светлые зеленый-желтый-голубой-сиреневый _в светлой теме_. И кайфовать.
Ну и вдогонку, чтобы два раза не писать. Когда начал разбираться с цветом, наверняка, как и многим другим, мне пришла в голову «гениальная» идея сделать идеально сбалансированную цветовую схему. Типа, взять OkLCH, зафиксировать яркость и насыщенность и сгенерировать пять-восемь цветов равномерно распределенных по цветовому кругу. Ну и получится идеально сбалансированная, математически точная цветовая схема.
И знаете что получилось? Что цвета хрен отличишь друг от друга. Потому что натурально, яркость одинаковая, насыщенность одинаковая, а к оттенку наш глаз сильно менее чувствителен. Смысл выделения не в том, чтобы все выглядело одинаково, а в том, чтобы все выглядело по-разному, _выделялось_.
Но попробовать все равно стоило. Хотя бы ради инсайта.
Сформулировал наконец, что значат цифры в SemVer, или «семантическом» версионировании.
Итак, допустим, у вашего продукта версия A.B.C.
Тут A — это рекламная версия. Когда вам нужно создать инфоповод и напомнить миру, что вы существуете. Менять что-то необязательно, но можно редизайнчик ебануть, например.
B — это дефолтная версия. Когда ни туда, ни сюда, просто посидели, что-то поделали.
C — это позорная версия. Она бампится, когда вам не хочется привлекать внимания к косякам, которые вы сами же и создали.
Сохраните, чтобы не забыть.
Итак, допустим, у вашего продукта версия A.B.C.
Тут A — это рекламная версия. Когда вам нужно создать инфоповод и напомнить миру, что вы существуете. Менять что-то необязательно, но можно редизайнчик ебануть, например.
B — это дефолтная версия. Когда ни туда, ни сюда, просто посидели, что-то поделали.
C — это позорная версия. Она бампится, когда вам не хочется привлекать внимания к косякам, которые вы сами же и создали.
Сохраните, чтобы не забыть.
Я уже рассказывал, как с удивлением обнаружил, какие игры мне нравятся, и это не обязательно те, которые я бы хотел, чтобы мне нравились. Например, я даже PS5 решил продать, потому что понял, что ну не заходят мне игры-морские свинки — это когда игра и не кино, и не игра (то есть без геймплея).
Сегодня порекомендую вам такой странный тайтл как Islands of Insight. Там все неправильно — начиная с того, что это «квест-паззл», работающий как ММО. То есть это огромный мир-хаб, и пока ты решаешь загадки, вокруг тебя бегают другие игроки (сейчас, кажется, сервера отрубили и остался только оффлайн).
У тебя есть персонаж, которого надо прокачивать (опять таки, в паззле!)
В добавок к этому он некрасивый. Точнее, графика-то там ого-го (Пазл! Требовательный к видеокарте!), он скорее неизящный какой-то, безвкусный.
Многие пазлы в нем оскорбительны своей примитивностью (найди скрыты объекты! пробеги трассу на скорость! запомни расположение квадратиков! сопоставь фотку с пейзажем!) и явно являются филлерами.
И все же, и все же. Все это можно (и нужно) перетерпеть ради, собственно, пазлов. Вот те, которые с черно-белой доской, вот они главное блюдо и жемчужина, единственное, что сделано безоговорочно хорошо и, собственно, делает игру имеющей смысл.
В них вам дают доску, которую нужно заполнить черными и белыми квадратами. Правила меняются (например, все черные регионы должны иметь площадь 2. Или все белые должны быть соединены. Или возле вот этих квадратов должно быть 4-5-6 квадратов того же цвета), но формат остается. Казалось бы, ну сколько можно в таких ограниченных условиях придумать пазлов? Оказывается, тысячи! И они интересные, прям их решение это отдельный кайф: есть по-проще, есть по-сложнее, есть, где надо догадаться до какого-то принципа, и к концу игры ты с парой десятков этих принципов, которые постепенно открывал, решаешь уже мега-доски.
Короче, звучит наверное непонятно или скучно, но на деле затягивает как наркотик. Похоже на судоку или hexacells — большая проблема, и ты сидишь и пытаешься логически понять, в заданных условиях, что-то однозначно верное про доску. Обычно это всего один или два возможных «следующих шага» в рассуждении, и именно их надо найти. И так, шаг за шагом, ход за ходом продвигаешься по чуть-чуть, пока все не решишь.
В общем, странный зверь. Наверное, на это был бы похож The Witness, если бы Джонатан Блоу в какой-то момент не сказал себе «Пазлы самоценны, не надо как-то дополнительно развлекать или мотивировать игрока» и продолжил добавлять контент любой ценой. Но — еще раз — пазлы с досками 100% legit, я фанат и готов ради них терпеть все остальное. Другие пазлы или треш, или ну такое (там есть несколько других видов логических пазлов, но они мне не зашли).
Я даже думал натырить пазлы оттуда и выложить куда-нить в интернет, потому что UI там реально максимально базовый. Пока рекомендую как есть — вдруг вам тоже надо именно такое.
Ну и да, хочу еще, где бы взять.
Сегодня порекомендую вам такой странный тайтл как Islands of Insight. Там все неправильно — начиная с того, что это «квест-паззл», работающий как ММО. То есть это огромный мир-хаб, и пока ты решаешь загадки, вокруг тебя бегают другие игроки (сейчас, кажется, сервера отрубили и остался только оффлайн).
У тебя есть персонаж, которого надо прокачивать (опять таки, в паззле!)
В добавок к этому он некрасивый. Точнее, графика-то там ого-го (Пазл! Требовательный к видеокарте!), он скорее неизящный какой-то, безвкусный.
Многие пазлы в нем оскорбительны своей примитивностью (найди скрыты объекты! пробеги трассу на скорость! запомни расположение квадратиков! сопоставь фотку с пейзажем!) и явно являются филлерами.
И все же, и все же. Все это можно (и нужно) перетерпеть ради, собственно, пазлов. Вот те, которые с черно-белой доской, вот они главное блюдо и жемчужина, единственное, что сделано безоговорочно хорошо и, собственно, делает игру имеющей смысл.
В них вам дают доску, которую нужно заполнить черными и белыми квадратами. Правила меняются (например, все черные регионы должны иметь площадь 2. Или все белые должны быть соединены. Или возле вот этих квадратов должно быть 4-5-6 квадратов того же цвета), но формат остается. Казалось бы, ну сколько можно в таких ограниченных условиях придумать пазлов? Оказывается, тысячи! И они интересные, прям их решение это отдельный кайф: есть по-проще, есть по-сложнее, есть, где надо догадаться до какого-то принципа, и к концу игры ты с парой десятков этих принципов, которые постепенно открывал, решаешь уже мега-доски.
Короче, звучит наверное непонятно или скучно, но на деле затягивает как наркотик. Похоже на судоку или hexacells — большая проблема, и ты сидишь и пытаешься логически понять, в заданных условиях, что-то однозначно верное про доску. Обычно это всего один или два возможных «следующих шага» в рассуждении, и именно их надо найти. И так, шаг за шагом, ход за ходом продвигаешься по чуть-чуть, пока все не решишь.
В общем, странный зверь. Наверное, на это был бы похож The Witness, если бы Джонатан Блоу в какой-то момент не сказал себе «Пазлы самоценны, не надо как-то дополнительно развлекать или мотивировать игрока» и продолжил добавлять контент любой ценой. Но — еще раз — пазлы с досками 100% legit, я фанат и готов ради них терпеть все остальное. Другие пазлы или треш, или ну такое (там есть несколько других видов логических пазлов, но они мне не зашли).
Я даже думал натырить пазлы оттуда и выложить куда-нить в интернет, потому что UI там реально максимально базовый. Пока рекомендую как есть — вдруг вам тоже надо именно такое.
Ну и да, хочу еще, где бы взять.
Пишут, что в Whatsapp сейчас работает 150 только дизайнеров (есть какая-то известная статья про то, что во всем Вотсаппе 20-50 инженеров и только, но она старая, сейчас вроде 1600 человек и из них 150 дизайнеров, не перепутайте).
Тема, конечно, изъезженная, но мне все еще любопытно, как выглядит средний день среднего дизайнера. Над чем он работает (учитывая, что дизайн Вотсаппа не менялся уже лет десять, они за это время ну может пяток иконок добавили), куда потом эта работа идет, как он себя по этому поводу чувствует.
И нет, я не хочу, чтобы они делали редизайн каждый год. Очевидно это было бы хуже. Но вот они не делают, а дизайнеров все равно 150. Чем они заняты?
Тема, конечно, изъезженная, но мне все еще любопытно, как выглядит средний день среднего дизайнера. Над чем он работает (учитывая, что дизайн Вотсаппа не менялся уже лет десять, они за это время ну может пяток иконок добавили), куда потом эта работа идет, как он себя по этому поводу чувствует.
И нет, я не хочу, чтобы они делали редизайн каждый год. Очевидно это было бы хуже. Но вот они не делают, а дизайнеров все равно 150. Чем они заняты?
Запускал тут на днях Идею, а она мне пишет рядом с каждым полем количество его использований. Прям английским по белому:
Вопрос: а зачем?
У меня, конечно, есть версия. Моя версия — потому что может.
В какой-то момент разработка ИДЕ уперлась в стену — вроде бы все что смогли придумать сделали, все сравнялись по фичам, а продавать продукт как-то надо. То есть надо пользователя как-то убедить, что а) ему нужны фичи, и б) у нас их больше чем у других. Делать что-то, неважно что, лишь бы у других этого не было. И началась гонка фичей. В этой гонке никто не задавался вопросом «а надо ли». Больше — значит лучше. Тогда же возникла мантра «не нужно? не пользуйся, тебя же не заставляют».
Но в новом году я хочу практиковать открытый майндсет. Вдруг я не самый умный, не самый правый, не самый догадливый? Вдруг я чего-то не знаю? Вдруг я в чем-то не прав?
Шансы, конечно, невелики, но я готов это признать при наличии убедительных доказательств.
Давайте попробуем. Объясните мне, какая польза от этих аннотаций.
public char[] readBuf; 22 usages
public char[] accumulator; 14 usages
public int accumulatorLength; 20 usages
Вопрос: а зачем?
У меня, конечно, есть версия. Моя версия — потому что может.
В какой-то момент разработка ИДЕ уперлась в стену — вроде бы все что смогли придумать сделали, все сравнялись по фичам, а продавать продукт как-то надо. То есть надо пользователя как-то убедить, что а) ему нужны фичи, и б) у нас их больше чем у других. Делать что-то, неважно что, лишь бы у других этого не было. И началась гонка фичей. В этой гонке никто не задавался вопросом «а надо ли». Больше — значит лучше. Тогда же возникла мантра «не нужно? не пользуйся, тебя же не заставляют».
Но в новом году я хочу практиковать открытый майндсет. Вдруг я не самый умный, не самый правый, не самый догадливый? Вдруг я чего-то не знаю? Вдруг я в чем-то не прав?
Шансы, конечно, невелики, но я готов это признать при наличии убедительных доказательств.
Давайте попробуем. Объясните мне, какая польза от этих аннотаций.
«Программистам не нужны шорткаты. Средний программист коммитит 40 строк в неделю, большинству еще оооочень далеко до точки, в которой шорткаты начнут хоть как-то помогать»
К мему с семвером пришли люди и начали предлагать CalVer — это когда версия это Год.Месяц.День или типа того.
Но это самая бестолковая схема эва!
Во-первых, она предполагает, что новое всегда лучше старого. Типа, Вася написал библиотеку в 2025-м, а Петя в 2024-м. Оба потратили на них по три часа. Но у Васи версия больше! Почему? А нипочему.
Во-вторых, кажется, что со старым софтом что-то не так. 1.0 звучит солидно когда угодно, а 2020 звучит как-то не очень, типа, фу, 4 года назад. Хотя программы так-то не стареют. Алгорит, написанный четыре года назад, будет так же хорошо работать, как и написанный сегодня.
(а учитывая, что компьютеры становятся быстрее, в прошлом ограничения были более строгие, следовательно, шанс, что старые программы будут работать быстрее, тоже выше)
В-третьих, она никак не отражает, собственно, масштаб изменений. Скажем, Вася написал библиотеку в 2020-м, а потом поправил один минорный юз-кейс в 2025-м. Итого мажорная версия скакнула аж на пять единиц! Любому, кто будет принимать решение об обновлении, может показаться что это что-то прям важное.
В-четвертых, ложное чувство безопасности. Скажем, ты поставил версию 2025.01.01. Новогоднюю. Всего пять дней прошло, думаешь ты. Обновляться явно еще рано. А на самом деле после 2025.01.01 в тот же день вышла 2025.01.01-001 (куда, кстати, девать номера вышедших в один день?) с фиксом критической уязвимости. Но версия этого никак не отражает.
Короче, версионирование на гордости/стыде мне хотя бы понятно. Семантическое тоже, хотя в реальности следовать ему трудно. Версионирование по дате я не понимаю от слова совсем.
С тем же успехом возьмите просто одно число и увеличивайте его на 1 с каждым коммитом. Это хотя бы избавит от иллюзий, связанных с недавностью.
Хуже только когда после 3.9 решают бампнуть до 4.0 просто для красоты.
Но это самая бестолковая схема эва!
Во-первых, она предполагает, что новое всегда лучше старого. Типа, Вася написал библиотеку в 2025-м, а Петя в 2024-м. Оба потратили на них по три часа. Но у Васи версия больше! Почему? А нипочему.
Во-вторых, кажется, что со старым софтом что-то не так. 1.0 звучит солидно когда угодно, а 2020 звучит как-то не очень, типа, фу, 4 года назад. Хотя программы так-то не стареют. Алгорит, написанный четыре года назад, будет так же хорошо работать, как и написанный сегодня.
(а учитывая, что компьютеры становятся быстрее, в прошлом ограничения были более строгие, следовательно, шанс, что старые программы будут работать быстрее, тоже выше)
В-третьих, она никак не отражает, собственно, масштаб изменений. Скажем, Вася написал библиотеку в 2020-м, а потом поправил один минорный юз-кейс в 2025-м. Итого мажорная версия скакнула аж на пять единиц! Любому, кто будет принимать решение об обновлении, может показаться что это что-то прям важное.
В-четвертых, ложное чувство безопасности. Скажем, ты поставил версию 2025.01.01. Новогоднюю. Всего пять дней прошло, думаешь ты. Обновляться явно еще рано. А на самом деле после 2025.01.01 в тот же день вышла 2025.01.01-001 (куда, кстати, девать номера вышедших в один день?) с фиксом критической уязвимости. Но версия этого никак не отражает.
Короче, версионирование на гордости/стыде мне хотя бы понятно. Семантическое тоже, хотя в реальности следовать ему трудно. Версионирование по дате я не понимаю от слова совсем.
С тем же успехом возьмите просто одно число и увеличивайте его на 1 с каждым коммитом. Это хотя бы избавит от иллюзий, связанных с недавностью.
Хуже только когда после 3.9 решают бампнуть до 4.0 просто для красоты.