Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam

Пикабу Игры +1000 бесплатных онлайн игр

Отель Эмили. Пасьянс

Карточные, Казуальные, Головоломки

Играть
Управляйте маятником, чтобы построить самую высокую (и устойчивую) башню из падающих сверху постов. Следите за временем на каждый бросок по полоске справа: если она закончится, пост упадет мимо башни.

Башня

Аркады, Строительство, На ловкость

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

Грибные блоки

Головоломки, Расслабляющая, Пазлы

Играть
Скайдом - пожалуй, самая красочная и интересная головоломка с действительно уникальными режимами игры!

Скайдом

Три в ряд, Головоломки, Казуальные

Играть
Классический арканоид для любителей ретро-игр. Защитите космический корабль с Печенькой (и не только) на борту, проходя уровни в арканоиде.

Арканоид Пикабу

Арканоид, Аркады, Веселая

Играть

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • alekseyJHL alekseyJHL 6 постов
  • XpyMy XpyMy 1 пост
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Database

556 постов сначала свежее
99
sephirioth
7 месяцев назад

Ответ на пост «Как один программист случайно уничтожил компанию одной строкой кода»⁠⁠3

Эх, воспоминание разблокировано.

Работал я тогда инженером в одном региональном банке. Часть софта была от внешних вендоров, и они же поставляли обновления. Выглядело это так: на неделе тебе присылают само обновление и мануал с его установкой. А так-как банк - контора важная, шатать его системы можно только тогда когда они никому нафиг не нужны. Самое удобное время это 2-4 часа ночи в воскресенье. Если что идет не так всегда есть инженер вендора которому можно позвонить.

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

Запускаю локальный бэкап, потом его проверку, линуксовая консоль плюется радостными строчками "усе окэй". И поехали....

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

Настал час, "звонок другу". Сонный инженер на другом конце необъятной начинает давать советы и слать скрипты (помним про то что система не собственной разработки, шибко шашкой не помашешь).

