Обложка канала

Beer::PHP 🍺

3025 @beerphp

Здесь публикуются короткие заметки о PHP, Linux, Unit Testing, DB, OOP, etc., выдержки из статей, книг, видео, курсов и других материалов. Теперь тебе больше не нужно перерывать тонны информации ;)

  • Beer::PHP 🍺

    Ще одна прикольна двіжуха — NIX Coding Challenge Усього буде 5 алгоритмічних задач, кожна наступна буде складнішою за попередню. Можна вирішувати задачі використовуючи будь-яку мову, будь то Java, Golang, або улюблений PHP. Переможці отримають грошові сертифікати на покупку гаджетів. Для участі необхідно: 🔹 мати практичний досвід в IT від 1,5 року; 🔹 уміти програмувати будь-якою мовою; 🔹 знати, як розв'язувати алгоритмічні задачі. 🤓 Також на ПК має бути інтерпретатор або компілятор обраної мови, що логічно Коли: 15 жовтня, з 11:00 до 18:15 Де: онлайн Вартість: Безкоштовно 👍 Все буде відбуватися через Telegram-бот, він надсилатиме нове завдання кожні 80 хвилин зі старту челенджу, або як тільки виконаєш поточне завдання. Підсумки будуть надіслані одразу по завершенню челенджа. Так що приймай челендж, та відчуй кайф від невпинного кодингу ;) 👉 Реєструйся за посиланням.
  • Beer::PHP 🍺

    Law of Demeter (Закон Деметры, LOD) Этот закон часто используют вместе с темой Tell Don't Ask. Его идея в том, что объект должен обладать ограниченным знанием о других объектах и модулях, взаимодействовать только с теми, кто имеет к нему непосредственное отношение. Формально правило звучит так, что в клиентском коде вы можете вызывать методы объектов, которые: ✅ Были переданы как аргументы; ✅ Были созданы локально; ✅ Являются глобальными; ✅ Собственные методы; Пока что непонятно зачем это всё. Давайте разбираться. Основная задача — создать условия для слабой связанности (loose coupling) между объектами. Но за счёт чего? 🌈 Представьте, вы находитесь в магазине, хотите купить товар стоимостью 25$. Вы дадите продавцу 25$ или вы отдадите продавцу свой кошелек, чтобы тот достал 25$? Давайте разберём этот пример. 👉 В первом случае мы явно знаем, что у объекта SomePerson есть Wallet, который мы хотим получить, чтобы достать (вычесть) из него какую-то сумму денег. Таким образом мы создаём сильную связь (tight coupling) с объектом кошелька, а также раскрываем особенности внутренней реализации. ❓ Чем же лучше второй вариант? Когда у SomeAnotherPerson мы вызываем метод subtractMoney, это нам даёт дополнительную гибкость, возможность легко изменить внутреннюю реализацию данного метода, не изменяя другие участки кода. Как бонус появляется information hiding, а также это дело менее проблематично мокать в тестах. 🤓 LOD также называют законом "одной точки" (one dot), т.к. ноги растут из Java. В нашем же случае о его применении стоит задуматься при виде более одной стрелочки ->. Обращаю внимание, что речь идёт о методах (или свойствах), которые позволяют получить промежуточный объект, утрируя - о геттерах. То есть две стрелочки в каком нибудь fluent interface (напр. $filter->limit(10)->offset(0)) сюда не относятся. 🙈 У закона Деметры тоже есть свои минусы. Одним из них является необходимость создания большого количества методов-адаптеров. Если вы чувствуете, что классы становятся перегруженными - это признак плохого объектно-ориентированного дизайна. ❓ Можно ли нарушать закон Деметры? Руководствуйтесь здравым смыслом. Если у вас, например, вложенные DTO, которые предназначены для транспортировки объектов, то нет никакого смысла наворачивать что-то подобное сверху. Используйте только там, где это уместно и помните о преимуществах 😉 #php #oop #middle #source
  • Beer::PHP 🍺

    👍 На всяк випадок нагадую, що через 15 хвилин стартує конфа, ось посилання на трансляцію То ж долучайтесь, має бути цікаво ☺️
  • Реклама

  • Beer::PHP 🍺

    Chernihiv.IT CONF: TECH FRONT Колеги Chernihiv.IT вже у цю суботу організовують цікаву конференцію. Будуть розповідати про архітектуру, бази даних, безпеку та DevOps. 👍 Конфа відбудеться онлайн, сама по собі безкоштовна, та віддячити можна у вигляді free donation, всі отримані кошти будуть спрямовані на закупівлю теплого одягу для військових. Деталі та реєстрація за посиланням https://www.chernihiv.it/tech-front-conf 👉 Тож реєструйся, та не пропусти крутий івент ;)
  • Beer::PHP 🍺

    Value Object or Data Transfer Object? Существует некоторая путаница когда речь заходит об этих двух понятиях. Что ж, давайте разбираться. Data Transfer Object (DTO)уже писал ранее о нём, это объект, который содержит в себе примитивные типы (string, int, bool, etc.). Его задача определить схему передаваемых данных, декларируя имена полей и их типы. То есть используя DTO, мы гарантируем, что сможем обратиться к конкретному полю, которое будет содержать ожидаемый тип данных. ↔️ DTO обычно используются для передачи данных между различными сервисами или приложениями, либо между слоями внутри одного приложения. ❗️ При этом DTO абсолютно ничего не знает о том, имеют ли передаваемые данные какой-то смысл в рамках вашего бизнеса (или приложения). То есть строки могут быть пустыми, числа отрицательными и т.д. Пример Value Object — это полноценный объект вашей доменной модели, он гарантирует, что значения имеют смысл с точки зрения предметной области (вашего бизнеса) , то есть строки больше не будут пустыми, там где не должны, а числа будут проверены на соответствие правильному диапазону. 👍 Также value object's должны соответствовать whole value concept, могут содержать какую-то логику, помимо валидации. Пример Value Object часто используются в предметной области (Domain и Application Layer) и не используются для передачи данных между приложениями. В определенных случаях их удобно использовать и в инфраструктурной части приложения, например чтобы избежать дублирования правил валидации данных. 🫣 Иммутабельность Данное свойство почему-то пытаются использовать в качестве доказательства, что перед нами непосредственно Value Object. Да, безусловно VO должен быть иммутабельным, однако это совсем не означает, что DTO не может быть таковым. Более того, очень рекомендую готовить его именно таким образом. ❓Может ли Value Object находиться внутри DTO? Интересный вопрос, с одной стороны хочется сразу просто ответить "нет", ведь мы только что проговорили, что VO не подходит для передачи. С другой, я многократно видел как внутри используется тот же DateTimeImmutable, который фактически является VO. 💬 Напишите в комментарии, что думаете по этому поводу? Своё мнение, а также все самые интересные мысли из комментариев закину отдельным постом ☺️ #php #oop #middle #source ❤️ Все буде Україна 🇺🇦
  • Beer::PHP 🍺

    Можна скиглити, що традиційне планування справ більше не діє. Але ні! Усе можливо і все вдасться, якщо дуже того захотіти. Це доводить новий гість подкаста «Наша собача справа»Ігор Шатило, Group Lead Backend Developer у NIX. У 21 рік Ігор вже став груплідом. Він успішно поєднує участь в IT-проєктах із навчанням в університеті, чудово знається на бекенд-розробці та виступає на IT-конференціях. А ще (якимось дивом) устигає робити власні невеличкі IT-проєкти і відшліфовувати на них набуті навички. Такі проєкти — дієвий спосіб розвиватися в IT, і саме про це ми поговоримо з Ігорем у компанії незмінного ведучого Антона Шевчука, веб-розробника і Team Lead у NIX. Переходь за посиланням і лови Ніксову хвилю мотивації! У цьому випуску: 📌 що таке pet-проєкти і як вони допомагають у кар'єрі айтівця; 📌 чим відрізняється стартап від pet-проєкту; 📌 чи можна заробляти на pet-проєкті; 📌 де знайти інвесторів; 📌 чому згадка про pet-проєкт у резюме — це +100 500 зірочок для кандидата. Нам уже кортить порахувати вподобайки під цим відео на YouTube-каналі NIX. Тож без вагання лишай свої лайки та коментарі. Ми все читаємо, чесно 😀 Поки плейлист поповнюється новим контентом, ти завжди можеш переглянути попередні епізоди за цим посиланням. Також нагадуємо, що подкаст NIX доступний на всіх популярних платформах: 💎 Apple Podcasts; 💎 Google Podcasts; 💎 SoundCloud; 💎 Spotify. Підписуйся, слухай і ділися з нами враженнями. Будьмо на зв'язку ;)
    Наша собача справа #5 – Як розвиватися в IT за допомогою PET-проєктів – Ігор Шатило

    Можна скиглити, що традиційне планування справ більше не діє. Але ні! Усе можливо і все вдасться, якщо дуже того захотіти. Це доводить новий гість подкаста «Наша собача справа» — Ігор Шатило, Group Lead Backend Developer у NIX. У 21 рік Ігор вже став груплідом. Він успішно поєднує участь в IT-проєктах із навчанням в університеті, чудово знається на бекенд-розробці та виступає на IT-конференціях. А ще (якимось дивом) устигає робити власні невеличкі IT-проєкти і відшліфовувати на них набуті навички. Такі проєкти — дієвий спосіб розвиватися в IT, і саме про це ми поговоримо з Ігорем у компанії незмінного ведучого Антона Шевчука, веб-розробника і Team Lead у NIX. У цьому випуску: 📌 що таке pet-проєкти і як вони допомагають у кар'єрі айтівця; 📌 чим відрізняється стартап від pet-проєкту; 📌 чи можна заробляти на pet-проєкті; 📌 де знайти інвесторів; 📌 чому згадка про pet-проєкт у резюме — це +100 500 зірочок для кандидата. Також нагадуємо, що подкаст NIX доступний на всіх популярних платформах: SoundCloud – https://soundcloud.com/nix-podcast Apple Podcasts – https://podcasts.apple.com/us/podcast/%D0%BD%D0%B0%D1%88%D0%B0-%D1%81%D0%BE%D0%B1%D0%B0%D1%87%D0%B0-%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B0-%D0%BF%D0%BE%D0%B4%D0%BA%D0%B0%D1%81%D1%82-nix/id1632448766 Google Podcasts– https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5zb3VuZGNsb3VkLmNvbS91c2Vycy9zb3VuZGNsb3VkOnVzZXJzOjExMzQxOTk4MDcvc291bmRzLnJzcw Spotify – https://open.spotify.com/playlist/69tR03BpYZswfMXSftV4JW 00:20 - Привітання 00:52 - Шлях Ігоря Шатило до IT 03:58 - Як в 21 рік стати тімлідом 07:17 - PET-проєкти Ігоря 08:02 - Що таке PET-проєкт 11:50 - Як у 9-му класі почати робити PET-проєкт, який потім переросте у стартап 21:28 - Яка команда потрібна, щоб зробити PET-проєкт? 25:27 - Якщо б ти повернувся у минуле, то які б помилки виправив у своєму проєкті? 30:51 - про інші PET-проєкти Ігоря 33:31 - PET-проєкти Антона Шевчука 35:53 - Чим відрізняється стартап від PET-проєкту. 38:55 - чому PET-проджекти и стартапи робляться у гаражі 41:19 - Чому Ігор став PHP-девелопером? 43:23 - Що буде у майбутньому з PHP? 47:52 - Чому щоб опанувати якусь технологію це треба робити з практичної точки зору 49:16 - Чим корисні та важливі PET-проджекти 53:20 - Яка команда потрібна щоб розробити PET-проджект 01:00:13 - Скільки потрібно часу, щоб стати тімлідом? 01:04:29 - Наскільки важливо в CV мати власний PET-проджект? 01:15:51 - Що будеш робити після Перемоги?

    YouTube
  • Beer::PHP 🍺

    Поговорим о времени В комментариях к этому посту было несколько просьб подробнее рассказать о часовых поясах. В этом посте я постарался собрать несколько важных тезисов по данной теме. 📚 Теория: 🕔 Всемирное время — UTC. Было введено вместо устаревшего среднего времени по Гринвичу (GMT), поскольку шкала GMT является неравномерной и связана с суточным вращением Земли. Шкала UTC, в свою очередь основана на равномерной шкале атомного времени (TAI). Часовые пояса вокруг земного шара выражаются как положительное или отрицательное смещение относительно UTC. ❗️ Часовой пояс и смещение — не одно и то же. Почему? Всему виной летнее время (DST — Daylight Saving Time). 👉 Часовой пояс может иметь одно или несколько смещений. Какое именно время принято в качестве стандартного, зависит от текущих политических и/или экономических причин в конкретной стране. Так как время по UTC не переводится ни зимой, ни летом, то, для тех мест, где есть переход на летнее время и происходит смещение относительно UTC. ⌚️ Unix время — это количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года и представлено целым числом. 🔧 Практика: ✅ Следует работать с Unix временем. Такой формат удобно использовать для сравнения и хранения дат. При необходимости его легко преобразовать в любой подходящий формат (и обратно). На всякий случай упомяну про "критические даты", например 19 января 2038 года в 03:14:08 число секунд достигнет 2^31, что может привести к ошибочной интерпретации этого числа как отрицательного. Возможное решение проблемы состоит в использовании не 32-битной, а 64-битной переменной, которой хватит на 292 млрд лет. ✅ Если вам нужно хранить время только что произошедшего события, текущее время, по факту определённого действия, храните его в UTC (напр. для PostgreSQL —TIMESTAMP WITH TIME ZONE). Это могут быть записи в логах, время регистрации пользователя, совершения заказа или отправки письма. ✅ Нужно ли хранить часовой пояс пользователя? Да, только с помощью информации о часовом поясе мы можем сделать вывод о том, какое смещение у него сейчас или будет через пол года. Ведь, повторюсь, один часовой пояс может иметь несколько смещений. ✅ Если время привязано к пользователю — сохраняйте локальное время пользователя и его смещение. Фактически 1660050128, 2022–09–9T16:02:08+03:00 и 2022–09–9T13:02:08+00:00 — это одно и то же время. Сохраняя смещение мы оставляем важную информацию, которая может оказаться нужной как с точки зрения бизнеса, так и для внутренней отладки, принятия других решений. Иными словами если у вас есть информация, и её хранение вам не доставляет (существенных) дополнительных усилий — не выбрасывайте её. Вы не сможете получить её обратно. ———— 🔥 Вот те самые несколько нюансов, которыми хотелось поделиться. Пишите в комментарии, если есть что дополнить, возможно вместе соберём еще несколько дельных советов😉. #php #datetime #middle
  • Beer::PHP 🍺

    Как https нас защищает? Когда браузер делает запрос к веб-сайту, то запрос должен пройти через множество различных сетей, любая из которых может быть прослушана злоумышленником. ☝️ Как правило, запросы передаются посредством обычного HTTP, в котором и запрос клиента, и ответ сервера будут в открытом виде. Это значит, что злоумышленник может получить отправленные вами "sensitive data" (пароли, данные карт, коды подтверждения и т.д.) и воспользоваться ими. ❓ Что такое TLS? Transport Layer Security (TLS) — это тот самый механизм (протокол), который обеспечивает безопасное HTTP соединение (фактически наследник SSL). ⚠️ TLS расположен на уровень ниже протокола HTTP в модели OSI. Это означит, что в процессе выполнения запроса сперва происходят все действия, связанные с TLS, а уже потом, всё что связано с HTTP-соединением. 🔑 TLS использует асимметричное шифрование для генерации общего секретного ключа и аутентификации (то есть удостоверения в том, что вы – тот за кого себя выдаете), а также симметричное (с общим секретным ключом) для шифрования запросов и ответов. То есть сначала, клиент и сервер должны безопасно договориться об общем "сеансовом" ключе. Для этого используют алгоритм обмена ключами Ди́ффи — Хе́ллмана (DH). В это раз поленюсь и оставлю вам ссылку на видос о том, как он работает. 👉 Итак, мы получили секретный ключ, но откуда мы знаем, что общаемся с нужным нам сервером, а не со злоумышленником? ❤️ Аутентификация Здесь на помощь нам приходит асимметричное шифрование. Каждый из вас слышал о TLS-сертификатах (SSL-сертификаты - устаревшее название, являющееся синонимом), из предыдущего поста мы знаем, что по факту это открытый ключ, который в свою очередь был выдан (и подписан) источником, которому все стороны доверяют — центром сертификации. Вместе с ним на сервере находится закрытый ключ от этой пары. ☑️ Сервер берет все данные, которыми клиент и сервер уже успели обменяться, вычисляет хеш и шифрует (подписывает) своим закрытым ключом. ☑️ Клиент обладая тем же набором данных, также хеширует их, получает от сервера подпись (зашифрованный хеш) и применяет к нему открытый ключ из сертификата (расшифровывает). ✅ Если полученные хеши совпадают — это значит, что никто не вмешивался в процесс получения общего ключа, а подпись поставил именно тот сервер, которому принадлежит данный сертификат. Когда же стороны уже договорились о секретном ключе, клиент-серверное взаимодействие происходит с помощью симметричного шифрования, которое, как мы знаем, намного эффективнее для передачи информации. 🤟 В итоге мы безопасно создали сеансовый ключ с помощью алгоритма Диффи Хеллмана, удостоверились в подлинности источника с помощью сертификата и безопасно передаём друг другу данные с помощью симметричного шифрования. —————— Конечно за кадром осталось очень много нюансов о том как происходит handshake, как происходит управление сеансовыми ключами, какие используются шифры и т.д. Для любознательных оставлю ссылку на очень подробную статью. #php #crypto #middle ❤️ Все буде Україна 🇺🇦
    Алгоритм Диффи-Хеллмана

    Простое и наглядное описание того, как работает алгоритм Диффи — Хеллмана, позволяющий двум сторонам получить секретный ключ используя прослушиваемый канал связи. Википедия - http://www.youtube.com/watch?v=3QnD2c4Xovk Оригинал на английском языке -- http://www.youtube.com/watch?v=3QnD2c4Xovk Перевод и озвучка -- Рахим 'freetonik' Давлеткалиев

    YouTube
  • Beer::PHP 🍺

    Шифрование (Part 2) — Разбираемся с ЭЦП В предыдущей части я упоминал, что используя шифрование, помимо целостности и конфиденциальности информации, мы также хотим быть уверенными, что информация, полученная нами от какого либо источника, точно была передана именно этим источником. Напомню, что при асимметричном шифровании мы используем два ключа — открытый и закрытый, а также то, что зашифровать информацию можно любым из них (и открытым и закрытым), а расшифровать вторым из этой пары. ❓ Получается, что не важно какой ключ называть открытым, а какой закрытым и можно рассылать любой? Нет. ❗️ Дело в том, что из закрытого ключа можно восстановить открытый, а вот из открытого получить закрытый нельзя (если быть точным, то решение данной задачи возможно, но не выгодно т.к. на это требуется огромное кол-во времени и ресурсов). 👉 Немого освежим знания про хеширование. Напоминаю, что применяя хеш-функцию к одному и тому-же набору данных, мы всегда будем получать одинаковую хеш-сумму. Если в исходном наборе данных что-то изменится, то после применения хеш-функции хеш-сумма получится совсем другой (за исключением коллизий). Коллиизия хеш-функций — это когда для двух разных наборов данных после применения хеш-функции на выходе получится одинаковый результат. Коллизии существуют для большинства хеш-функций, но для «хороших» хеш-функций частота их возникновения близка к теоретическому минимуму. ❓Так как же работает ЭЦП? 1. Берём данные, которые нам необходимо подписать и применяем к ним хеш-функцию, получаем хеш-сумму. 2. Затем полученную хеш-сумму мы шифруем нашим закрытым ключом. 3. Полученный результат отправляем адресату вместе с теми данными, которые мы подписывали. ————————— 1. Получатель берёт нашу зашифрованную хеш-сумму и расшифровывает её с помощью открытого ключа. 2. Далее применяет хеш-функцию к полученным данным. 3. Затем сравнивает оба хеша и если они совпадают, то получатель может быть уверен, что подписанные данные не были изменены, а также, что именно мы их отправили, т.к. закрытый ключ есть только у одного отправителя. Псевдокод для понимания ❓ Что такое АЦСК и зачем нам сертификаты? Всё выглядит отлично, кроме одного момента: откуда мы знаем, что открытый ключ на самом деле принадлежит правдивому источнику, а не был отправлен нам каким-то злоумышленником? 📃 К сожалению в таких условиях нам не обойтись без третьей стороны, которой все могут доверять. На арену выходит "Аккредитованный центр сертификации ключей" (АЦСК). Его задача состоит в том, чтобы подтвердить принадлежность открытого ключа именно вам. После этого АЦСК подписывает ваш открытый ключ, своим закрытым ключем и то, что получилось, называется сертификатом открытого ключа. Теперь любой может проверить подлинность открытого ключа, то есть расшифровать подпись в сертификате (онлайн, с помощью открытого ключа удостоверяющего центра) и убедиться, что ключ принадлежит именно вам. 💩 Собираем всё в кучу ☝️ Получается, чтобы абсолютно безопасно передать данные нужно выполнить следующие шаги: 1. Вы и получатель должны сгенерировать по паре ключей 2. Открытые ключи подписать в АЦСК и обменяться ими 3. Данные, которые нужно засекретить, шифруете открытым ключем получателя 4. Затем подписываете своим закрытым ключом уже зашифрованные данные и отправляем 1. Получатель сначала проверяет ваш сертификат (убеждается что вы это вы) 2. Затем вашим открытым ключем проверяет подпись (убеждается в целостности и что данные пришли именно от вас) 3. Своим закрытым ключем расшифровывает данные и получает то, что хотел ❗️Такая сложная схема используется не всегда. Можно обойтись без АЦСК, когда мы доверяем полученным открытым ключам (напр. мы сами его положили на сервак для доступа по ssh) или используем так называемые "сети доверия" (OpenPGP). ————— 💬 Не стесняйтесь писать в комментарии своё мнение, вопросы, замечания и предложения ;) #php #crypto #middle ❤️ Все буде Україна 🇺🇦
  • Beer::PHP 🍺

    Шифрование (Part 1) На первый взгляд достаточно понятная тема, но реалии столкнули меня с тем, что далеко не все знают как это работает, зачем нужны ключи и почему в наш мир с ноги ворвался https, как работает JWT. Но обо всём по порядку. 👉 Думаю, всем понятно зачем мы шифруем данные — чтобы скрыть информацию от посторонних лиц. Для этого нам нужно: ✔️1. Выбрать какой-то алгоритм шифрования, то есть договориться по какому принципу мы будем преобразовывать наши данные. ✔️2. Ключ (шифр) — тайная информация (набор цифр и букв) которая используется выбранным алгоритмом для шифрования и расшифровки. ❓Чем шифрование отличается от хеширования? Хеширование мы уже рассматривали ранее. Зашифрованные данные мы можем вернуть в исходное состояние, а захешированные нет. Используя шифрование мы хотим обеспечить передачу всех данных (целостность) конкретному получателю или от него (идентифицируемость), скрыв её от посторонних лиц (конфиденциальность). Хеширование служит не для передачи информации, а для разного рода проверок, об этом чуть позже. 👌 Симметричное и асимметричное шифрование 🔐 Симметричное — использует один ключ, который служит и для шифрования и для расшифровывания ваших данных. 🤟 Неоспоримым преимуществом такого подхода является его скорость т.к. он требует малое количество вычислительной мощности. 🙃 Основная проблема — безопасная передача того-самого ключа. Передавать его по открытым каналам нельзя, иначе любой, кто им завладеет сможет расшифровать ваши сообщения. Также стоит учитывать, что для приватного общения с каждым отдельным участником вам необходимо создавать свой отдельный ключ. 🔐 Асимметричное — использует два ключа, открытый (публичный / public) и закрытый (приватный / private). Асимметричным оно называется потому, что данные шифруются с помощью одного ключа (как правило открытого), а расшифровываются с помощью второго (закрытого). Таким образом вы можете создать пару ключей и отправить другим участникам свой открытый ключ, с помощью которого они смогут шифровать свои сообщения и отправлять вам. Чтобы вы могли отправлять зашифрованные сообщения адресату — он должен сгенерировать себе свою отдельную пару ключей и отправить открытый ключ вам. 👍 Только обладатель закрытого ключа может расшифровать зашифрованное сообщение. Таким образом решается проблема передачи ключей по открытому каналу, ведь не важно сколько человек обладает открытым ключем — зашифрованную им информацию они получить не смогут. 😒 Однако у этого подхода есть и свой минус — он требует намного больше вычислительной мощности. ❓Можно ли зашифровать данные закрытым ключом, а расшифровать открытым? — Можно. Но зачем это делать и как это используется напишу в следующей части. ————— Для тех кому интересно поиграться накидал на коленке пример того, как работает RSA. Да, на PHP. Да, страдал. Но надеюсь вышло понятно. 💬 Протестируем открытие комментариев. Ну и не забывайте кидать реакции, чтобы я понимал насколько тема интересна и полезна. #php #crypto #middle ❤️ Все буде Україна 🇺🇦
  • Beer::PHP 🍺

    👉 Так совпало, что когда CrosserBot запостил своё сообщение у меня в канале, я бежал по воздушной тревоге в укрытие. ❗️Хочу донести до вас несколько месседжей: 1. Я из Украины. Я родился и вырос в Донецке. Я был вынужден выехать из своего любимого города. 2. То, что сделали CrosserBot — они сделали необдуманно, хотя я сильно благодарен им за смелость, за их позицию, которую я разделяю и поддерживаю. 3. Я верю, что в нашем комьюнити все здраво и критически мыслящие люди, которые способны на DYOR (do your own research). 4. От себя лично я прошу воздержаться от резких высказываний с одной и с другой стороны. Это не поможет. Это вызывает ненависть, которая на самом деле никому не нужна. 5. Все войны заканчиваются. Эта не будет исключением. ⭕️ Что касается моей позиции: 1. Войска РФ вторглись на территорию суверенного государства. В результате этого действия гибнут люди с двух сторон. Этому нет оправдания. 2. Сейчас в РФ не может быть позиции "я вне политики". Политика коснулась каждого. Сегодня в РФ пора это принять. Или бояться автозаков и смериться с тем, что происходит с экономикой или бороться с этим. 3. Если вы боитесь сесть на 15 лет, я вас не осуждаю, это нормально. Только нужно принять тот факт, что вам угрожают не украинцы, а власти РФ. ‼️ Итог: Я временно закрываю комментарии, чтобы не раздувать вражду и не вызывать ненависть с обоих сторон. Точно знаю, что словесные перепалки делают только хуже. Несколько дней назад я сделал отдельный канал, в котором делаю посты о текущей ситуации, сам проверяю инфу на предмет правдивости. Если вам не хватает политической информации — Welcome. ——————————————————— Если бы 2 недели назад мне сказали, что я буду писать этот текст я бы посмеялся этому человеку в лицо. Я горжусь тем, что родился и вырос в Украине, горжусь нашими людьми, армией и силой духа. Все буде Україна 🇺🇦❤️
  • Beer::PHP 🍺

    Начни год с карьеры в IT — на Online Ярмарке вакансий NIX! В любом из IT-направлений можно стать успешным профи. Осталось только выбрать подходящее направление. А если определился — двигаться дальше! Регистрируйся на наше мероприятие, чтобы узнать больше о популярных IT-профессиях и о том, как быть востребованным специалистом ;) Когда? 29 января в 11:00 Где? в Discord и на YouTube-канале NIX Почему стоит принять участие? 🔹Ты пообщаешься о карьере разработчика с нашими экспертами по языкам программирования PHP, Java, .NET и Golang, разработке под Android и iOS, а также по BA, QA, DevOps, PR и рекрутингу 🔹Посмотришь онлайн-лекции, поучаствуешь в воркшопах и квизах с призами 🔹У тебя будет возможность пройти онлайн-собеседование и получить оффер в NIX Для кого мероприятие: 🔹Студентов и начинающих разработчиков 🔹Опытных IT-специалистов 🔹Всех, кто хочет сменить профессию и попробовать себя в IT Если и менять свою жизнь, то прямо сейчас! Все просто: переходи на сайт и регистрируйся на Ярмарку вакансий NIX.
  • Beer::PHP 🍺

    Подготовка к собеседованиям от CodeReview Я уже несколько раз рассказывал о проекте CodeReview, который основан на чистом энтузиазме и прикольной идее обмена опытом. Для тех кто пропустил — это это комьюнити разработчиков, которые помогают друг другу ревьювить код, при этом не только на PHP, но и на куче других языков. ⚡️ Недавно ребята запустили новый формат — «подготовка к собеседованиям», где они воссоздают ту самую атмосферу интервью, используют тестовые задания реальных компаний, подсказывают как правильно оформить резюме, короче по полной помогают подготовиться на Junior, Middle и Senior позиции по направлениям Java, Python, PHP, а также JavaScript. Я также принимал участие в "пилотном" потоке в качестве ментора и буду помогать ребятам со следующим потоком 👌. 👉 Так что если ты хочешь протестировать себя, пройти собеседование 1 на 1, узнать свои слабые места и лучше подготовиться к предстоящему интервью, то оставляй заявку через эту форму.
  • Beer::PHP 🍺

    Ну что, подъехал новый "МойОфис" под Linux 👉 Представлен в DEB и RPM пакетах, получается совместим с кучей линуксовских ОС, включая Astra и "Альт". Для частного пользователя абсолютно бесплатный, рекламы внутри тоже нет, ну и интернета не требует :) 👍 Есть обзорчик на Хабре! 🐧, где описаны все подробности о возможностях продукта. Хватит терпеть неудобные редакторы, качай по ссылке прямо сейчас! 🔥
    МойОфис для частных пользователей вышел на Linux. Изучаем офисные редакторы компании

    В апреле 2021 года, параллельно с началом государственной программы предустановки российского ПО на умные устройства, МойОфис впервые выпустил бесплатные настольные редакторы документов для частных...

    Хабр
  • Beer::PHP 🍺

    DateTimeImmutable vs DateTimeInterface Очень давно не выходили посты, пора возвращаться в строй и вот один из черновиков, который я таки добил. Все мы знаем (надеюсь), что для работы с датой и временем в PHP cуществует класс DateTime. Однако, даже работая с этим классом, в котором решены многие проблемы, мы можем набить себе кучу шишек. И вот как избежать некоторых из них: 📌 Используйте только DateTimeImmutable Изначально DateTime задумывался как Value Object, а одним из главных принципов создания VO является иммутабельность. Думаю, что никому не будет приятно попадать в подобные ситуации, когда создавая один объект, мы случайно аффектим и второй [pic ]. Ведь именно такие замечаешь не сразу т.к. на первый взгляд всё логично написано. Конечно можно решить это использовав clone, но зачем? 👍 Вместо того, чтобы добавлять костыли для предотвращения неожиданных изменений, используйте DateTimeImmutable, который является тем самым иммутабельным Value Object'ом, а значит под капотом, будет создавать новый объект, то есть сделает clone за вас. 📌 Не используйте DateTimeInterface Но почему? Да, я и сам его использовал до недавнего времени, но спасибо коллегам по работе за подсказку. В PHP изначально появился класс DateTime. Очевидно, это удобный инструмент, который стали использовать в большом кол-ве проектов, но быстро поняли, что мутабельность это ошибка. Тогда для соблюдения обратной совместимости и более плавного перехода прогеров на DateTimeImmutable — выпустили "патч" в виде DateTimeInterface. 👉 А как же завязываться на абстракции, а не на реализации? Во-первых, вы просто не можете создать пользовательский класс, который бы имплементировал этот интефейс. Во-вторых необходимость в интерфейсах для Value Object's крайне спорная затея. Также были намерения по выпилу данного интефейса. Ну и согласно PSR-20 (за который проголосовали но еще не зарелизили) мы будем завязаны именно на реализации DateTimeImmutable. 📌 Всегда используйте информацию о часовом поясе Не нужно от неё абстрагироваться, да и в большинстве случаев не получится. Это хорошо соотносится с whole value concept, то есть работать с временем без часового пояса равнозначна работе с деньгами без валюты. Есть несколько нюансов как правильно это делать, но это уже совсем другая история ☺️. ————— И да, так как в телеграмм появились реакции, которые можно использовать вместе с комментариями (но нет 🍺 и 🐒), то попробуем заюзать их в тестовом формате. Так что ставьте 🔥и пишите комменты :) #php #datetime #junior
  • Реклама

  • Beer::PHP 🍺

    Опросник по итогам года 🍺 В преддверии нового года самое время подвести итоги и в нашем php-комьюнити. Для этого, как и в прошлом году, был составлен очень простой опросник, заполнение которого займет меньше 2 минут и 46 секунд времени 👍 📌 Ребята проводят опрос уже второй год и вот такие результаты были по итогам 2020. 👉 Каждый, кто дойдёт до конца, имеет возможность принять участие в розыгрыше ништяков от партнёров опроса. Так что не ленись и заполняй опросник прямо сейчас ;) P.S. Если этот канал был полезен, не забудь отметить, что читал его в этом году, мелочь, а мне будет приятно 😉
    PHP-итоги года

    2-й ежегодный опрос PHP-сообщества: все, что было важно в уходящем году.

    Typeform
  • Beer::PHP 🍺

    В Новый год — с новой профессией в IT! Проверь свои знания на NIX Online Edu Testing Купить подарки, поставить елку. Чего-то не хватает в праздничном списке… Точно! Подготовиться к карьере в IT! Для этого приглашаем тебя поучаствовать в онлайн-тестировании по одной из 17-ти программ обучения. Выполни тест и узнай уровень своей подготовки. Когда: с 3 по 24 декабря Где: онлайн с любого удобного тебе гаджета Хочешь освоить самую актуальную профессию в IT? Эксперты NIX помогут тебе. В Корпоративном центре обучения NIX есть 17 учебных программ. В зависимости от направления ты будешь учиться офлайн в Харькове или онлайн. Ты получишь базовые знания по фронтенд и бэкенд-разработке, по бизнес-анализу и в сфере облачных технологий. После обучения ты сможешь уверенно начать карьеру в IT и попробовать себя на позиции Junior-специалиста в команде NIX! Отличный старт для нового года, правда? ;) Теперь дело за малым — переходи по ссылке, выбирай понравившуюся программу обучения и проходи онлайн-тестирование.
  • Beer::PHP 🍺

    Почему 90% новичков забивают на программирование? Р-а-б-о-т-а. Чтобы устроиться, нужно выучить 10 языков, собрать портфолио и работать за спасибо. Тогда вас заметят, но это не точно. Другое дело – читать канал «WebCraft». С ним на изи выучите PHP и научитесь работать в фрейморке Laravel. Работы здесь много, спецов мало и платят хорошо. Что почитать, какие фишки по коду упростят работу и с чего вообще начинать – всё внутри. Сайты, приложения, сервисы – вы научитесь создавать их от А до Я. Осталось только подписаться: @web_craft