Niwe Code
227 subscribers
34 photos
3 videos
1 file
48 links
Канал создан для выброса моих важных мыслей касательно вещей в IT индустрии + некоторого обучения в данной сфере. В своей задаче я ставлю продвижение разных тем в юмористическом стиле.

Связаться: @HxQtl9
Download Telegram
#ItSecurity

Ты — продукт. Но можешь им не быть.

В современном мире каждый лайк, номер телефона и email это потенциальное оружие против тебя.
Нет, это не паранойя. Это — киберреальность.

Хочешь остаться вне поля зрения и не попасть в базу данных рекламщиков, госслужб и "экспертов по безопасности" ЗАО "Бещёки"? Вот базовые принципы:

1. Никогда не указывай реальные данные если в этом нет юридической необходимости.
Форма регистрации? Вводи левые ФИО и дату рождения.
Сайт просит номер телефона? Используй временные или VoIP-сервисы.
Email? Burner-почта (proton.me, tuta.io, temp-mail); В редких случаях gmail.

2. Используй разные почты и логины для различных сервисов.
Сделай несколько уровней:

"публичный" — соцсети, ничего личного.

"полуприватный" — магазины, подписки.

"секретный" — банк, документы, финансы.


3. Не веди чувствительные разговоры в популярных мессенджерах.
Telegram? Да, если с proxy, без номера, через бота.
Но для действительно приватной переписки — SimpleX, Session, Molly, Threema.

4. Никогда не храни пароли в браузере.
Используй менеджер паролей: Bitwarden, KeePassXC, 1Password
И никаких одинаковых паролей, мать его.

5. Используй 3 буквы для просмотра YouTube (загран паспорт) + DNS HTTPS + браузер с защитой от трекеров:
Firefox, Waterfox, Tor — лучшие друзья.
Настрой uBlock Origin, Privacy Badger, CanvasBlocker.
Запрети WebRTC, third-party cookies.

6. Фото, метаданные, EXIF — чисти.
Каждое фото с телефона может содержать GPS, модель устройства и даже серийник.
Перед публикацией стирай метаданные.

7. И главное — не рассказывай слишком много.
Сколько тебе лет, где ты живёшь, где работаешь, кого ебёшь — это всё будет использовано против тебя, если попадёт не в те руки.

Информация — валюта. Чем меньше ты её раздаёшь, тем меньше ты уязвим.
Паранойя? Нет. Гигиена. Цифровая.

(1/2)
3🔥1
Niwe Code
#ItSecurity Ты — продукт. Но можешь им не быть. В современном мире каждый лайк, номер телефона и email это потенциальное оружие против тебя. Нет, это не паранойя. Это — киберреальность. Хочешь остаться вне поля зрения и не попасть в базу данных рекламщиков…
#ItSecurity

Ты — цель. Сделай так, чтобы тебя было трудно поймать.

Цифровая гигиена это только половина. Хочешь настоящей защиты — надо смотреть как ты ведёшь себя в реальной жизни и в соцсетях. Потому что как бы ты ни шифровался, если ты слил себя сам то никто тебе уже не поможет.

1. Никаких геотегов и "я в кафе №123 с друзьями"
Каждый раз когда ты постишь фото с геолокацией — ты оставляешь след. А если ты это делаешь регулярно то становишься предсказуемым.

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

Ты удивишься сколько людей указывают настоящие адреса при заказе футболки с надписью "ЗА ПУТИНА".
Хочешь, чтобы однажды к тебе пришли? Окей, продолжай.

3. Блокируй людей которым не доверяешь.
Даже если это "знакомый друга, у нас общие темы".

Многие утечки начинаются с банального — кто-то просто не туда скинул скрин.
Учи друзей как не палить тебя. Или сам становись единственным админом своего инфополя.

4. Фишинг не про "дураков", а про усталость и автоматизм.

Не кликай по письмам "ваша почта была взломана, нажмите для восстановления".

Не верь звонкам "из банка", даже если они знают твоё имя и другую информацию.

Не пиши паспортные данные никому, ни при каких условиях.

Просто не делай этого. Никогда.

5. Убери настоящие ФИО и телефоны из открытых профилей.
Сделай себе публичный альтер-эго, если надо.

Фриланс? Напиши "Вова П."
Телега? Без привязки к номеру, юзернейм и аватарка — хоть картинка кота с бензопилой.

6. Храни зашифрованные бэкапы
Не в облаке, а локально и под паролем. И пароль в голове, не на стикере.

7. Камера и микрофон — закрывай.
Webcam cover — стоит копейки, спасает нервов на миллионы.


За тобой никто не следит, пока ты никому не нужен.
А потом уже поздно.

Так что: анонимность это не "не быть видимым". Это быть незаметным.
Будь серым кардиналом своего инфополя.

(2/2)
4
#Programming

Задача: уроните компилятор любого языка, используя только один символ из таблицы ASCII, но можно вставлять его бесконечное (неограниченное) количество раз.

Правильный ответ скину позже 👍
Please open Telegram to view this post
VIEW IN TELEGRAM
Догадайтесь, кто потратил 2 дня на создание Flutter приложения, которое не может заработать из-за кривых библиотек? Придётся владельцам iPhone страдать. Извините
🔥3
#Education #Programming