И в одном из скриптов так же как в посте есть rm -rf тут был путь/*. Скрипт пошел...и мой сонный мозг понимает что удаляющиеся файлы находятся совсем не там где хотелось бы.

Пару мгновений на протупиться...прерывание скрипта. Сервак зачищен от корня процентов на 60... пользовательских директорий со всеми временными бэкапами как не бывало.

Поднятые админы банка накатывают бэкап из ленты и получаем голый чистый сервак. Профили пользаков не восстанавливаются. Ленточный бэкап в помойку.

Дальше были звонки из серии "Наташа мы там все уронили" начальству. Я молодой и зеленый стоя в курилке думал "Нууу на время поиска работы денег должно хватить". Потом восстановление с нуля всего утраченного в ручном режиме. Как итог в ПОНЕДЕЛЬНИК в 14 00 я вышел из офиса, начальник отправил отсыпаться.

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

Показать полностью
IT Программирование Gitlab Git База данных Программист IT юмор Разработка Текст Ответ на пост
16
1045
AlexeyPerfilev
AlexeyPerfilev
7 месяцев назад
Серия Очумительные истории

Как один программист случайно уничтожил компанию одной строкой кода⁠⁠3

Привет, Пикабу! Сегодня я расскажу вам историю, от которой у любого программиста волосы встанут дыбом. Это история о том, как одна маленькая ошибка привела к гигантским последствиям.

  1. Дело было в 2016 году. Главный герой - разработчик по имени Марвин (имя изменено), работавший в хостинг-провайдере Gitlab.

  2. Gitlab - это платформа для хранения исходного кода проектов, которой пользуются миллионы разработчиков по всему миру.

  3. У Gitlab случилась небольшая проблема с производительностью базы данных. Марвин решил её починить.

  4. Он собирался удалить временную базу данных на одном из серверов. Команда была простая: rm -rf /var/lib/postgresql/9.6/pg_xlog/*

  5. Но случилось страшное - Марвин случайно запустил эту команду НЕ на том сервере!

  6. Результат? 300 ГБ данных пользовательских проектов были моментально и безвозвратно удалены.

  7. Осознав ошибку, Марвин немедленно остановил процесс. Но было уже поздно - данные исчезли.

  8. Команда Gitlab бросилась восстанавливать данные из резервных копий. И тут выяснилось, что система резервного копирования... не работала последние 6 месяцев!

  9. 18 часов непрерывной работы, паники и стресса. Инженеры Gitlab пытались спасти то, что осталось.

  10. В итоге им удалось восстановить большую часть данных, но около 5000 проектов были потеряны навсегда.

  11. Gitlab проявила удивительную прозрачность в этой ситуации. Они вели прямую трансляцию процесса восстановления и открыто рассказали о случившемся.

  12. Несмотря на ошибку, Марвина не уволили. Компания признала, что проблема была в системе, а не в конкретном человеке.

Мораль истории:

  1. Всегда дважды (а лучше трижды) проверяйте, на каком сервере выполняете команды.

  2. Регулярно проверяйте работу системы резервного копирования.

  3. Ошибки случаются со всеми, даже с профессионалами.

  4. Прозрачность и честность могут спасти репутацию даже в самой сложной ситуации.

P.S. После этого случая Gitlab значительно улучшила свои системы безопасности и резервного копирования. А Марвин, говорят, до сих пор трижды проверяет каждую команду перед выполнением.

А у вас были случаи, когда маленькая ошибка приводила к большим последствиям? Расскажите в комментариях!

UPD уточнение: #comment_324862867

Рабочий бэкап сделанный за 6 часов

Они не теряли 5000 проектов навсегда, чё за выдуманная хрень, они потеряли изменения, комменты и тд сделанные в 5000 проектах в течение этих 6 часов

On January 31st 2017, we experienced a major service outage for one of our products, the online service GitLab.com. The outage was caused by an accidental removal of data from our primary database server.

This incident caused the GitLab.com service to be unavailable for many hours. We also lost some production data that we were eventually unable to recover. Specifically, we lost modifications to database data such as projects, comments, user accounts, issues and snippets, that took place between 17:20 and 00:00 UTC on January 31. Our best estimate is that it affected roughly 5,000 projects, 5,000 comments and 700 new user accounts.

https://habr.com/ru/companies/slurm/articles/321074/
https://about.gitlab.com/blog/2017/02/10/postmortem-of-datab...
https://about.gitlab.com/blog/2017/02/01/gitlab-dot-com-data...

Показать полностью
IT Программирование Gitlab Git База данных Программист IT юмор Разработка Текст
294
Mr.Ducks
Mr.Ducks
8 месяцев назад
Серия PHP и веб-разработка: полезные руководства и совет

Регистрация на PHP с использованием PDO и MySQL: Полное Руководство⁠⁠

В современном веб-разработке регистрация пользователей — это важная и часто встречающаяся задача. В этой статье мы рассмотрим, как создать простую систему регистрации с использованием HTML-формы, PHP для обработки данных, подключение к базе данных через PDO и работу с MySQL.

Мы также обсудим, почему важно использовать PDO для безопасности, как хэшировать пароли, и что такое подготовленные выражения.

Регистрация на PHP с использованием PDO и MySQL: Полное Руководство PHP, Mysql, Регистрация, HTML, Безопасность, База данных, Веб-разработка, Персональные данные, IT, Программа, Длиннопост

Шаг 1: Создание HTML-формы для регистрации

Начнем с базовой HTML-формы, которая будет собирать имя пользователя, электронную почту и пароль. Эта форма отправляет данные методом POST на PHP-скрипт (register.php), который будет обрабатывать информацию.

<!DOCTYPE html>

<html lang="ru">

<head>

<meta charset="UTF-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Регистрация</title>

</head>

<body>

<h2>Форма регистрации</h2>

<form action="register.php" method="post">

<label for="username">Имя пользователя:</label><br>

<input type="text" id="username" name="username" required><br><br>

<label for="email">Email:</label><br>

<input type="email" id="email" name="email" required><br><br>

<label for="password">Пароль:</label><br>

<input type="password" id="password" name="password" required><br><br>

<input type="submit" value="Зарегистрироваться">

</form>

</body>

</html>

Шаг 2: PHP-скрипт для обработки данных с использованием PDO

Теперь перейдем к созданию PHP-скрипта (register.php), который будет принимать данные из формы и сохранять их в базе данных MySQL. Мы будем использовать PDO (PHP Data Objects) для подключения и работы с базой данных, что обеспечивает безопасность и удобство работы.

<?php

// Настройки подключения к базе данных

$host = 'localhost'; // Имя хоста

$dbname = 'my_database'; // Имя базы данных

$username_db = 'root'; // Имя пользователя БД

$password_db = ''; // Пароль БД (если есть)

// Подключение к базе данных через PDO

try {

$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8";

$pdo = new PDO($dsn, $username_db, $password_db, [

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Включаем обработку ошибок

PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Массивы по умолчанию

PDO::ATTR_EMULATE_PREPARES => false, // Отключаем эмуляцию подготовленных выражений

]);

} catch (PDOException $e) {

die("Ошибка подключения к базе данных: " . $e->getMessage());

}

// Проверка отправки формы

if ($_SERVER["REQUEST_METHOD"] == "POST") {

// Получаем данные из формы

$username = $_POST['username'];

$email = $_POST['email'];

$password = password_hash($_POST['password'], PASSWORD_DEFAULT); // Хэшируем пароль

// SQL-запрос для вставки данных

$sql = "INSERT INTO users (username, email, password) VALUES (:username, :email, :password)";

// Подготовка и выполнение запроса через PDO

try {

$stmt = $pdo->prepare($sql);

$stmt->execute([

':username' => $username,

':email' => $email,

':password' => $password

]);

echo "Регистрация прошла успешно!";

} catch (PDOException $e) {

echo "Ошибка при выполнении запроса: " . $e->getMessage();

}

}

// Закрытие соединения (необязательно в PDO, но можно сделать для аккуратности)

$pdo = null;

?>

Пояснение к коду:

  • Подключение через PDO: Мы подключаемся к базе данных через PDO. Этот способ работы с базой данных считается безопасным, так как поддерживает подготовленные выражения, защищающие от SQL-инъекций.

  • Хэширование пароля: Использование функции password_hash() позволяет безопасно хранить пароли, применяя современный алгоритм хэширования. Это значительно увеличивает уровень защиты пользовательских данных.

  • Подготовленные запросы: Мы используем подготовленные запросы для передачи данных в базу. Это защищает от SQL-инъекций, так как данные передаются отдельно от структуры SQL-запроса.

Шаг 3: Создание таблицы в MySQL

Перед тем, как вы сможете зарегистрировать пользователей, вам нужно создать таблицу для хранения информации о них. Вот пример SQL-запроса для создания таблицы users в базе данных:

CREATE TABLE users (

id INT AUTO_INCREMENT PRIMARY KEY,

username VARCHAR(50) NOT NULL,

email VARCHAR(100) NOT NULL,

password VARCHAR(255) NOT NULL,

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);

Пояснение к таблице:

  • id: Автоматически увеличивающийся идентификатор для каждого пользователя.

  • username: Имя пользователя, которое должно быть уникальным и не пустым.

  • email: Электронная почта, которая также должна быть уникальной и валидной.

  • password: Хэшированный пароль пользователя.

  • created_at: Автоматическая отметка времени, когда пользователь зарегистрировался.

Преимущества использования PDO:

  1. Безопасность: PDO поддерживает подготовленные выражения, которые защищают от SQL-инъекций, одной из наиболее распространенных атак на базы данных.

  2. Кросс-базовая поддержка: PDO позволяет легко менять драйверы для работы с разными базами данных (например, MySQL, PostgreSQL, SQLite).

  3. Обработка ошибок: PDO легко настраивается для выброса исключений в случае ошибок, что помогает отлавливать и решать проблемы на ранних стадиях.

Хэширование паролей в PHP

Хэширование пароля с помощью password_hash() делает вашу систему более безопасной. Это важно, так как хранение паролей в открытом виде крайне небезопасно. При хэшировании создается "отпечаток" пароля, который невозможно восстановить до оригинала, даже если данные будут скомпрометированы.

$password = password_hash($_POST['password'], PASSWORD_DEFAULT);

Для проверки пароля при авторизации можно использовать функцию password_verify().

Заключение

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

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

Убедитесь, что ваш сервер настроен на работу с PHP и MySQL, а также что конфигурация базы данных соответствует вашим требованиям.

Показать полностью 1
PHP Mysql Регистрация HTML Безопасность База данных Веб-разработка Персональные данные IT Программа Длиннопост
11
10
Daehnav
8 месяцев назад
Лига слаботочников

Конвертация базы данных домофонных ключей Vizit в Болид. Помогите пожалуйста советом!⁠⁠

Всем Коллегам крепких нервов, адекватных заказчиков и вовремя приходящих оплат)
Помогите пожалуйста, если кто в курсе:
нужно конвертировать файл данных с базой домофонных ключей из Визитовского формата .bin проги Vizit DM15 в Болидовский формат .ki для С2000-2.
Точно знаю, что работающий способ есть - на одном из объектов ребята с другой конторы на соседнем ЖК не учли, что жилье у них на Визите, а калитки на Болиде, и выдали жильцам ключи забив их только в Визит (калитки сделали уже после заселения).
В итоге они вышли из положения найдя способ конвертации. Помню, что использовали для этого две какие-то проги, но какие именно - не запомнил. А контакты ребят со временем потерялись.
Сейчас сам столкнулся с такой же необходимостью, как в описанной выше ситуации (не скопировал вовремя файл с флешки и похерил её), и зад начинает сильно подгорать..
Запустили калитки и жильцам примерно трехсот квартир из восьмиста как оказалось не зайти к себе во двор.. Скандалы, истерики, бедная УК (замки прикрутили на совесть, не оторвать)).
На кону акт приемки про́клятого дома наконец в эксплуатацию, прошу совета!!)
Заранее спасибо!

[моё] Слаботочка Домофон Совет Болид Визит База данных Конвертация Текст
25
127
Skyscrew
Skyscrew
8 месяцев назад
Лига Сисадминов

Одна таблица⁠⁠

Одна таблица Картинка с текстом, Мемы, База данных, Программирование, Повтор
Показать полностью 1
Картинка с текстом Мемы База данных Программирование Повтор
16
IliaHohlov
IliaHohlov
9 месяцев назад
Лига программистов

Задача-тест с собеседования по SQL⁠⁠

Задача-тест с собеседования по SQL Программирование, IT, Собеседование, Тестирование, Программист, SQL, База данных, Oracle, Ms SQL, Mysql, Postgresql, Задача

Здравствуй, уважаемый читатель!

Как насчёт очередной задачи с собеседования по SQL? Задача базового курса, поэтому поставил одну звезду уровня сложности из пяти.

Дана схема данных (рисунок выше). Необходимо создать представление (VIEW) с названием CLIENTS_INFO, содержащее следующую информацию о клиентах: INN, NAME, PHONE.

Какая ошибка допущена в следующей SQL команде?

CREATE VIEW CLIENTS_INFO
AS SELECT INN, NAME, PHONE
FROM CLIENTS, CLIENT_CONTACTS
WHERE CLIENTS.CLIENT_ID = CLIENT_CONTACTS.CLIENT_ID

Задача-тест с собеседования по SQL Программирование, IT, Собеседование, Тестирование, Программист, SQL, База данных, Oracle, Ms SQL, Mysql, Postgresql, Задача

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

Показать полностью 2
[моё] Программирование IT Собеседование Тестирование Программист SQL База данных Oracle Ms SQL Mysql Postgresql Задача
49
ZorkiTipaFED.ZK
ZorkiTipaFED.ZK
9 месяцев назад

Вот почему Claude позиционируют как исследовательский ИИ⁠⁠

Он даже знает, кто из отечественных исследователей уже не напишет. Хотя, казалось бы, российская наука интересна Западу только в единичных сферах. Но уж точно не в психологии личности. Биг зур Респект американским коллегам из Anthropic.

Вот почему Claude позиционируют как исследовательский ИИ Наука, Нейронные сети, Искусственный интеллект, База данных, Ученые, Автор, Смерть
Вот почему Claude позиционируют как исследовательский ИИ Наука, Нейронные сети, Искусственный интеллект, База данных, Ученые, Автор, Смерть
Наука Нейронные сети Искусственный интеллект База данных Ученые Автор Смерть
0
J0HNSS0N
J0HNSS0N
9 месяцев назад
Лига программистов

Ответ на пост «Задачи с собеседования по SQL»⁠⁠1

Example Answer Structure

Question: What value will the following query return?

SELECT COUNT(*) FROM TMP_TABLE;

Answer:

To determine the result of the query SELECT COUNT(*) FROM TMP_TABLE;, we need to understand what the COUNT(*) function does in SQL. The COUNT(*) function counts the number of rows in a table, regardless of whether they contain NULL values or not.

Let's look at the data in the table TMP_TABLE:

column1column21212NULL131214NULLNULL1315

There are 5 rows in the table. The COUNT(*) function will count all these rows, including those with NULL values.

Therefore, the query:

SELECT COUNT(*) FROM TMP_TABLE;

will return the value 5.

This value is the total number of rows in the table TMP_TABLE, without any consideration of the content of the columns or whether they contain NULL values.
______
ChatGPT4o. Простите.

Программирование Собеседование IT SQL Задача Аналитика База данных Ms SQL Oracle Postgresql Postgres Mysql Тестирование Telegram (ссылка) Ответ на пост Текст
1
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии