Пользуюсь таблицами Google с 2011 для учёта любых денежных операций. Имеют ровно те же преимущества. Расходы, доходы, долги, даже подсветка по условию, также сводные таблицы по итогам года или нескольких месяцев, формулы для автоматического расчёта чего угодно, комментарии по необходимости. Писал статью сюда однажды с шаблоном.
Если можно не писать код и получить такой же результат, не надо писать код. Хотя для общего развития полезно.
Я для сохранения зрения, чтобы не заработать близорукость, практиковал чтение электронной книги мелким шрифтом на вытянутой руке, чтобы был контраст в работе глаз. Ещё всегда стараюсь не приближаться к экрану ближе вытянутой руки. Поэтому всегда использую беспроводную клавиатуру и мышь, чтобы быть подальше от ноута. Никогда не сижу с ним в постели и только в исключительных ситуациях (отсутствие электричества) беру его в кафе. Всегда использую тёмные темы. При этом слежу за тем, чтобы в помещении всегда было светло. Даже если надо что-то почитать в телефоне в темноте, я хотя бы включаю у него фонарик, чтобы не сильно напряжно было.
25 лет за компом. Есть лишь незначительное ухудшение, никак не мешающее жить. И то думаю, что из-за экрана телефона.
Наслаждаюсь всеми играми серии, начиная с Zeus. Сейчас заканчиваю Pharaoh: A New Era (осталось где-то 4 миссии). Там бесит необходимость бесконечного поклонения богам, иначе они очень неприятно обижаются, и то, что иногда просто невозможно выполнить условия уровня культуры. Построено уже максимум военных фортов, а игра говорит, что их недостаточно. В итоге пришлось воспользоваться читом на завершение миссии.
В новом Pharaoh достаточно построить два форта лучников и два пехоты. Можно не заморачиваться с остальной инфраструктурой. Ближе к концу стоит строить все шесть и хотя бы пару боевых кораблей и пару транспортных, чтобы была возможность отправлять помощь союзникам. Сами боевые действия проходят автоматически. Но если совсем не будет защиты, то может быть очень плохо.
В Emperor можно было банально откупиться, вообще забив на наличие армии.
У меня тоже давно сомнения в честности бота, но всё равно интересно придумать в очередной раз тактику захвата территории, да ещё и с несколькими противниками. Если хочется чего-то попроще, то делаю карту мелких или средних островов и один за другим захватываю острова, окружая кораблями и высаживая артиллерию.
Из старых игр периодически могу заново поиграть в Half-Life, Max Payne, NFSU, Empire Earth. Что-то прям как будто заставляет внутри немного понастальгировать, вспомнить ощущения от игр и снова забыть их на несколько лет.
Где-то в 2003-м в деревне у бабушки посреди ночи видел нечто, что можно было бы принять за НЛО. Светлая точка далеко из-за горы поднялась вверх, а затем резко полетела в сторону под углом порядка 90 градусов. Свет пульсировал, как если бы он вырывался из сопла ракеты. Возможно, где-то там была военная база и проходили испытания.
Думаю, абсолютно все случаи т.н. НЛО вполне объяснимы простыми вещами. Просто раньше придумывали богов, а теперь - инопланетян.
Кажется, любая грамматика одинаково сложная, если ты её не используешь.
Английский начинал учить ещё в школе, изучая кучу правил параллельно. Шло очень сложно и медленно. Но реально английский начал хорошо развиваться, когда начал читать книги на английском (сначала по разработке), смотреть некоторые каналы на YouTube на английском (без субтитров) и, наконец, жить за границей, очень часто используя в общении. Также намеренно начал заставлять себя думать на английском, что позволяет расширить словарный запас и повторять уже изученное (кажется, сейчас я чаще думаю на английском, чем на русском). Почти все свои посты и статьи пишу либо сразу на английском, либо делаю перевод, а ChatGPT вносит правки и помогает таким образом узнавать, как правильно.
Сейчас учу испанский на английском через DuoLingo, находясь в испаноязычной среде. Помимо того, что такой подход к обучению на порядок проще и быстрее, чем это было в школе (за пару лет неспешного обучения с нуля дорос до B1 и уже не спрашиваю "hablas ingles?"), этот способ также помогает учить английский, т.к. некоторые конструкции или слова мне никогда ранее не встречались, которые встречаются в процессе обучения испанскому (например, "recital").
Аналогично и с грамматикой языков программирования. Так только на второй своей работе программистом я перестал заглядывать в шпаргалку с правильным написанием SQL-запросов, т.к. там мы их использовали очень много. Просто практика. А сейчас разбуди среди ночи - с закрытыми глазами напишу.
Аналогично и в разработке. На прошлом месте работы понял, что совершенно не нужно перенапрягаться, чтобы работать столь же эффективно, как и остальные (и даже лучше). Реальное время работы составляло порядка 4-5 часов максимум и, когда вынужден был уволиться из-за переезда, сказали, что работал при этом очень быстро и хорошо (за пару месяцев до этого команду сократили вдвое, т.к. основной цикл разработки стартапа завершился). Уроки танцев сразу после работы просто заставляли меня заканчивать вовремя, не задерживаясь на работе более, чем на 10 минут. И оказалось, что никому и не нужно, чтобы я задерживался.
Будучи джуном, я привык, что надо стараться сделать за день максимально много - и это хорошо, даже правильно, пока ты новичок и надо нарабатывать опыт. Будучи мидлом, всё продолжилось в том же духе - хотелось как можно поскорее вырасти. А уже в качестве сеньора не сразу удалось притормозить и понять, что качество работы оценивается не количеством написанных строк и, если можно сделать задачу, даже не открывая код, то так и надо делать. Так появились задачи, которые мне банально не хотелось выполнять после прочтения описания, т.к. чувствовался от них какой-то душок. Во всех таких случаях она на следующий день отменялась. Но для этого нужна насмотренность и хорошее понимание проекта.
В целом, продолжаю в том же духе. При этом задачи заканчиваются быстрее, чем время, на них отведённое.
Тоже была подобная история, где кто-то собирался сделать шахматы (что уже вызвало вопросы) и дали мне, случайному человеку, ссылку на код. Я посмотрел глазами - что-то действительно похоже на шахматы. Потом снова списались, а меня в ответ просят скриншот прислать. Не понимаю, какой именно, а мне говорят, что запущенной программы, на что я ответил, что не запускаю незнакомый код на компе. После этого человек по-быстрому удалился, даже профиль на LinkedIn вскоре пропал. Я об этом с подробностями там же пост и написал.
Они эффективны, пока ты не начинаешь читать такой код. Разные исключения обрабатываются по-разному и никогда не угадаешь, как очередное исключение будет обработано, пока не прочитаешь код всего стека вызовов методов от контроллера до твоего десятого по счёту метода.
goto тоже по-своему эффективен, пока не начинаешь читать такой код. (Вспомнилось, как последний раз я их использовал как блок, подобный finally. Это было лет 15 назад в Delphi.)
Они и продолжают решать определённые проблемы, например, когда в DI не дописали интерфейс и у нас случился NullReferenceException в методе или ArgumentException в контроллере, если туда это дописали. Это ошибка программиста, которая решается один раз и там больше не должно быть исключения. А пользователь, соответственно, не должен видеть содержимого этого исключения.
Но если нам просто надо провалидировать данные и сообщить пользователю о неверных данных, это подобно использованию топора там, где нужен пинцет.
Я считаю, что исключение - это такое сообщение, текст которого конечный пользователь не должен видеть. Он только для внутреннего использования и в идеале исключение не должно повторяться, если его один раз поправили.
Я о том и говорю, что исключения должны быть только там, где программа даже не должна работать дальше. Если в API вместо положительного числа пришло отрицательное, то это просто ошибка валидации и мы возвращаем BadResult(ModalState). Если же кидать исключение на каждую проверку вместо того, чтобы вернуть сообщение об ошибке и далее тот же BadResult с этим текстом, то ничего хорошего из этого не выйдет.
Это просто примеры, чтобы не перегружать не важными словами и кучей ненужных для этого классов. Каждый волен делать так, как пожелает.
В простых API моно и бросать исключения. Но вложенность до вызова десятка методов один за другим и каждый может выбросить какое-то исключение, часть из которых логируется, часть игнорируется, часть выбрасывается дальше с новым текстом или даже новым типом, код превращается в ад. Читать его очень трудно, понять логику - ещё труднее. А потом пользователи говорят, что нажатие на одну кнопку возвращает осмысленный текст, а на другую похожую - заглушку. Потом оказывается, что одно и то же исключение в одном месте перехватывается и просто логируется где-то на полпути к контроллеру, а в другом - перебрасывается дальше.
Получается, что у каждого такого метода может быть несколько состояний: вернул результат, выбросил ValidationException, выбросил NotFoundException, выбросил FooBarException, и т.д. И каждый надо учесть. У Result зависит от подхода. Можно всегда Ok(result) возвращать, можно разбить на Ok и BadResult, можно сделать больше и вообще на клиенте обрабатывать.
Пользуюсь таблицами Google с 2011 для учёта любых денежных операций. Имеют ровно те же преимущества. Расходы, доходы, долги, даже подсветка по условию, также сводные таблицы по итогам года или нескольких месяцев, формулы для автоматического расчёта чего угодно, комментарии по необходимости. Писал статью сюда однажды с шаблоном.
Если можно не писать код и получить такой же результат, не надо писать код. Хотя для общего развития полезно.
На дня вышло интересное видео об очистке солнечных панелей с помощью электричества у устройств, находящихся на других космических телах.
https://youtu.be/KPzd40hj3gQ
Я для сохранения зрения, чтобы не заработать близорукость, практиковал чтение электронной книги мелким шрифтом на вытянутой руке, чтобы был контраст в работе глаз. Ещё всегда стараюсь не приближаться к экрану ближе вытянутой руки. Поэтому всегда использую беспроводную клавиатуру и мышь, чтобы быть подальше от ноута. Никогда не сижу с ним в постели и только в исключительных ситуациях (отсутствие электричества) беру его в кафе. Всегда использую тёмные темы. При этом слежу за тем, чтобы в помещении всегда было светло. Даже если надо что-то почитать в телефоне в темноте, я хотя бы включаю у него фонарик, чтобы не сильно напряжно было.
25 лет за компом. Есть лишь незначительное ухудшение, никак не мешающее жить. И то думаю, что из-за экрана телефона.
Наслаждаюсь всеми играми серии, начиная с Zeus. Сейчас заканчиваю Pharaoh: A New Era (осталось где-то 4 миссии). Там бесит необходимость бесконечного поклонения богам, иначе они очень неприятно обижаются, и то, что иногда просто невозможно выполнить условия уровня культуры. Построено уже максимум военных фортов, а игра говорит, что их недостаточно. В итоге пришлось воспользоваться читом на завершение миссии.
В новом Pharaoh достаточно построить два форта лучников и два пехоты. Можно не заморачиваться с остальной инфраструктурой. Ближе к концу стоит строить все шесть и хотя бы пару боевых кораблей и пару транспортных, чтобы была возможность отправлять помощь союзникам. Сами боевые действия проходят автоматически. Но если совсем не будет защиты, то может быть очень плохо.
В Emperor можно было банально откупиться, вообще забив на наличие армии.
Вроде как, рисунок дамасской стали формируется формированием множества слоёв и использованием разных металлов с разными примесями.
Не-не-не, Дэвид Блэйн, я тебе не доверяю.
У меня тоже давно сомнения в честности бота, но всё равно интересно придумать в очередной раз тактику захвата территории, да ещё и с несколькими противниками. Если хочется чего-то попроще, то делаю карту мелких или средних островов и один за другим захватываю острова, окружая кораблями и высаживая артиллерию.
Из старых игр периодически могу заново поиграть в Half-Life, Max Payne, NFSU, Empire Earth. Что-то прям как будто заставляет внутри немного понастальгировать, вспомнить ощущения от игр и снова забыть их на несколько лет.
На ПК есть Underground, Most Wanted и остальные. Лучший саундтрек у Underground. До сих пор некоторые треки оттуда в плейлисте.
Где-то в 2003-м в деревне у бабушки посреди ночи видел нечто, что можно было бы принять за НЛО. Светлая точка далеко из-за горы поднялась вверх, а затем резко полетела в сторону под углом порядка 90 градусов. Свет пульсировал, как если бы он вырывался из сопла ракеты. Возможно, где-то там была военная база и проходили испытания.
Думаю, абсолютно все случаи т.н. НЛО вполне объяснимы простыми вещами. Просто раньше придумывали богов, а теперь - инопланетян.
Кажется, любая грамматика одинаково сложная, если ты её не используешь.
Английский начинал учить ещё в школе, изучая кучу правил параллельно. Шло очень сложно и медленно. Но реально английский начал хорошо развиваться, когда начал читать книги на английском (сначала по разработке), смотреть некоторые каналы на YouTube на английском (без субтитров) и, наконец, жить за границей, очень часто используя в общении. Также намеренно начал заставлять себя думать на английском, что позволяет расширить словарный запас и повторять уже изученное (кажется, сейчас я чаще думаю на английском, чем на русском). Почти все свои посты и статьи пишу либо сразу на английском, либо делаю перевод, а ChatGPT вносит правки и помогает таким образом узнавать, как правильно.
Сейчас учу испанский на английском через DuoLingo, находясь в испаноязычной среде. Помимо того, что такой подход к обучению на порядок проще и быстрее, чем это было в школе (за пару лет неспешного обучения с нуля дорос до B1 и уже не спрашиваю "hablas ingles?"), этот способ также помогает учить английский, т.к. некоторые конструкции или слова мне никогда ранее не встречались, которые встречаются в процессе обучения испанскому (например, "recital").
Аналогично и с грамматикой языков программирования. Так только на второй своей работе программистом я перестал заглядывать в шпаргалку с правильным написанием SQL-запросов, т.к. там мы их использовали очень много. Просто практика. А сейчас разбуди среди ночи - с закрытыми глазами напишу.
Аналогично и в разработке. На прошлом месте работы понял, что совершенно не нужно перенапрягаться, чтобы работать столь же эффективно, как и остальные (и даже лучше). Реальное время работы составляло порядка 4-5 часов максимум и, когда вынужден был уволиться из-за переезда, сказали, что работал при этом очень быстро и хорошо (за пару месяцев до этого команду сократили вдвое, т.к. основной цикл разработки стартапа завершился). Уроки танцев сразу после работы просто заставляли меня заканчивать вовремя, не задерживаясь на работе более, чем на 10 минут. И оказалось, что никому и не нужно, чтобы я задерживался.
Будучи джуном, я привык, что надо стараться сделать за день максимально много - и это хорошо, даже правильно, пока ты новичок и надо нарабатывать опыт. Будучи мидлом, всё продолжилось в том же духе - хотелось как можно поскорее вырасти. А уже в качестве сеньора не сразу удалось притормозить и понять, что качество работы оценивается не количеством написанных строк и, если можно сделать задачу, даже не открывая код, то так и надо делать. Так появились задачи, которые мне банально не хотелось выполнять после прочтения описания, т.к. чувствовался от них какой-то душок. Во всех таких случаях она на следующий день отменялась. Но для этого нужна насмотренность и хорошее понимание проекта.
В целом, продолжаю в том же духе. При этом задачи заканчиваются быстрее, чем время, на них отведённое.
Тоже была подобная история, где кто-то собирался сделать шахматы (что уже вызвало вопросы) и дали мне, случайному человеку, ссылку на код. Я посмотрел глазами - что-то действительно похоже на шахматы. Потом снова списались, а меня в ответ просят скриншот прислать. Не понимаю, какой именно, а мне говорят, что запущенной программы, на что я ответил, что не запускаю незнакомый код на компе. После этого человек по-быстрому удалился, даже профиль на LinkedIn вскоре пропал. Я об этом с подробностями там же пост и написал.
В том проекте, где у вас сотни
throw
, обязательно будет что-то вродеtry { ...} catch {}
, в лучшем случаеtry { ...} catch { logger.Log(); }
.Они эффективны, пока ты не начинаешь читать такой код. Разные исключения обрабатываются по-разному и никогда не угадаешь, как очередное исключение будет обработано, пока не прочитаешь код всего стека вызовов методов от контроллера до твоего десятого по счёту метода.
goto тоже по-своему эффективен, пока не начинаешь читать такой код. (Вспомнилось, как последний раз я их использовал как блок, подобный finally. Это было лет 15 назад в Delphi.)
Они и продолжают решать определённые проблемы, например, когда в DI не дописали интерфейс и у нас случился NullReferenceException в методе или ArgumentException в контроллере, если туда это дописали. Это ошибка программиста, которая решается один раз и там больше не должно быть исключения. А пользователь, соответственно, не должен видеть содержимого этого исключения.
Но если нам просто надо провалидировать данные и сообщить пользователю о неверных данных, это подобно использованию топора там, где нужен пинцет.
Я считаю, что исключение - это такое сообщение, текст которого конечный пользователь не должен видеть. Он только для внутреннего использования и в идеале исключение не должно повторяться, если его один раз поправили.
Нет, просто мне лично нравится, когда в один экран влазит больше кода, а пустые строки только там, где я их оставил.
Я о том и говорю, что исключения должны быть только там, где программа даже не должна работать дальше. Если в API вместо положительного числа пришло отрицательное, то это просто ошибка валидации и мы возвращаем BadResult(ModalState). Если же кидать исключение на каждую проверку вместо того, чтобы вернуть сообщение об ошибке и далее тот же BadResult с этим текстом, то ничего хорошего из этого не выйдет.
Это просто примеры, чтобы не перегружать не важными словами и кучей ненужных для этого классов. Каждый волен делать так, как пожелает.
В простых API моно и бросать исключения. Но вложенность до вызова десятка методов один за другим и каждый может выбросить какое-то исключение, часть из которых логируется, часть игнорируется, часть выбрасывается дальше с новым текстом или даже новым типом, код превращается в ад. Читать его очень трудно, понять логику - ещё труднее. А потом пользователи говорят, что нажатие на одну кнопку возвращает осмысленный текст, а на другую похожую - заглушку. Потом оказывается, что одно и то же исключение в одном месте перехватывается и просто логируется где-то на полпути к контроллеру, а в другом - перебрасывается дальше.
Получается, что у каждого такого метода может быть несколько состояний: вернул результат, выбросил ValidationException, выбросил NotFoundException, выбросил FooBarException, и т.д. И каждый надо учесть. У Result зависит от подхода. Можно всегда Ok(result) возвращать, можно разбить на Ok и BadResult, можно сделать больше и вообще на клиенте обрабатывать.