Мой web-dev
54 subscribers
62 photos
1 video
66 links
Привет, я php-бэкендер, делюсь своими мыслями и наработками
Download Telegram
Я оказывается совсем забыл, каково это - иметь ПК

Я сегодня весь день провёл, пытаясь оживить абсолютно внезапно умерший bluetooth. Просто вот прихожу с утра и ни мышка, ни клава не подключаются, а в настройках блютус даже включить нельзя - не видит железку.
Я чего только не перепробовал, и биос обновил, и ОС другую накатил, и fastboot вырубил. А знаете как всё решилось? Надо просто было выключить комп, отсоединить питание, ЗАЖАТЬ НА 30 СЕКУНД КНОПКУ ВКЛЮЧЕНИЯ и снова включить комп
Я просто в шоке, честно говоря, после мака, где, сука, всё работает из коробки
Ну ничего, так если в целом посмотреть, то я доволен новым компом :D
На работе задачи никогда не уходят в тестирование, пока их не посмотрит другой разраб (лучше даже не один)
В связи с этим надо как-то благодарить коллег, тратящих своё время на ревью
Не придумал ничего лучше, чем кидать всратые картинки в ответ на апрувы😃
😁5
Отпуск

Съездил в отпуск. Взял за свой счёт, потому что не отдыхал уже 3 года. Вроде как бы круто, море и всё такое, но в следующий раз только вдвоём с женой и не на юг :D
После отпуска пришёл, смотрю - накидана куча задач :( так себе начало работы, НО! Раскидался с ними очень быстро, то есть получается есть абсолютно реальный эффект от отдыха. Кто бы мог подумать :D
В прошлый раз я отдыхал дома, неделю проведя дома за приставкой, как раз ровно 3 года назад. С тех пор и думал, что отпуск бесполезен
В общем, отдыхайте почаще, желательно далеко от дома и от любых дел, которые могут хоть как-то напомнить привычный образ жизни
3🔥1
Недавно озадачился своими скиллами, давно ничего не читал и не изучал
В связи с этим нашёл пару ресурсов, с которых начну снова процесс обучения:
1. Роадмап. Очень обширный, от джуна до сеньёра, с кучей ссылок. Есть ещё вот такой, о нём я уже слышал, тоже много ссылок и много тем
2. До этого мне далеко, но Как и куда расти инженеру, если он уже Senior
3. Интервью по System Design
4. У меня большие проблемы с пониманием шифрования, поэтому - КАК РАБОТАЕТ ШИФРОВАНИЕ? С НУЛЯ ЗА ЧАС
5. Разработка и проектирование высоконагруженных систем
6. Как правильно выбирать очередь
Если у кого-то есть полезные ссылки, то делитесь, буду рад
Абсолютно случайно наткнулся на видео, где разраб объясняет новую фишку вскода - прокидывание портов
Фактически, альтернатива ngrok, когда надо кому-то из внешней сети показать своей проект в локалке без необходимости использования хостинга
Микромягкие молодцы, годноту пилят
https://youtu.be/Qi2hZ74_eyw?si=F3NBvdjjF6RRrl4j
Чето долго не писал, работы выше крыши, но все по порядку
1. Сегодня закончился испытательный срок, заявление на увольнение не попросили прислать значит все ок, работаем дальше😊 а если серьезно, то похвалили, сказали, что хорошо влился и хорошо работаю. Наверняка всем так говорят на всех работах, но от того не менее приятно.
2. Вчера был день рождения. В качестве подарка поехал кукухой и купил себе Гугл пиксель 7а. Зачем? Да хз, захотелось. Недавно меня посетила мысль с небес о том, что я телефоном пользуюсь только для телеги и музыки, поэтому какая разница на какой операционке сидеть. Хотя нет, разница определенно есть - никогда в жизни не возьму что-либо кроме айоси или чистого андроида
3. Перешёл на Ютуб музыку. Лучшее решение в жизни. Там есть абсолютно все, даже старые богом (а также Яндексом и спотифаем) забытые треки
4. Взял себе подработку на вечер в одной из прошлых контор. Мне не сложно, мозгу приятно, ну а кошельку тем более. Буду копить на xbox series x в новую квартиру
5. В прежнем режиме читаю статьи и посматриваю видосы про разработку. Надо заставить себя запилить свежий пост с подборкой.
6. Нашел очень интересную штуку - sql-подобный инструмент для работы с гитом. Если кто-то сможет придумать ей реальное применение, то напишите, я пока не въехал, хотя все равно удивлен функционалом. Ссылка - https://github.com/AmrDeveloper/GQL
👍2
Наткнулся на интересную концепцию - стриминговые sql движки, которые на лету точечно обновляют результаты какого-то заданного запроса (например, при подсчете строк в таблице их количество хранится отдельно, а не высчитывается каждый раз заново)

Вот сама статья, легко читается, простым языком объяснено что к чему - https://www.epsio.io/blog/how-to-create-a-streaming-sql-engine
👍2
Шутки про дроп базы джуном же очень смешные, да?

Так вот, мне вчера было не смешно, потому что я уже не джун совсем

В пылу работы по воспроизведению критичного бага перепутал вкладки и сделал truncate table_name cascade на превью нашей компании вместо локалки. Ржака да и только :D
Смертельный рев команды тестировки был слышен аж из самой Москвы
Сисадмин сказал, что дело житейское, но все равно выточит мне медальку!

А если смотреть чуть позитивнее, то наконец-то тестировщики в работу возьмут мою задачу по репликации данных на превью - очень даже хороший плюс :D
🔥3😁3🤯1
Забыл рассказать важную (для меня) новость
Наконец-то, спустя год ожидания мы с семьей переехали в другую квартиру🥳
У меня теперь есть свой отдельный уголок, где можно спокойно с комфортом работать за большим столом
Впервые в жизни мне предоставилась нормальная возможность работать с перерывами на еду, недалеко отходя от кровати😃
График теперь примерно такой: 8:30 проснулся, до 18 основная работа, до 21 с семьей, до 00 подработка. По выходным тоже, конечно же, в обед и ночью подработка.
Благодаря этому я в этом месяце на подработке отработал 80 часов, что не может не радовать, потому что наконец-то куплю себе xbox, почему-то прям чешется его купить🤔
Справедливости ради, у меня и до этого был такой график (уже чуть больше месяца), просто сейчас не надо тратить время на дорогу до офиса и ночью гораздо удобнее работать за рабочей станцией, чем на ноуте
На подработке фронт еще молодой, иногда пишет после 21, вопросы задаёт. На резонный вопрос "ебанулся? Выгоришь" - смеется. Хороший запал
👍31
Вот кстати и само рабочее место, а еще кошка, которая из-за стресса из-за переезда теперь от меня не отходит и даже спит со мной, хотя раньше даже подумать бы не мог о таком ❤️
1👍1
О важности автогенерации документации вашего api

Tl;dr: дока только через автоген, а чтобы этого достичь иногда можно и нужно срать на стандарты

Как-то меня последний год обходила стороной необходимость вручную писать доку. Сначала был graphql, где доку вообще делать не надо, а потом перешёл на проект на симфони, где дока генерится при деплое исходя из аннотаций на экшене контроллера.
Я даже и не подозревал, во-первых, насколько это удобно, а во-вторых, насколько это важно для скорости разработки и главное для желания вообще хоть что-нибудь разрабывать и менять.
Извечная проблема программистов в том, что программу постоянно надо менять и чем легче это делать, тем нам проще.
Так вот я все это к чему: на подработке используется yii2 и еще мои собственные наработки, максимально облегчающие разработку апи, НО! совершенно не трогающие момент с документацией. Из-за этого приходилось руками писать доку на аннотациях в пхп, следя, не забыл ли я случайно где-то параметр или тот ли я указал тип. Это жопа. Это трудоемко, это пустая трата времени.
Плюнул, потратил 3 часа на полную переработку подхода и в итоге получил автогенерацию доки при деплое, прямо как на основной работе. Вдовесок к этому получил полную типизацию всех возвращаемых значений при обработке данных. Двойной выигрыш.
Есть очевидный минус - в классе, производящем обработку данных, мы теперь имеем аннотации, относящиеся к документации апихи, о которых класс знать не должен вообще. Плохо ли это? Очень! Но мне абсолютно все равно🤣 В конце концов, код выполняет свою цель, не сильно при этом засираясь. Более того, такой подход куда практичнее, чем многоуровневый маппинг с "запросов" на "команды", а потом на "ответы".
Но давайте я все же подчеркну основную мысль - это не энтерпрайз и это не команда из 10 человек, я тут один. Тут срать все хотели на подобные мелочи, заказчику важен результат здесь и сейчас. Соответственно, и подходы мной выбираются исходя из этого.
Писать чистый совершенный код невозможно, абсолютно в любой ситуации придется чем-то жертвовать и уж лучше это будет небольшое нарушение разделения зон ответственности, чем мое время и нервы
1👍1
Очередная статья против микросервисов

К сожалению, пока не за моим авторством

https://habr.com/ru/articles/779362/

Почему-то с каждым разом как про них заходит разговор, мне все меньше хочется с ними работать. Звучит как дроч и решение зачастую несуществующих проблем
Хотя нет, работать с ними хочется - обычно там платят много😃
🙈1
Говно с дымом!

Первый год, когда сложно подвести итоги, потому что дома просто атас
У нас по факту с новым годом празднуется и новоселье, поэтому толпа родственников с радостным гулом сейчас играет в мафию, я естественно с ними)
Кратко итоги года:
1. Вас стало 37, это +25 с прошлого нового года🥳
2. Поменял 2 работы, щас наконец-то прям всем доволен🥳
3. Переехал 🥳
За год чисто по техническим моментам была куча изменений и новшеств, поэтому сложно все упомнить
Я каждый год думаю, что стал умнее, но в конце года каждый раз осознаю как был глуп; звучит грустно, но я этому рад😃
Всех с новым годом! Спасибо, что остаетесь со мной и читаете! В новом году желаю сумасшедшего роста всем, как карьерного, так и личностного!❤️
6🎉3👍1
Пакетные менеджеры и их приколы

