Pull to refresh
4
0
Send message

Программирование — это вообще не просто!⠀

Reading time19 min
Views40K


Привет, Хабр!


Идея статьи появилась, когда я начал повсюду замечать якобы подтверждения мифа, что «программирование — это просто»‬‬.


В новостях «восьмилетняя девочка, которая второй раз в жизни занимается программированием, наклепала чат-бота за 45 минут»‬ (ага, да!).


Курсы предлагают мне за 10 месяцев с нуля стать миддл+ (ага, да!).


Но я-то знаю, как оно на самом деле. Мы, программисты, обычно решаем проблемы и двигаемся дальше, но я решил запротоколировать всё как есть, и в течение пары месяцев скрупулёзно записывал всю ту хрень, что происходила со мной и моими коллегами, чтобы показать программирование без прикрас. Поехали!


Читать дальше →
Total votes 200: ↑190 and ↓10+216
Comments109

Автоматизация тестирования API посредством Postman

Level of difficultyMedium
Reading time5 min
Views5.4K

Добрый День! Меня зовут Галактион, я — QA, в этой статье я собираюсь поделиться с Вами опытом автоматизации API посредством Postman, используя язык программирования — JavaScript.

Проект, о котором пойдет речь — региональный портал государственных и муниципальных услуг, в котором интегрированы следующие сервисы (все перечислять не буду, т.к. их множество).

Читать далее
Total votes 10: ↑8 and ↓2+10
Comments5

Шаблон проектирования «состояние» двадцать лет спустя

Reading time5 min
Views27K
Состояние — поведенческий шаблон проектирования. Используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния. Классическая реализация предполагает создание базового абстрактного класса или интерфейса, содержащего все методы и по одному классу на каждое возможно состояние. Шаблон представляет собой частный случай рекомендации «заменяйте условные операторы полиморфизмом».

Казалось бы, все по книжке, но есть нюанс. Как правильно реализовать методы не релевантные для данного состояния? Например, как удалить товар из пустой корзины или оплатить пустую корзину? Обычно каждый state-класс реализует только релевантные методы, а в остальных случаях выбрасывает InvalidOperationException.

Нарушение принципа подстановки Лисков на лицо. Yaron Minsky предложил альтернативный подход: сделайте недопустимые состояния непредставимыми (make illegal states unrepresentable). Это дает возможность перенести проверку ошибок со времени исполнения на время компиляции. Однако control flow в этом случае будет организован на основе сопоставления с образцом, а не с помощью полиморфизма. К счастью, частичная поддержка pattern matching появилась в C#7.
Альтернативная реализация шаблона
Total votes 21: ↑17 and ↓4+13
Comments26

«Range-based for»: что интересного лежит на поверхности

Level of difficultyMedium
Reading time8 min
Views4.8K

Новый синтаксис для циклов for в C++ появился уже давно - более десяти лет назад в стандарте C++11. Идея, скрывающаяся за этим синтаксисом, не является сколь-нибудь запутанной, и практически все, кто интересуются новыми свойствами языка, быстро разобрались с тем, как этим синтаксисом пользоваться и, что важнее, как создавать свои типы, совместимые с синтаксисом range-based for. Однако, как мне кажется, именно в вопросах взаимодействия с пользовательскими типами спецификация range-based for содержит несколько интересных деталей, лежащих практически на поверхности, которые остаются незамеченными просто потому, что идиоматические подходы прекрасно обходятся и без них. Возможно, кому-то будет интересно взглянуть на них повнимательнее.

Читать далее
Total votes 26: ↑26 and ↓0+31
Comments2

Реализуем эффективный тупль с помощью C++26

Level of difficultyMedium
Reading time7 min
Views9.4K

Свет видел много любительских реализаций std::tuple, и реализация своих велосипедов — наверное, это действительно действенный способ обучения: вряд-ли можно сказать, что ты что-то по-настоящему понимаешь, если не можешь объяснить, как это что-то устроено.

Многие пытливые умы на протяжении десятилетий задавались вопросом: как же реализован std::tuple, как мне реализовать свой тупль (кортеж)? [1]

И немало было дано ответов на такие вопросы и написано статей ([2]). Однако я берусь утверждать, что все они имеют один фатальный недостаток! Конкретнее, они все рассматривают в основном лишь один (и при этом неэффективный) способ реализации: с помощью множественного наследования или рекурсивного инстанцирования, имеющий в свой очередь множество своих недостатков, главный из которых — неэффективное использование памяти.

В то время как современный C++ позволяет реализовать тупль гораздо проще (без обилия шаблоноты) и эффективнее.

Войти в мир эффективных реализаций туплей
Total votes 33: ↑30 and ↓3+37
Comments69

А ваша зарплата в рынке? Простой, как топор, способ это узнать

Level of difficultyEasy
Reading time8 min
Views30K

Представьте, что в уголке экрана отображается зарплатный виджет. Как погодный, только зарплатный. И он вам показывает что-то типа "Ваша з/п - 115% от рынка. Работайте спокойно." Или - "Ваша з/п - 75% от рынка. Пора обновить резюме".

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

