В последние годы PHP динамично развивался с появлением новых версий языка, содержащих ряд новых фич, депрекаций и более строгий синтаксис. Кроме того, библиотеки и фреймворки, такие как Symfony, постоянно претерпевают изменения: каждые полгода появляются новые минорные релизы, а каждые два года - мажорные, наиболее существенные. Для нас в Westwing очень важно регулярно обновлять имеющуюся кодовую базу, чтобы она оставалась работоспособной, безопасной и актуальной. К счастью, в сообществе PHP появилось множество инструментов, способствующих улучшению кодовой базы.
SE
Как работает хэширование
Если вы программист, то пользуетесь хэш-функциями каждый день. Они применяются в базах данных для оптимизации запросов, в структурах данных для ускорения работы, в безопасности для защиты данных. Почти каждое ваше взаимодействие с технологией тем или иным образом включает в себя хэш-функции.
Хэш-функции фундаментальны и используются повсюду.
Но что же такое хэш-функции и как они работают?
В этом посте я собираюсь развенчать мифы вокруг этих функций. Мы начнём с простой хэш-функции, узнаем, как проверить, хороша ли хэш-функция, а затем рассмотрим реальный пример применения хэш-функции: хэш-таблицу.
Мои любимые вопросы о CSS с ответами. Версия 2023 года
В 2020 году я поделился списком моих любимых вопросов о CSS, который стал довольно популярным, судя по просмотрам. Спустя 3 года CSS изменился, и я решил дополнить список, добавив вопросы про гриды, пользовательские свойства (CSS-переменные), новые селекторы и свойства.
Работая над вопросами, мне хотелось помочь вам в изучении новых возможностей CSS и тех моментов, которые многие разработчики упускают, судя по моей практике. Также вы можете использовать их, если проводите интервью. Я буду только рад этому. А теперь давайте начнём.
Шпаргалка по SQL (postgres), которая выручает меня на собесах
Привет, Хабр!
Я решил посвятить свою первую статью SQL. Вопросы, рассмотренные ниже мне задавали на собеседованиях на позицию python-разработчика. Естественно отвечать правильно получалось не всегда, а если точнее то чаще не правильно, однако проведя N часов в рефлексии я составил перечень ответов, которыми пользуюсь до сих пор.
Данная информация предполагает знание основ языка запросов и я надеюсь, она окажется полезной для разработчиков, которые сейчас активно ищут работу а также, что ты прочитаешь этот текст до конца и добавишь свой вопрос к перечню (ну или поправишь неточности в существующих)
Обработка ошибок в go в 2023 г
В go нет исключений. Разработчики, начинающие знакомиться с go, часто не знают как лучше всего обработать ошибку, как её отобразить в логах и что с ней делать дальше.
Рассмотрим все варианты, которые можно встретить в проектах на golang в 2023 году.
Атомики в Go: особенности внутренней реализации
Атомики в Go - это один из методов синхронизации горутин. Они находятся в пакете стандартной библиотеки sync/atomic. Некоторые статьи сравнивают atomics с mutex, так как это примитивы синхронизации низкого уровня. Они предоставляют бенчмарки и сравнения по скорости, например Go: How to Reduce Lock Contention with the Atomic Package.
Однако важно понимать, что, хотя это примитивы синхронизации низкого уровня, они разные по своей сути. Прежде всего атомики являются "low-level atomic memory primitives", как отмечено в документации, то есть являются примитивами низкого уровня реализующих атомарные операции с памятью. В этой статье я расскажу про некоторые особенности их внутренней реализации и отличие от мьютексов.
Собеседования для бэкендеров: как готовиться, тренироваться и не облажаться
Привет, Хабр! Меня зовут Гриша Скобелев, я бэкенд-разработчик, у меня есть гитара, кошка и скейтборд. Я так сильно люблю Spring Framework, что назвал кошку в честь него — Веснуша. Возглавляю программный комитет Podlodka Java Crew, где мы делаем классные конференции. Еще я организовал книжный клуб для бэкенд-разработчиков { между скобок }. Хочу поделиться своим опытом развития бэкендера — от собеседования до наработки разных навыков для роста. Тут будет много ссылок, практических советов и инструкций, которые я наработал за время своей карьеры, общения с другими бэкендерами и проведения конференций и консультаций.
Движок для игры от первого лица в 265 строках Javascript
Сегодня окунёмся в мир, который можно потрогать. В этой статье мы исследуем, как с нуля, быстро и без особо сложной математики написать движок для игры от первого лица. Для этого мы воспользуемся приёмом под названием «бросание лучей» (raycasting). Возможно, вы видели примеры такой техники в играх Daggerfall и Duke Nukem 3D, а из более свежего – в статьях из «ludum dare» от Нотча Перссона. Что ж, для Нотча это неплохо, но не для меня! Вот демка (управление стрелками и тачпадом) [источник].
Несколько обычных и не очень способов оптимизации производительности serverside-приложений
Рекомендую присмотреться к списку, если ваш проект вырос или планирует рост, написанный на любом интерпретируемом языке (php/ruby/python) на нескольких серверах с обычным стеком (веб-сервер/сервер приложений, субд, redis/memcahed, rabbitmq, ...).
В качестве подопытного для оптимизации был взят PHP backend - все нижеперечисленные приёмы были опробованы и применены. Наш проект почему-то задыхался на казалось бы неплохом железе и к тому же не утилизировал выданные ему аппаратные ресурсы.
Go scheduler. Простыми словами
В данной статье расскажу о планировщике Go. Основу материала взял из книги Уильяма Кеннеди Ultimate Go. Вначале поговорим о планировщике OS, после перейдем к планировщику Go и сравним их.
Книга «Роберт Мартин рекомендует. Код, который умещается в голове: эвристики для разработчиков»
Незаменимые практические советы по написанию кода в устойчивом темпе и по управлению сложностью, из-за которой проекты часто выходят из-под контроля. В книге описываются методы и процессы, позволяющие решать ключевые вопросы: от создания чек-листов до организации командной работы, от инкапсуляции до декомпозиции, от проектирования API до модульного тестирования. Автор иллюстрирует свои выводы фрагментами кода, взятыми из готового проекта. Написанные на языке C#, они будут понятны всем, кто использует любой объектно-ориентированный язык, включая Java, C++ и TypeScript. Для более глубокого изучения материала вы можете загрузить весь код и подробные комментарии к коммитам.
JavaScript Live-Coding: Мастерство решения типовых задач на собеседованиях
Искусство live-coding в JavaScript становится все более важным для успешной карьеры веб-разработчика. Если ты стремишься преуспеть на собеседованиях и проявить свои навыки в реальном времени, то эта статья для тебя. Я предлагаю тебе углубиться в мир типовых задач на собеседованиях в разделе live-coding, где ты сможешь проявить свои знания JavaScript. В этой статье мы рассмотрим популярные задачи, подходы к их решению и дадим полезные советы, которые помогут тебе справиться с этим вызовом. Давай начнем погружение в мир JavaScript и подготовимся к успешным собеседованиям!
Что такое квантовая запутанность
Часто для описания квантовой запутанности приводят неубедительные аргументы. Например, при измерении спина запутанных частиц в одинаковом направлении результат получается противоположен, значит ли это что частицы запутаны? Конечно, ведь такое невозможно в обычной реальности. Ну как же невозможно, возьмите два шарика, раскарсьте их половинки в чёрный цвет, и расположите противоположным образом. Выберете направление в пространстве и убедитесь что шарики в точке этого направления имеют разные цвета. Значит ли это что шарики квантово-запутаны?
Как разминировать свой код на PHP (и не только)?
«Мины» в исходном коде — это не только уязвимости, но и прочие дефекты безопасности, которые так или иначе ухудшают качество софта. Какими путями «минируется» ваш код и какие типы «мин» наиболее актуальные? Поговорим об этом в контексте веб-программирования и PHP.
О «минах» в коде расскажет Илья Поляков, руководитель отдела анализа кода Angara Security. Илья поделится какими инструментами разминировать код и какие уязвимости и дефекты безопасности можно найти максимально быстро и дешево.
В чём разница между хорошим и плохим кодом? Объяснение для непрограммистов
Однажды я где-то прочитал цитату, имевшую приблизительно следующий смысл:
«Жизни многих людей в современном мире зависят от программного обеспечения, например, оно контролирует системы управления большими коммерческими авиалайнерами. Тем не менее, сфера разработки ПО практически никак не регулируется. Любой может стать разработчиком-самоучкой, при этом нет никаких сертификаций или правил, как в других профессиях с высокими ставками, например, в архитектуре или нейрохирургии. Это угрожающе нерегулируемая сфера, хотя несколько строк плохого кода могут привести к смерти».
Кажется, это заявление я прочитал в каком-то крупном СМИ. Статья называлась примерно так: «Опасайтесь плохого кода, он может вас убить; хотя постойте, он невидим, так что не стоит беспокоиться!». Весьма успокаивающее послание для читателей, как считаете? Сейчас я думаю, что авторы статьи просто пытались создать сенсацию из наличия таящегося «плохого кода» в авиалайнерах, поездах и беспилотных автомобилях, которых становится в нашем обществе всё больше, и таким образом увеличить количество просмотров.
Так как же объяснить концепцию «плохого кода» обывателю?
Я пишу код, анализирую код и выполняю рефакторинг кода (то есть переписываю его более чётким и удобным образом) примерно по пять часов в день, поэтому знаю, что такое код (и что такое плохой код!). Иногда я забываю о том, что многие люди не имеют понимания о том, что же такое код.
Для таких людей я представлю ответ на вопрос: «Если вы кодер, то чем вы занимаетесь?»
[Студентам] Советы изучающим git
Периодически от студентов приходят вопросы о работе системы контроля версий Git. Частая причина возникновения этих вопросов — непонимание разницы между репозиторием и обычной папкой.
Вот небольшая заметка на эту тему. Давайте разберемся, как работать с папками и репозиториями с точки зрения практики, то есть без строгих определений.
«Чистый» код, ужасная производительность
На самом деле, большая доля этих правил не влияет на среду исполнения кода, который вы пишете. Подобные правила невозможно оценить объективно, да это и необязательно, ведь на этом этапе они достаточно произвольны. Однако есть правила «чистого» кода, на которые делают особый упор — это правила, которые можно измерить объективно, поскольку они влияют на поведение кода в среде исполнения.
Если посмотреть на список правил «чистого» кода и вытащить из него правила, которые действительно влияют на структуру кода, то мы получим следующее:
- Отдавайте предпочтение полиморфизму, а не «if/else» и «switch»
- Код не должен знать о внутреннем устройстве объектов, с которыми он работает
- Функции должны быть маленькими
- Каждая функция должна выполнять одну задачу
- Принцип «DRY» — Don’t Repeat Yourself («не повторяйся»)
Эти правила достаточно чётко формулируют то, как должен создаваться конкретный фрагмент кода, чтобы быть «чистым». Но я задам такой вопрос: если мы создадим фрагмент кода, соответствующий этим правилам, какова будет его производительность?
5 антипаттернов при написании кода на функциональном ЯП
Антипаттерны в функциональных языках программирования могут показаться непривычными в силу отличия этих языков от других их видов, в связи с чем разработчики нередко пишут не самые удачные реализации, склонные к ошибкам и трудные в обслуживании. В статье мы разберём пять наиболее типичных антипаттернов, избегая которые вы сможете создавать более удобный в работе код при меньшем количестве ошибок.
Хождение по граблям PDO: что скрывают за собой современные PHP ORM
Привет, Хабр! В статье расскажу о том, с какими трудностями можно столкнуться при разработке ORM на PHP и поделюсь опытом по их преодолению.
Рассказывать буду только о том, о чём знаю сам. У вас может быть абсолютно другое мнение. Поэтому если вы нашли ошибку или хотите обсудить — свяжитесь со мной.
Что делает ChatGPT… и почему это работает?
То, что ChatGPT может автоматически генерировать что-то, что хотя бы на первый взгляд похоже на написанный человеком текст, удивительно и неожиданно. Но как он это делает? И почему это работает? Цель этой статьи - дать приблизительное описание того, что происходит внутри ChatGPT, а затем исследовать, почему он может так хорошо справляться с созданием более-менее осмысленного текста. С самого начала я должен сказать, что собираюсь сосредоточиться на общей картине происходящего, и хотя я упомяну некоторые инженерные детали, но не буду глубоко в них вникать. (Примеры в статье применимы как к другим современным "большим языковым моделям" (LLM), так и к ChatGPT).
Information
- Rating
- Does not participate
- Registered
- Activity