Речь пойдет об устаревшей тулзе, во второй версии которой надеюсь такое поправили

Ставил я значит сегодня зависимости через composer на старом проекте, и по словам утилиты все прошло отлично, но вот беда - проект лежит и валит меня ошибками о том, что не может найти файл в одном из пакетов
Полез смотреть - вижу, что пакет вообще не установился.

Ну раз при общей сборке не поставился, значит надо ставить в частном порядке.
Однако, при запуске команды получаем fatal error о превышении использования памяти.
Поднимаем до двух гигов - ситуация повторяется. Чисто для прикола пробуем 4 и все завелось!

В логах операций обнаруживаем удивительно смешную запись: As there is no 'unzip' command installed zip files are being unpacked using the PHP zip extension.
СУКА!
Кто тебе мешал сказать мне, что тебе пакеты распаковывать нечем?
Зачем насиловать мне мозг и оперативу?
Зачем вообще для этого использовать пхп в качестве фолбэка???

Ну да ладно, и не с таким жили. После кружечки кофе отпустило, идем дальше работать🌝
😁2
Магия сиквела

Или "почему я раньше об этом не знал?"

У всех у нас есть грешок иногда хранить в базе массив данных в виде json и проект на подработке не стал исключением

Сегодня потребовалось найти такие строки в таблице, среди которых есть совпадение с элементами массива
Например, есть строка адреса с названием "Ленина" и массивом домов [1, 12, 123]
На входе принимаем "12" в качестве поиска и должны выдать "Ленина, 12" и "Ленина, 123"