Статья может быть полезна сформировавшимся айтишникам, которые не меняют работу каждый год-два. А особенно полезна она ленивым айтишникам (типа меня), которым лень хотя бы раз в полгода-год выходить на рынок.

Далее
Total votes 56: ↑51 and ↓5+61
Comments47

OSINT Podcast: подборка подкастов

Reading time1 min
Views1.7K

Подготовил для вас самые стоящие OSINT-подкасты, они нацелены на разные сферы применения. Надеюсь, что они также помогут прокачать вам свои профессиональные навыки, узнать последние новости из мира разведки по открытым источникам, а заодно и прокачать английский язык.(ибо, каждый подкаст на EN)

1. Grey Dynamics — подкаст с участием бывших и действующих сотрудников разведки, работающих в серой зоне.

2. The NDS Show — подкаст разведывательного сообщества, посвященный геопространственной разведке и OSINT.

3. NeedleStack — бывший директор по информационным технологиям Белого дома и безопасник из ЦРУ обсуждают советы, приемы и понимание практик OSINT.

4. Open Source Intelligence (OSINT) and Investigation — подкаст, ориентированный на детективов, сотрудников правоохранительных органов, журналистов. 

— Его основная тема то, как разведку по открытым источникам можно использовать в различных видах расследований.

5. The Pivot Podcast — подкаст, созданный при поддержке Maltego и посвященный OSINT и информационной безопасности. В каждом эпизоде ​​участвуют один или два эксперта из Maltego, а также внешний специалист, которого пригласили поделиться опытом и советами.

Ещё больше познавательного контента из мира OSINT в Telegram-канале — @secur_researcher

Читать далее
Total votes 13: ↑7 and ↓6+3
Comments1

Как сделать анализатор кода за два дня

Level of difficultyMedium
Reading time23 min
Views8.1K

Статический анализ — это очень мощный инструмент, позволяющий следить за качеством кода. Предлагаем вместе попробовать написать простой Lua анализатор на Java, чтобы понять, как устроены статические анализаторы кода внутри.

Читать далее
Total votes 24: ↑24 and ↓0+30
Comments16

Глубокое погружение в CancellationToken: эффективное управление отменой в .NET

Level of difficultyMedium
Reading time14 min
Views10K

Привет, Хабр! Меня зовут Давид, я C#-разработчик в SimbirSoft. В современном программировании эффективное управление ресурсами и контроль за выполнением задач становятся ключевыми аспектами для создания надежных и масштабируемых приложений. В C# одним из важнейших инструментов в для достижения этих целей является механизм Cancellation Token. Эта концепция позволяет разработчикам изящно и безопасно управлять долгосрочными или ресурсоемкими операциями, обеспечивая возможность их отмены по требованию.

В этой статье мы погрузимся в мир Cancellation Token в C#, исследуя его роль, принципы работы и практическое применение. Мы обсудим, как эта технология позволяет разработчикам улучшить производительность и надежность их приложений, а также — как избежать распространенных ошибок при работе с асинхронными операциями. Подробно рассмотрим примеры кода, демонстрирующие использование Cancellation Token в различных сценариях, что сделает наше обсуждение не только теоретически насыщенным, но и довольно практичным для программистов любого уровня.

Читать далее
Total votes 13: ↑7 and ↓6+3
Comments10

«Некрасивое» получение TCP-статистики существующего сетевого соединения в desktop-приложении .NET для Windows

Level of difficultyMedium
Reading time4 min
Views1.5K

Некоторое время назад у одного из клиентов начало сбоить desktop‑приложение, в разработке которого я участвовал. Проблему локализовать не получалось очень долго — в том числе потому, что она никак не воспроизводилась на компьютерах и разработчиков, и тестировщиков.

И лишь спустя время один опытный член нашей команды, вооружившись Wireshark, обнаружил, что у клиента есть проблемы с локальной сетью. После имитации потери пакетов внутри нашей сети, мы смогли локализовать проблему.

Эта заметка о том, как без использования Wireshark добавить в приложение.NET Framework /.NET 5+ для Windows код получения статистики TCP‑соединения (количество перезапрошенных (retransmitted) и переупорядоченных (reordered) байт, а также некоторую другую информацию).

Вполне вероятно, эти данные пригодятся и вам — если вы используете долгоживущие или «бесконечные» TCP‑соединения (по типу Twitter Streaming API).

Итак, приступим!

Читать далее
Total votes 5: ↑5 and ↓0+7
Comments0

Проектирование эффективной системы кэширования для высоконагруженной системы

Reading time5 min
Views23K

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

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments3

Собеседование в энтерпрайз

Level of difficultyEasy
Reading time7 min
Views8.8K

Волею судеб я снова стал ходить на собеседования, и хочу поделиться некоторыми наблюдениями. На этот раз речь про энтерпрайзные компании, в которых должен быть выстроен процесс найма.

Читать далее
Total votes 20: ↑18 and ↓2+21
Comments39

Задача трёх тел (не китайская нефантастика)

Level of difficultyMedium
Reading time21 min
Views42K