Почему ты не вырос как разработчик?

Смотри, я сам через это прошёл. И мне до сих пор иногда стыдно вспоминать, как я «развивался» первые полтора года. Статьи читал, видосики смотрел, «учил» новые фреймворки. А по факту — топтался на месте.

Вот что реально тормозит, если по-честному:

1. Ты не делаешь по-настоящему сложные вещи
Ты не лезешь туда, где больно. Не копаешь баги в проде, не разбираешь чужие старые проекты, не решаешь реальные проблемы бизнеса. Потому что страшно и не хочется облажаться.

Но именно там, где тебе страшно — начинается рост.

2. Ты слишком много «учишь» и слишком мало практикуешь
Все мы любим читать про новые технологии, но знание ≠ опыт.
Один вечер, проведённый с дебагом проблемы которую ты не понимаешь — даёт больше, чем неделя «курсов».

3. Ты боишься ошибаться публично
Не выкладываешь проекты, не пишешь посты, не ходишь на собесы.
Потому что думаешь: «а вдруг я покажусь тупым?»
Ну, покажешься. И чё? Пару раз обосрался, но зато потом стал умнее.

4. Ты ждёшь момента когда будешь “готов”
А он не наступит. Никто из нас не чувствует себя готовым. Ни джуны, ни мидлы, ни тем более сеньоры.
Весь рост происходит через боль, фейлы и неудобство. Только так.

Хочешь двигаться вперёд — начни делать, а не думать. Не готов? Отлично, именно тогда и надо пробовать.
И да, если кажется что все вокруг умнее, то поздравляю, это значит что ты в правильном окружении.
#Programming

Гид по выбору СУБД для разработчика

Выбор базы данных — это как выбор автомобиля: можно взять практичную Toyot'у, а кому-то и старый Жигуль сойдёт.

1. Oracle Database: корпоративный монстр
🔹 Сильные стороны:
- Обрабатывает экстремальные нагрузки (банки, госструктуры)
- PL/SQL — продвинутый язык для сложной бизнес-логики
- Кластеризация (RAC), партиционирование, материализованные представления

🔹 Слабые стороны:
- Дорогие лицензии (бесплатная XE версия ограничена)
- Сложный в администрировании
- Медленно внедряет modern-фичи

💡 Кому подойдёт:
Корпорации, где критичны надёжность и поддержка.

2. MySQL: народный выбор
🔹 Сильные стороны:
- Лёгкий в настройке, идеален для read-heavy нагрузок
- Широкая поддержка (хостинги, WordPress, PHP)
- Бесплатная Community Edition

🔹 Слабые стороны:
- До версии 8.0 не хватало оконных функций и CTE
- Слабый оптимизатор запросов vs PostgreSQL
- Под контролем Oracle (риски для open-source)

💡Кому подойдёт:
Веб-разработчики и стартапы с простыми проектами.

3. Microsoft SQL Server: король Windows-стека
🔹 Сильные стороны:
- Глубокая интеграция с .NET, Azure и Power BI
- T-SQL с удобными расширениями
- Встроенные BI-инструменты (SSIS, SSAS)

🔹 Слабые стороны:
- Дорогое лицензирование
- Не популярен вне экосистемы Microsoft
- Linux-версия сыровата

💡Кому подойдёт:
Команды, работающие с Windows/.NET и аналитикой.

4. PostgreSQL: open-source Tesla *(бонус для ценителей)*
🔹 Сильные стороны:
- Самый богатый SQL (CTE, JSONB, оконные функции)
- Расширяемость: свои типы данных, функции на Python/JS
- Активное сообщество и быстрая реализация новых фич

🔹 Слабые стороны:
- Требует больше ресурсов, чем MySQL
- Нет встроенной кластеризации уровня Oracle RAC

💡Кому подойдёт:
Разработчики, ценящие баланс возможностей и свободы.


Что выбрать?
- Корпоративный проект с гарантиями? → Oracle
- Веб-приложение или стартап? → MySQL
- Работаешь с .NET/Azure? → SQL Server
- Хочешь open-source с максимумом возможностей? → PostgreSQL

Личное мнение: PostgreSQL — лучший баланс для большинства задач. Но если нужны специфичные фичи (например, Oracle RAC), то выбор очевиден.
Please open Telegram to view this post
VIEW IN TELEGRAM
3
#Backend #Frontend

Как я решил поработать фронтендером и потерял веру в жизнь

Я — backend'ер, ну тот самый который нахуй никому не нужен. Я знаю базы, очереди, авторизации, микросервисы, блядь почти всё.
Я запускаю проекты которые делают деньги. Я не боюсь 5xx ошибок. Я даже почти умею дебажить в проде не трогая пользователей.

Но однажды я подумал:
«Хм. А сделаю-ка я сам себе фронт. Что там сложного? Кнопки да формы»

Я чуть не умер.

Первое — CSS.
КАК ЭТО РАБОТАЕТ, СУКА?
– «margin: 0 auto» — ничего не по центру.
– «flex» — всё куда-то уехало.
– «grid» — вообще магия из “Гарри Поттера”.
– 10 минут ковырял кнопку, а оказалось, что на ней стоял position: absolute; top: -9999px.

Второе — шрифты, отступы, цвета.
– Я выбрал зелёный. Мне сказали: «фу, кислотно».
– Поставил серый. Ответ: «глаз режет».
– В итоге я просто открыл Tailwind и ткал как бабка в темноте.

Третье — React.
– Написал компонент. Забыл key. Всё ломается.
– Сделал форму. State не обновляется.
– Добавил useEffect — начались бесконечные рендеры.
– И ещё 300 ошибок в консоли из которых половина от ESLint, вторая от меня, а третья просто потому что мне не повезло.

И после этого мне сказали: «а ты сделай адаптив.....»
Я чуть инфаркт не схватил и хотелось человека засунуть в коллайдер. Вкратце это когда твой верстальный кошмар растягивается ещё и на мобилку.
В итоге у меня на телефоне всё было вверх ногами, а кнопка «Оформить заказ» поменяла цвет и сдвинулась по косинусу на 97889°

Frontend — это не просто "перетаскивание кнопок". Это отдельная ветка боли.
Но знаете что? Я вернулся в бэк.
Обнял свой Docker, Java, базы и консоль. Заплакал. И пообещал себе: никогда больше не писать CSS.
🔥4
#Education

Общая теория программирования

Забудь языки, фреймворки. Забудь даже, что ты пишешь код.

Программирование — это способ взаимодействия с реальностью через абстракцию и контроль. Это не про Python или React, а про способность создавать модели мира которые можно автоматизировать.

Что такое программа?

Программа — это структурированная последовательность решений, оформленные в правилах, которые понятны данной машине (ЭВМ).
Программирование — это формализация мышления, которую можно воспроизвести. Т.е. ты не просто говоришь компьютеру, что делать, а переводишь человеческие желания в логику и структуру, отбрасывая весь остальной хаос.
И чем точнее ты умеешь это делать, тем круче ты как разработчик.

Программа == Модель поведения системы.
И каждый блок — это не просто строка кода, это решение принятое тобой на основе текущего знания о мире.

Функция — это договор: "если ты дашь мне A, я верну B".
Массив — это компромисс между скоростью и структурой.
Архитектура — это социальная инженерия внутри машины.


Почему это важно?
Потому что программист — это не "тот, кто кодит".
Это тот кто понимает: как работает реальность и как её можно симулировать.
Ты создаёшь логические модели поведения систем. И если ошибся — рушится всё.

Общая теория программирования — это путь от хаоса к системному мышлению.
Когда ты не просто пишешь код, а создаёшь модель в которой код просто инструмент.
И это, по сути, та же теория управления только на языке команд.

Если мир — это система, то программисты — это архитекторы реальности.
Мы не пишем "приложения". Мы переписываем правила того, как взаимодействуют сущности.
От запросов к API — до твоего мышления.

И да, чем выше твой уровень — тем меньше ты "кодишь" и тем больше ты конструируешь мысль, которую потом выражают другие.
3
#Programming

Как IT плавит тебе мозг

Знаешь, в начале всё кажется простым: сидишь, учишь Python, запускаешь какой-то hello world, мечтаешь о зарплате в российских долларах и ноутбуке с наклейками яблока и всех технологий.
А потом реальность прилетает в ебло с ноги.

1. Ты вечно забитый инфой.
В голове одновременно крутится:

🔥 где на проде у нас баг,

🔥 какой сервис отвалился,

🔥 как починить чью-то убитую архитектуру,

🔥 и как не забыть завтра сделать ревью на ревью ревью.


И мозг в какой-то момент начинает сам выключаться. Просто в никуда.

2. Нет понятия "понял и успокоился".
Сегодня ты выучил новую библиотеку.
Завтра выходит новая версия и ты опять тупишь как в первый раз.
Прошёл курс? Забудь. Он уже устарел, пока ты дополз до финального проекта.

3. Никаких планов. Никогда.
Ты можешь запланировать рабочий день, но реальность всегда с тобой поспорит:

🤩 баги,

🤩 падения продов,

🤩 задачи, которые резко "надо к утру".
И весь твой красивый план идёт в жопу быстрее, чем npm тянет зависимости.

4. Все хотят чтобы ты был магом.
"Почему не работает?"
"Когда будет готово?"
"Можно за два дня вместо месяца?"
А ты сидишь и понимаешь, что программирование — это не кодить.
Это бесконечно чинить чужие мечты о халявной автоматизации.

5. Сам себя сжираешь.
Потому что хочешь сделать лучше.
Потому что бесит, когда криво.
Потому что даже ночью в голове проигрывается тот ебучий if-else, который ты не добил в коде.