Можно конечно сделать like на строковом представлении json'а, но мы тогда получим всю строку и придется в коде вручную выбирать подходящие значения

Но я обнаружил очень интересную конструкцию в потсгре - lateral, и запрос стал выглядеть так:
select street_name,
house_number::int
from address,
lateral jsonb_array_elements_text(house_numbers) as house_number
where street_name = 'Ленина'
and house_number like '12'
По факту мы получаем какое-то виртуальное представление, где каждая строка с адресом разрослась столькими копиями, сколько есть вхождений в массивах и каждое это значение можно вытянуть, обратившись к house_number
На выходе естественно имеем две записи, как и требовалось!

Теперь плохие архитектурные решения можно оправдывать тем, что даже из такой ситуации есть удобный выход😄
Сегодня я узнал

... что при поимке исключения сливать в логи getTraceAsString() это далеко не самое лучшее, что можно сделать

Оказывается, если забрать трейс из исключения через getTrace(), то там будет описан весь стек вызовов методов, но при этом там будут еще и все аргументы, передаваемые в эти методы

Это сумасшедше облегчает дебаг исключений, потому что не нужно выдумывать какие же там данные пришли, можно просто сразу идти и воспроизводить ошибку
🔥2👍1
Ни минуты покоя

Купил себе еще на новый год Raspberry Pi 5, но пришла только на днях
Сел разбираться как ее теперь включить, не имея ни монитора, на клавиатуры, ни мыши - максимальный headless
Казалось бы, ну это же RPI, самый известный и раскрученный одноплатник. Там все должно работать просто по щелчку пальца и вообще без боли, но нет :)))

Я два часа провел, пытаясь бутнуть ее с внешнего ссд. Вроде бы образ прожег, креды для wifi и ssh в конфиге верные, подключаю к питанию - горит зеленым и моргает; даже пингуется!*
На форумах прочитал, что первый раз она грузится долго, подождал минут 15 - без успеха
Залез даже на морду роутера, чтобы смотреть кто сейчас подключен к wifi, но малины там не было

В итоге оказалось, что малина сначала горит красным, потом моргает один раз долго и один раз коротко. Что это значит? Правильно! Мой блок питания по ее мнению - говно. Ей подавай только заморский за 2к + доcтавка + налоги + на пиво.
Что еще интереснее так это то, что где-то в недрах потного форума обладателей малинок есть тред в котором говорится, что там где-то в неведомых краях в мануале черным по белому написано, что если блок питания не родной, то надо после сигнала малины прожать кнопку питания и все заведется.

И ведь завелось! Теперь дело за малым - сделать как-то ее видимой из внешней сети, настроить реверс-прокси и начать пилить потихоньку пет-проекты :)

* на самом деле, при прожиге образа я указал имя малины как ddruganov - ровно такое же, как и у компа, с которого пытался тыкаться по ssh; счастливо делая ping ddruganov.local я видел, что малина пингуется, а вот ssh почему-то не работает, не открыт 22 порт; ответ простой - я пинговал сам себя, думая что пингую малину; стоило пережечь образ и указать ей имя как dd-rpi, как она сразу же перестала пинговаться :D
👍1
Продолжаем веселье

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

Вот только почему-то пока этим занимался, малина перестала пинговаться через dd-rpi.local. Не понос, так золотуха)