Однажды, выполнив в Гугле запрос "Three body problem" ("Задача трёх тел"), я был просто поражен - первая страница результатов состояла только из ссылок на роман китайского писателя-фантаста Лю Цысиня с соответствующим названием, а также на телесериал, снятый по этому роману, т.е. ссылок на собственно задачу трёх тел не было вообще! Мне это показалось удивительным и несправедливым, поскольку сама по себе задача трёх тел тоже может выглядеть увлекательной в популярном изложении. В этой публикации я постарался привести некоторые доказательства этого утверждения.

Читать далее
Total votes 184: ↑182 and ↓2+234
Comments150

Реверсинжиниринг PWN-тасков или эксплуатируем бинарные уязвимости (Часть 2 / Stack1)

Level of difficultyMedium
Reading time2 min
Views995

Друзья всех приветствую! Продолжаем «пывнить» :) Кто не прочитал первую статью — она есть ТУТ!

Перед началом оставлю пару полезных ресурсов:

Теория — Статьи на тему, что такое и с чем едят Buffer Overflow

Практика — Крутые таски на тему PWN от Codeby Games

В этой статье будем решать таск Stack1 (скачать EXEшник можно ТУТ).

Читать далее
Total votes 7: ↑7 and ↓0+12
Comments0

Живее всех живых: FreeDOS исполнилось 30 лет! А что там с перспективами?

Reading time4 min
Views7.9K

В 1994 году появилась альтернатива MS-DOS, которая получила название FreeDOS. Это свободная операционная система с текстовым интерфейсом, о которой знают миллионы пользователей ПК. ОС не только не устарела, но и продолжает развиваться — в первую очередь, благодаря энтузиастам. Подробности — под катом.

Читать далее
Total votes 26: ↑24 and ↓2+32
Comments10

Долгий путь микропроцессора на рынок или учимся читать новости про российские литографы

Level of difficultyHard
Reading time10 min
Views51K

Пару дней назад Хабр в списке новостей вывел и эту - В России создали и тестируют собственный литограф . Новость не вызвала у меня особого интереса - кроме того, что на Хабре завелась особая математика, +68 – 24 = +58, и вот почему.

Читать далее
Total votes 290: ↑253 and ↓37+266
Comments319

Загадочное дело о пропавшей точке

Level of difficultyEasy
Reading time6 min
Views19K

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

В то время клиент пользовался в документах шаблонами Microsoft Word с замещающим текстом. Каждый раз, когда сотруднику клиента необходимо было отправить документ по электронной почте или распечатать документ для отправки почтовой службой, он заменял весь замещающий текст документа (имя, фамилия и так далее).

В компании на тот момент было множество шаблонов с устаревшими версиями. В некоторых шаблонах использовались устаревшие условия договоров, в других — старый логотип компании или неправильный шрифт и так далее. Системой стало невозможно управлять, и клиент попросил нас найти решение.
Читать дальше →
Total votes 85: ↑83 and ↓2+105
Comments32

Почта не ходит далее 500 миль – ЧаВо

Reading time9 min
Views14K
История про электронную почту, которая не уходила дальше 500 миль от отправителя, давно стала бородатой классикой. Я думал, что нормальная реакция – просто посмеяться, но нашлось не так мало людей, пожелавших доказать автору, что такого не могло быть, потому что… В конце концов автор не выдержал и выпустил целый FAQ. Итак, встречайте:

ЧаВо по электронной почте, которая не уходила дальше 500 миль


Я получил множество ответов на публикацию «Почта не ходит дальше 500 миль». Мой рассказ был много раз перепечатан и разошёлся гораздо шире, чем я мог надеяться. Большая часть ответов – благодарности за забавную историю и предложения работы (кстати, спасибо за них, и мне бы хотелось, чтобы они продолжали приходить!) Однако немало было и тех, кто выискивал в моём рассказе неточности и противоречия, придираясь к мелочам. Вместо того, чтобы отвечать на каждый такой выпад, я просто собрал наиболее часто встречающиеся вопросы и ответил на все сразу.

1. Это правда было, или история – всего лишь байка?

Это быль. В то время я отвечал за централизованную систему электронной почты в кампусе Университета Северной Каролины в Чапел Хилл (Chapel Hill). Кроме того, я занимался и настройкой электронной почты тех подразделений, которые по каким-то причинам использовали собственные сервера. Главное в контексте этой истории то, что я написал файл конфигурации почтового сервера, sendmail.cf, который использовался большинством серверов кампуса.
Читать дальше →
Total votes 27: ↑26 and ↓1+25
Comments12

Многообразие связных списков

Level of difficultyMedium
Reading time13 min
Views8.8K

Связный список — классическая структура данных, которая позволяет быстрые вставки/удаления, но при этом просаживает другие операции (случайный доступ к элементу). Мы пройдёмся от базовой реализации до других возможных вариаций этой структуры данных и, надеюсь, вместе узнаем что‑то новое. Краем глаза увидим возможные применения связных списков. И в конце, для любителей C++, бонус: использование связного списка для сбора диагностики выделений динамической памяти в вашем коде.

Связать себя со знаниями!
Total votes 25: ↑25 and ↓0+33
Comments7
1
23 ...

Information

Rating
Does not participate
Registered
Activity