IT — это не про код.
IT — это про жизнь на разогретых оборотах, где любой косяк — твоя личная битва.
И если ты ещё не сгорел — либо ты новичок, либо ты уже бездушная машина на пиве и панике.
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Niwe Code
#Programming Задача: уроните компилятор любого языка, используя только один символ из таблицы ASCII, но можно вставлять его бесконечное (неограниченное) количество раз. Правильный ответ скину позже 👍
Ответ: символ '('. Да, именно скобочка ломает компилятор любого ЯП, так как защита от леворекурсивного парсера зачастую работает как инкапсуляция в Python, то ошибка имеет место быть.
class Squire() {
static int squire(int num) {
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
return num * num;
}
}
#Education

Сборщик мусора: невидимый герой твоего кода

Когда ты запускаешь свой код — особенно на Java, Python, C# или Go, то ты возможно не знаешь, но внутри уже кто-то убирается за тобой.
Этот кто-то — сборщик мусора (Garbage Collector, GC). Он спасает тебя от утечек памяти и крашей пока ты живёшь в иллюзии, что память управляется сама собой.

Что он делает?

Он следит за тем какие объекты в оперативной памяти больше не используются и автоматически их удаляет чтобы освободить место.

Ты создал переменную tempUser = User("name") — отлично.
Но если потом нигде больше tempUser не используется и на неё не ссылаются — объект становится "мусором".
GC говорит: «ну всё, можно выносить».

Как он определяет, что объект "мёртв"?

Через анализ достижимости:

У каждого объекта есть ссылки. Если на объект никто больше не ссылается, он считается ненужным.

Сборщик обходит дерево ссылок от "корня" (например, глобальных переменных и стека), и помечает всё, что доступно.
Остальные — мусор.

Типы сборщиков мусора

1. Mark and Sweep (отметь и убери)

1. Обходит все доступные объекты и помечает их.

2. Очищает всё, что не помечено.


2. Stop-the-World

Останавливает всю программу чтобы провести уборку.
Эффективно, но больно: лаги, просадки, зависания.

3. Copying GC (переносной)

Делит память на две части. Всё живое переносит во вторую, остальное удаляет.
Быстрее, но жрёт больше памяти.

4. Generational GC (поколения)

Делит память на «молодые» (часто умирают) и «старые» (живут дольше).
Молодых чистит чаще. Очень эффективно. Например, в JVM.

5. Concurrent GC (фоновая чистка)

Не стопает программу, чистит фоном.
Используется в Go, новых версиях Java. Баланс между скоростью и плавностью.


GC ≠ волшебная палочка

Ты всё равно можешь накосячить:

1. Утечка через замыкания и слушатели событий

2. Глобальные переменные, которые “держат” мусор

3. Ошибки в логике, где живой объект “висит” зря

GC не решает всё. Он автоматизирует, но не прощает тупость.

Что, если GC нет?

В C, C++ — ты сам следишь за памятью:

malloc/free
new/delete

И если забыл очистить — утечка.
Очистил дважды — segfault.
Ошибся с адресом — undefined behavior и адский дебаг.

Освобождай ресурсы (файлы, сокеты, соединения) вручную, даже если GC всё "должен сам". 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#Programming #DevOPS

CI/CD — твой личный автомойщик, только для кода


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

Что такое CI/CD?

👍 CI (Continuous Integration) — каждый коммит, каждый пуш, каждый PR — сразу прогоняется через тесты, линтеры и всё остальное. Проверка на вшивость ещё до слияния.

👍 CD (Continuous Delivery / Deployment) — код, прошедший все круги ада, автоматически катится на сервер/сайт/облако. И всё — без твоих дрожащих ручек.

Представь, что ты больше никогда не зальёшь баг в прод вручную. Красота? Красота.

А где это живёт?

На GitHub Actions.
GitHub даёт тебе маленькую виртуалку в облаке, которая делает то что ты скажешь.
Хочешь билдить? Будет билдить.
Хочешь деплоить? Будет деплоить.
Хочешь, чтобы она гоняла тесты по ночам? Она это будет делать, а ты спи спокойно.

Простой CI на Python:
name: Test and Build

on: [push, pull_request]

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: 3.11
- name: Install deps
run: pip install -r requirements.txt
- name: Run tests
run: pytest

Каждый пуш → тесты в облаке. Если сломалось — GitHub тебе даст по еблу.

А как деплоить?

Просто. Например, деплой на сервер по SSH:
- name: Deploy to server
run: |
scp -r ./build user@yourserver:/var/www/project
ssh user@yourserver "systemctl restart your-service"
И всё. Код на сервере, сервис рестартнулся, ты красавчик.

😊 А зачем мне это?

Потому что тестить на проде — это преступление.

Потому что у всех бывает: забыл протестить, слил говно, уволили.

Потому что GitHub Actions бесплатен на старте. Бесплатно = святое.

Потому что автоматизация — это кайф. Ты сидишь, а за тебя всё делают. Почти как рабство, только наоборот.


Тебя всё ещё нет на CI/CD?

Поздравляю. Ты в зоне риска. Один кривой коммит — и ты на проде в 3 часа ночи, с кофейной трясучкой и кучей багов.

Настрой себе CI/CD. Один .yml файл, и ты уже наполовину DevOps.
Please open Telegram to view this post
VIEW IN TELEGRAM
#Education

ORM — это магия

Когда ты только начинаешь писать бекенд, ты думаешь: «Да я ща SQL бахну, нормас будет». А потом тебе кидают в лицо ORM и ты такой: что за проклятый интерфейс между мной и базой?!

Что такое ORM вообще?

ORM (Object-Relational Mapping) — это способ взаимодействия с базой данных через объектно-ориентированный код. Не надо больше писать кучу SQL-запросов — ORM сам сгенерит всё что нужно. Ты работаешь с сущностями как с объектами, а не как с табличками.

Пример для тех, кто только встал после ночного фикса прода:
# SQL way
SELECT * FROM users WHERE name = 'Иван';

# ORM way (Django, например)
User.objects.filter(name='Иван')

Красиво? Да. Опасно? Ещё как.

Плюсы:

Быстро и удобно — меньше кода, меньше боли.

Единый подход: не надо писать SQL, всё делается на языке приложения.

Автоматические миграции и управление схемой базы.


Минусы:

Производительность может страдать — ты не всегда понимаешь, что под капотом.

Иногда ORM — это «Overkill Relational Monster»: слишком громоздко.


Для сложных запросов всё равно нужен SQL, или ты устроишь себе локальный ад из .select_related() и .prefetch_related().

Программисты, которые пишут на чистом SQL, смотрят на ORM как на демоническое вмешательство в святые JOIN'ы.
А бекендеры с опытом 2+ лет просто: «ORM — как бывшая: удобно, пока не начались странности».
2
RISC и CISC: два кита процессоров

В мире процессоров существует два принципиально разных подхода к архитектуре команд: RISC (Reduced Instruction Set Computing) и CISC (Complex Instruction Set Computing).

Основная идея

RISC — архитектура с умеренным и простым набором команд. Каждая команда выполняет простое действие и обычно укладывается в один такт процессора.

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

Предположим, нам нужно сложить два числа из памяти и сохранить результат обратно:

CISC (например под x86 архитектуру):

ADD [RAX], RBX ; сразу добавляет значение из RBX к тому, что лежит по адресу RAX


RISC (например под ARM архитектуру):

LDR R1, [R0]   ; загружаем значение из памяти в R1
ADD R1, R1, R2 ; складываем значения в регистрах
STR R1, [R0] ; сохраняем обратно в память

Заметно, что в RISC каждое действие вынесено в отдельную инструкцию.

Что используется сейчас?

Большинство современных архитектур — гибриды. Например:

x86-64 (Intel/AMD) — формально CISC, но внутри выполняется микро-декодинг в RISC-подобные микрокоманды.

ARM (включая Apple Silicon) — классический RISC с мощной оптимизацией.

Выбор между RISC и CISC — это компромисс между простотой, мощностью и совместимостью. RISC часто проще и эффективнее в мобильных и встраиваемых системах. CISC даёт гибкость и обратную совместимость на десктопах и серверах.
2
#Programming #ITLife #Other

Что в сумке у программиста?

Ты программист? Значит твоя сумка это не просто мешок с железом, а храм мобильной девопс-мощи. Что там должно лежать чтобы быть готовым ко всему: от внезапного митинга в кофейне до спасения сервера на краю гибели?

1. Ноутбук (или боевой ультрабук/MacBook) Рабочая лошадка, твоя консольная катана. Без него ты просто человек с хорошей осанкой. Желательно на Linux или dual-boot с Windows и FreeBSD, чтобы можно было не только кодить, но и чинить прод в 4 часа ночи.

2. Power Bank (и желательно два). В мире где розетки редкий артефакт, power bank — это артефакт уровня S++ класса. Один на телефон, другой на ноут, потому что зум коллы не ждут.

3. USB-hub. Твой порт в мир legacy-оборудования. Особенно если у тебя модный макбук с двумя Type-C. Сплиттер, кард-ридер, адаптер — пусть будет всё.

4. Переходники всех видов

USB-C USB-A

HDMI VGA (да-да, в некоторых местах проекторы остались из эпохи динозавров)

Ethernet USB

DisplayPort HDMI
5. Несколько флешек. Минимум две: одна для файлов, проектов и прочего говна, другая — для переноски "вот этих трёх скриптов, только никому не показывай". Лучше, если они зашифрованы и подписаны твоим GPG-ключом.

6. Внешний SSD с ISO образами, утилитами, бэкапами, фотками кота и Minecraft-сервером. Бывает момент, когда именно он спасает день.

7. Умная отвёртка/мультитул. Разобрать ноутбук, закрутить стойку в серверной или просто открыть бутылку пива после релиза.

8. Зарядки и кабели. Как минимум по два каждого типа: Type-C, microUSB, Lightning — и кабель для зарядки ноутбука, конечно. Никаких "а можно у тебя провод взять?".

9. Wi-Fi адаптер. Потому что встроенный в Linux сломался. Опять. А заказчик уже на зуме.

10. Блокнот и ручка. Иногда написать от руки — это тоже dev-магия. Особенно, если внезапно планируешь архитектуру микросервисов на салфетке в баре.

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

12. Удлинитель и тройник. Программист без розетки — как код без комментов: вроде работает, но страшно.

Уважающий себя программист — это не просто чувак с ноутбуком. Это настоящий выездной DevOps-юнит с баг-фиксом в одной руке и ISO-шниками в другой. Твоя сумка — твой арсенал. И если ты к этому готов, то никакой прод тебя не испугает.
3
#Education #DevOPS

RESTful API: что это за тварь и зачем она нужна?

Ты пишешь бэк и хочешь чтобы с ним удобно общались вротендеры фронты, мобилки, и даже чайник с Wi-Fi? Привет, RESTful API.

Что такое REST? Representational State Transfer — архитектурный стиль взаимодействия между клиентом и сервером через протокол HTTP. Никакой магии — только принципы.

Ключевые моменты REST:

1. Клиент-серверная архитектура. Клиент не знает как устроен сервер. И слава двачу.

2. Отсутствие состояния (stateless). Каждый запрос сам по себе, никакой сессии. Если хочешь сессии — держи JWT-токены.

3. Унифицированный интерфейс. Одни и те же методы для всех ресурсов: GET, POST, PUT, DELETE.

4. Кеширование. Ответы можно кешировать. Серверу меньше работы — тебе больше счастья.

5. Слои. Можно ставить прокси, кеши и другие радости между клиентом и сервером.

Примерчик: Допустим, у нас есть ресурс — users.

GET /users — получить список юзеров.

POST /users — создать нового юзера.

GET /users/123 — получить инфу по юзеру с id 123.

PUT /users/123 — обновить данные юзера.

DELETE /users/123 — удалить юзера.



Фишки REST:

1. Работает на обычном HTTP — тебе не нужен специальный протокол.

2. Легко тестировать: Postman, curl, даже браузер в помощь.

3. Масштабируется и понятен новичкам.

Минусы:

1. Иногда REST'а слишком много. Когда API становится как Netflix — 200 endpoints и 300 параметров фильтрации — пора подумать о GraphQL.

2. Не для real-time задач. Для этого есть WebSocket.

RESTful API — это как хорошая отвертка: универсально, удобно, понятно. Если ты делаешь сервис и хочешь чтобы другие легко с ним работали — REST тебе в помощь.
Только пожалуйста, делайте архитекту нормально, а не так чтобы всё хранилось в одном JSON'е, иначе другие разработчики будут желать вашим близким здоровья и счастья 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
#DevOPS #Education

Docker изнутри: как запускается магия контейнеров

Ты пишешь docker run nginx и всё как бы работает. Но за этой командой скрыт целый механический оркестр из системных вызовов, демонов и Linux-чародейства. Погнали разбирать по полочкам.

1. Контейнер — это не виртуалка.
Никаких виртуальных машин, BIOS и танцев с ISO-шаманом. Контейнер — просто изолированный процесс. Ядро общее, но ты в своей песочнице. Типа общага с личной комнатой, но общей кухней.

2. Docker Engine: тройка в упряжке.

dockerd — демон(Daemon), главный шеф всех контейнеров

CLI (docker) — тыкаешь команды

REST API — всё общение между ними

Написал docker run nginx → твой терминал шлёт демону запрос → демон орёт: "Тащите образ!" → запускается контейнер → появляется nginx → магия.

3. Изоляция через namespaces.
Docker делает вид что каждый контейнер — отдельный мир:

свои процессы
своя сеть
своя файловая система

даже свой hostname, например, i-am-root-but-only-here.local

Выглядит как отдельная ОС. А по факту? Просто изолированный шальной процесс.

4. Cgroups — следим, чтоб не обожрался.
Ты программист, ты знаешь как легко аппка может жрать 20 ГБ RAM ради вывода “Hello world”. Cgroups не даст: хочешь 512 МБ — сиди на диете. CPU? Только половинку. Хочешь больше — иди в прод.

5. Union FS — многослойная кулинария.
Представь бургер: снизу булка (Ubuntu), сверху сыр (nginx), а потом твоя кастомная начинка. Docker собирает образы слоями. Всё, что не меняется — read-only, всё что ты ломаешь — в верхнем write-слое.

6. Запускаем через runc.
Когда пора стартовать, dockerd вызывает runc, который делает clone(), chroot() и другие тёмные ритуалы. А процесс уже не видит остальных — он в изоляции. Одинокий, но свободный.

7. Docker Images.
Образ = набор слоёв, каждый из которых — изменение. Установил apt update? Новый слой. Добавил .env? Ещё слой.
Образы можно хранить у себя или пушить на Docker Hub, типа Telegram, но только для системных админов.

8. Docker-сети.
Контейнеры не просто сидят, они умеют болтать: через bridge, host, overlay.
Нужно подключить Nginx к backend'у? Создай сеть.
Хочешь поиграть в sysadmin-ад? Настрой overlay и Swarm.

9. Безопасность: потому что ты не root
Docker прикручивает:

seccomp — список “не трогай это”

AppArmor/SELinux — чтобы контейнеры не начали читать твои секретные PDF

user namespaces — контейнер думает, что он root, но на деле — мелкий пользователь без прав


10. Что делает docker run nginx?

1. CLI: «Запускаем nginx!»
2. Демон: «Ща поищу образ...»
3. Создаётся слой для записи
4. Изоляция через namespaces
5. Cgroups — не обжирайся!
6. runc: "Ща всё сделаю"
7. Подключение к сети
8. Старт процесса

Контейнер живёт, пока жив запущенный процесс. Умер процесс? RIP контейнер.

11. Это не магия. Это Linux.
Всё работает на:

namespaces
cgroups
overlayfs

chroot, clone, seccomp,
Docker просто удобно это оборачивает.

Ты не волшебник — ты просто пользуйся Docker. Но если хочешь чтобы контейнеры не ссали в твой прод, понимай как они работают.
#Education #OS

Если ты думал, что процессор это просто камень под кулером то перестань так делать. Под этой крышкой прячется архитектура — не как у зданий, а как у цифровых богов. Разбираемся, кто и как рулит вычислениями.

1. x86 / x86-64 (aka архитектура которой пора на пенсию, но она держится)

Появилась в 1978 году с Intel 8086. С тех пор прошла через DOS, Windows 95, Crysis и дожила до ChatGPT.

Кто рулит: Intel и AMD

Где используется: ПК, ноуты, сервера, пекарни на Unreal Engine

Плюсы: Мощная, универсальная, поддерживает тонны legacy-программ

Минусы: Большая, жрущая и дико сложная — как бабушкин шкаф


Архитектура настолько древняя, что в ней до сих пор живёт режим совместимости с 16-битным кодом.

2. ARM (или как твой телефон выживает без зарядки хотя бы до обеда)

Родилась в 1983 году в Великобритании (Acorn Computers). Тогда думали — просто дешёвый процессор для школьных ПК. А теперь она везде.

Где используется: смартфоны, планшеты, Raspberry Pi, Apple M-серии

Кто рулит: ARM Holdings лицензирует, а Apple, Qualcomm, и другие внедряют

Плюсы: Энергоэффективна, дешёвая, масштабируемая

Минусы: Требует портирования ПО, ограничена в high-end серверных задачах (пока)
В ARM нет инструкции "делить", потому что "а зачем". Потом правда, добавили.

3. RISC-V (когда хочется всё и бесплатно)

Появилась в 2010-х в Университете Калифорнии в Беркли. Задумана как полностью открытая RISC-архитектура.

Где используется: исследовательские проекты, Китай, стартапы, IoT

Плюсы: Бесплатная, модульная, кастомная под что угодно

Минусы: Сырая экосистема, нехватка поддержки
Уже есть микроконтроллеры, полностью сделанные на RISC-V и открытых инструментах. Stallman одобряет.

4. MIPS (был легендой, теперь спит в шкафу истории)

С 1981 года один из пионеров RISC. Использовался в PlayStation, роутерах, принтерах и холодильниках.

Где используется: встраиваемые системы, маршрутизаторы, китайские дешёвые ноуты

Плюсы: Простота, стабильность

Минусы: Умер. Почти.
Его пытались реанимировать как open source, но никто не пришёл на похороны.

5. Power/PowerPC (когда IBM ещё что-то значила в железе)

Совместная разработка IBM, Apple и Motorola в 1990-х. Была основой первых Mac и Xbox 360.

Где используется: Суперкомпьютеры, серверы

Плюсы: Мощная, стабильная, масштабируемая

Минусы: Сложность, ограниченная поддержка
Некоторые современные процессоры для спутников всё ещё используют PowerPC, потому что "работает и хрен с ним".

6. SPARC (забудь, если не работаешь в Oracle или NASA)

Разработана Sun Microsystems в 1987. Была крута в серверах и научных вычислениях.

Где используется: Государственные суперкомпьютеры, серверы Oracle

Плюсы: Надёжная, масштабируемая

Минусы: Практически мертва, Oracle всё закопало
SPARC до сих пор работает в некоторых ядерных центрах. Там просто не рискуют менять что-либо вообще.


Что общего между ними?

Все исполняют машинный код

Все оперируют с регистрами, памятью, ALU и прочей схемотехникой

Все создают проблемы разработчикам под разные платформы


По итогу:

Хочешь удобства и мощи — x86/x64;
Хочешь энергоэффективности и мобильности — ARM;
Хочешь свободы и DIY — RISC-V;
Хочешь заниматься некромантией — PowerPC или SPARC;

Архитектура — это не просто выбор, это мировоззрение.
#OS #Linux

Unix-подобные системы: легенды, которые живы

Ты открываешь терминал, пишешь ls и магия работает. А ведь под этой командой целая философия, которая зародилась в те времена, когда Билл Гейтс ещё штанишки застёгивал. Unix — дед, которого не смогли похоронить. Даже наоборот, из него выросла куча здоровых, дерзких и иногда токсичных детей.

Что вообще значит "Unix-подобная"?

Это не "почти Unix", это "почти святая троица":

всё — файл

всё, что можно, делаем через терминал

ничего лишнего, пиши свои костыли сам


Главные ветки Unix-еволюции:

1. GNU/Linux — буйный сын, который ушёл в рейв

Ядро — Linux, оболочка — GNU

Массово на серверах, в роутерах, у анонимусов и задротов

"Linux — это не Unix", говорили бородатые деды, но мир решил иначе

Дистрибутивов столько, что если пересчитать — можно вызвать дьявола

2. BSD-семейка — элита в очках

FreeBSD, OpenBSD, NetBSD, DragonFlyBSD

Академичные, стабильные и скучные — как профессор, который ещё и код ревьюит

Используются в Netflix, Juniper, даже в PlayStation 4

FreeBSD — стабильность, OpenBSD — безопасность, NetBSD — "запустится даже на кофемашине"

MacOS частично построена на FreeBSD. Так что каждый раз, когда ты тыкаешь по Finder — где-то в душе рыдает бородатый Unix-дед.

3. MacOs — гламурный фрейм Unix-моды

Под капотом ядро XNU + Darwin + POSIX-совместимость

Выглядит как Instagram*, ведёт себя как FreeBSD

Разработчики на Mac работают в терминале, чтобы казаться серьёзнее так как не знают, что у них Unix. Но у них brew работает и хер с ними.

4. Solaris/illumos — древняя религия

От Sun Microsystems, ныне Oracle

ZFS, DTrace, контейнеры до Docker'а — всё это появилось здесь

Сейчас в полураспаде, но в академии до сих пор на алтарях

ZFS настолько крут, что его боятся даже другие файловые системы.

5. AIX, HP-UX, SCO — системные динозавры

Живут в дата-центрах, которые никому нельзя показывать

Их админы старше всех твоих IDE вместе взятых

С ними всё как в старой притче: "работает — не трогай"

SCO когда-то судился с IBM за Linux. Проиграл. Ушёл в небытие.

Фишки всех Unix-подобных:

man(мануал) — твой лучший друг, если ты не гуглишь

/etc/shadow — даже звучит как магия

Файлы конфигураций могут быть 500 строк и все важные

Ничего не спрашивают — просто делают. Или умирают с Segfault.

А что ещё?

Терминал — царь. Всё остальное — его вассалы.

Pipes (|) — склеивают мир, как суперклей для текстовых потоков

grep + awk + sed — секретные заклинания UNIX-мага

Кто не читал "The Art of Unix Programming" — тот не шарит


Unix — это не просто ОС, это способ жить:
пиши сам, читай man, не доверяй GUI и никогда, слышишь, никогда не редактируй /etc/fstab в пьяном виде.

*Instagram запрещен на территории РФ.
#Programming #Backend

Веб-серверы


Ты заходишь на сайт и видишь котиков. А кто тебе этих котиков подаёт? Правильно — веб-сервер. Без него твой браузер просто смотрит в пустоту, как студент на экзамене без шпоры.

Очень нужная духота:
1989 — Тим Бернерс-Ли в CERN придумывает WWW и первый веб-сервер CERN httpd. Работал только на NeXT и с HTML 1.0. Представь: никакого CSS, ни JS, просто текст. Красота!

1995 — появляется Apache. Почему такое название? Потому что это был «a patchy server» — сервак на костылях и патчах.

2000-е — Nginx от Игоря Сысоева становится спасением от перегрева серверов на больших нагрузках.

Сегодня — всё крутится на Nginx, Apache, LiteSpeed, Caddy и даже Node.js, если ты вfrontend-инженер с амбициями.

Главные игроки:
1. Apache
– дед,
– умеет всё: CGI, .htaccess, виртуальные хосты, логирование на уровне NASA
– но жрёт память как браузер с 30 вкладками и 3 YouTube

2. Nginx

– лёгкий, быстрый как курьер на самокате
– не жрёт ресурсы даже когда к тебе ломится 100к пользователей
– идеален как реверс-прокси, балансировщик, статика-фетчер и девопс-друг

3. Caddy

– встроенный HTTPS по умолчанию (даже если ты не просил)
– конфиг простой, как инструкция к дошираку
– но кастомизация — боль

4. LiteSpeed

– платный, но эффективный
– любят хостинг-провайдеры за производительность
– идеален для Wordpress и других клонов php-адской хуйни

5. Node.js + Express

– не веб-сервер в чистом виде, но часто используется как таковой
– любим JS-девами: «Зачем использовать проверенные решения, если можно написать свой велосипед на async/await»

Как это работает:

• Браузер отправляет HTTP-запрос

• Веб-сервер его принимает

• И либо отдаёт статику (HTML, CSS, JS), либо прокидывает дальше в backend (PHP, Python, C#)

• Ответ обратно летит в браузер

Если упрощённо: веб-сервер это официант, который несёт блюдо с кухни (бэкенда) к клиенту (браузеру). Чем лучше официант — тем быстрее еда и меньше жалоб в гугл-картах.

Зачем знать про веб-серверы?

Потому что если ты не понимаешь что именно делает proxy_pass, RewriteRule или Listen 443 ssl, то ты будешь чинить сайт так же, как бабушка чинит телевизор — крестясь и брызгая святой водой.

Веб-сервер — это основа любого сайта. Apache, Nginx и их братья не просто софт, а солдаты невидимого фронта, которые каждый день делают возможным наш клик по "открыть кота в новой вкладке".