Quantcast
Channel: Серьезный блог о серьезном

CHAT GPT для написания кода

$
0
0

gpt

Привет. Развитие нейросетей на данный момент идет семимильными шагами и их возможности, с начала из развития, очень расширились. Можно генерировать как текст, так и изображения. Но для программистов нейросеть Chat GPT может стать хорошим помощником для написания кода и это действительно работает. Когда я сделал запрос на написание функции, которая делает транслитерацию ссылок, то есть переводит кириллические символы в латинскую раскладку, то Chat GPT с этой задачей справился отлично, и итоговый код оказался полностью рабочим. который с уверенностью можно использовать в своих проектах.

Но как известно Chat GPT для генерации кода и не только может быть недоступен, но есть обходные пути. Есть специальные боты в телеграме, которые делают то же самое, что и веб-сервисы типа Chat GPT. Лично я пробовал использовать этого бота: @GPT4Telegrambot. Если использовать его бесплатно, то есть некоторые ограничения.

  • Можно делать 20 запросов в сутки
  • Нельзя генерировать изображения
  • Бот использует модель GPT 3.5

Что умеет делать бот Chat GPT

  1. Генерация изображений
  2. Копирайтинг и рерайтинг
  3. Написание и редактирование кода
  4. Перевод с любого языка
  5. Чат
  6. Получение сводок видео YouTube (текст из видео)

Пример написания кода Chat GPT

function transliterate($string)
{
    $transliterationTable = array(
        'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd',
        'е' => 'e', 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i',
        'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n',
        'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't',
        'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch',
        'ш' => 'sh', 'щ' => 'sch', 'ъ' => '', 'ы' => 'y', 'ь' => '',
        'э' => 'e', 'ю' => 'yu', 'я' => 'ya',
        'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D',
        'Е' => 'E', 'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I',
        'Й' => 'Y', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N',
        'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T',
        'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', 'Ч' => 'Ch',
        'Ш' => 'Sh', 'Щ' => 'Sch', 'Ъ' => '', 'Ы' => 'Y', 'Ь' => '',
        'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya',
        ' ' => '-'
    );

    $transliteratedString = strtr($string, $transliterationTable);
    $transliteratedString = preg_replace('/[^a-zA-Z0-9\-]/', '', $transliteratedString);
    $transliteratedString = strtolower($transliteratedString);

    return $transliteratedString;
}

$link = "Пример ссылки для транслитерации";
$transliteratedLink = transliterate($link);
echo $transliteratedLink; // Выведет "primer-ssylki-dlya-transliteracii"

Для программистов начинается новая эпоха. И дело даже не в том, что ИИ полностью их заменит, а в том, что станет помощником. Тем самым написание кода с Chat GPT позволит сократить время на разработку приложений и сосредоточится на их проектирование и логику. В то время как нейросети будут делать всю рутинную работу.


Как вернуть панель загрузок Google Chrome вниз

$
0
0

download-chrome

Всем привет. После очередного обновления браузера Гугл Хром пользователи с удивлением обнаружили, что привычная панель загрузок переместилась снизу вверх вправо, а чтобы посмотреть, что было скачано, нужно сделать лишний клик. Такое нововведение не всем пришлось по душе, в том числе и мне. Казалось, что панель загрузок в Хроме привычней и удобней именно внизу. Поэтому пришлось углубиться в изучение вопроса как вернуть загрузки вниз и, к счастью, решение этой, хоть и небольшой, но проблемы, есть.

Как в гугл хром сделать загрузки снизу

Инструкция очень проста и давайте пробежимся по пунктам:

  1. Переходим в настройки: chrome://flags/#enable-download-notification
  2. Находим пункты Enable download bubble и Enable download bubble V2
  3. Enable download bubble V2

  4. Устанавливаем значения этих пунктов в Disabled
  5. Жмем кнопку Relaunch в самом низу справа

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

Обращение к динамическим элементам в DOM на JavaScript (jQuery)

$
0
0

Всем привет. Рано или поздно каждый из вас, кто занимается веб-разработкой, столкнетесь с необходимостью обращения к динамически создаваемым элементам на странице и чтения передаваемой через них информации с сервера. Это касается получения данных с бэкенда на фронтенд и обратно асинхронно без перезагрузки страницы. Это может быть, к примеру, чат на Ajax или Websocket. И если мы будем обращаться к элементам, которые отрисовываем в режиме реального времени на странице, привычным нам способом, допустим через событие onclick, таким образом:

$('.element').on('click', function(){
  console.log($(this));
})

То здесь нас будет поджидать разочарование в виде того, что эти элементы просто будут не видны, как будто их не существует на странице. Давайте представим, что у нас есть список к какими-то данными, который постоянно пополняется динамически.

  • Пункт 1
  • Пункт 2
  • Пункт 3
  • Пункт 4
  • Пункт 5

У каждого элемента, который выводится из базы данных должен быть идентификатор. Можно его прописать в атрибут data-id, чтобы удобно было к нему обращаться и было понятно какой именно элемент был задействован. В данном случае будет добавляться li в конец списка и теперь, для того, чтобы обратиться к динамическим элементам, которые были только что созданы и страница при этом не была перезагружена, нам необходимо сначала обратиться к его родителю. Делается это так:

$('.list').on('click', 'li' function(){
  console.log($(this).data('id));
})

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

Демо

Обладая такими знаниями вы сможете редактировать, удалять динамически создаваемые элементы в режиме реального времени. А написав обработчик на бэкенде сможете сохранять эти данные в БД.

Если по какой-то причине не получается обратиться к элементу, попробуйте выбрать родителя еще выше.

Надеюсь данная инструкция была для вас понятна и полезна. Если что, пишите комментарии или сразу в телегу, там есть канал.

Массовое удаление записей из Gridview Yii2 по отмеченным чекбоксам

$
0
0

Всем привет. Этой статьей я открываю новый цикл записей, посвященный PHP фреймворку Yii2. И сейчас будем разбираться как можно быстро и массово удалять данные из Gridview Yii2. Изначально функция удаления отдельной записи уже реализована из коробки и с этим проблем нет. Но бывают ситуации, а в разработке вы будете с ними сталкиваться часто, что данные накапливаются очень быстро и их становится очень много. Порой они в дальнейшем никак не будут использоваться и подлежат удалению. А если их сотни, а то и тысячи, то удалять отдельно каждую запись вы просто устанете, а пользователи, которые будут это делать будут вас проклинать.

gridview-yii2

Но как вы уже поняли выход из этой ситуации есть, массовое удаление в Yii2 Gridview возможна и это даже проще, чем вы думали. Кое-кто потом за это вас будет благодарить. Первым делом в Gridview в массиве column вместо:

['class' => 'yii\grid\SerialColumn']

Напишем:

['class' => 'yii\grid\CheckboxColumn']

Тем самым вместо порядкового номера записи будут выводится чекбоксы. которые можно отметить все сразу. Разумеется те, что выведены на странице.

checkbox-gridview-yii2

Теперь обернем весь Gridview в форму и создадим кнопку удаления.


 'btn btn-danger mt-3 mb-3','data-confirm' => Yii::t('yii', 'Вы уверены, что хотите удалить данные записи? Восстановить их будет нельзя.'),]);?>



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

public function actionCheckboxDelete(){
    $selection = \Yii::$app->request->post('selection');
    if ($selection != null){
        Deals::deleteAll([
            'id' => $selection
        ]);
        \Yii::$app->session->setFlash('success', 'Выбранные данные удалены!');
        return$this->redirect('delete-deals');
    }else{
        \Yii::$app->session->setFlash('error', 'Нечего удалять!');
        return$this->redirect('delete-deals');
    }
}

Тут, мы получаем массив с ID выбранных записей. Если он не пустой, то удаляем то, что выбрали и выводим уведомление. В противном случае выводим сообщение, что удалять нечего, потому как ничего не выбрано или записей больше нет. На этом с массовым удалением записей в Yii2 мы закончим. Благодарю за внимание.

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

Замена стандартного Alert на модальное окно Bootstrap при удалении записей в Gridview Yii2

$
0
0

yii2-delete-confirm

В прошлой статье я показал как массово удалять запись в Yii2, а в здесь вы узнаете как сменить стандартный JavaScript confirm, который всплывает при нажатии кнопки удаления, на модальное окно bootstrap. Оно гораздо лучше вписывается в общий дизайн проекта на Yii2. Заходя вперед могу сказать, что всплывающее окно мы можем поставить любое, к примеру Sweet Alert. Какое захотите, главное понять сам принцип и он не сложный. Сделать это можно несколькими способами и все они расписаны в интернете. Мне они не понравились по причине того, что уж слишком много кода приходится писать. Но я нашел решение проще некуда и кода совсем мало. Давайте приступим.

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

confirm: function (message, ok, cancel) {
  if (window.confirm(message)) {
     !ok || ok();
  } else {
     !cancel || cancel();
    }
  },

Нас такая постановка не устраивает и мы ее будем переопределять. Yii позволяет это сделать. Но сначала нужно подготовить само модальное окно.

Modal::begin([
    'id' => 'DeleteModal',
    'title' => '
Удаление
', 'footer' => '' . Html::a('Удалить', '#', ['class' => 'btn btn-danger', 'data-method' => 'post']),]); Modal::end();

Осталось только добавить в JavaScript файл, который должен быть подключен к сайту, этот код и проверить как все работает:

yii.confirm = function (message) {
    let modal =  $('#DeleteModal');
    modal.find('a.btn-danger').attr('href', $(this).attr('href'));
    modal.modal({modalContent: modal.find('.modal-body').text(message)});
};

Результат работы можно наблюдать на картинке выше. В message попадет текст, который вы напишете здесь:

'data-confirm' => Yii::t('yii', 'Удалить сотрудника с ID: '.$key.'?'),

Таким образом мы меняем поведение при подтверждении удаления записи в Yii2 и делаем это так, как нам нужно, а не как нам предлагает фреймворк из коробки.

Правила валидации в модели Yii2

$
0
0

valid-yii2

Правила валидации, они же Rules, в модели — это набор правил, которым подчиняются данные. Например, в модели User есть поля Email, Login, Password, Name, Status при чем первые три обязательны для заполнения, логин должен состоять только из латиницы, а статус по умолчанию должен принимать значение «1». Все это можно сделать через rules.

Пример правил валидации в Yii2

class User  extends \yii\db\ActiveRecord
{
    public function rules()
    {
      return [
        ['status', 'default', 'value' => 1],
        ['login', 'unique'],
        ['login', 'validateLogin'],
        [['id', 'email', 'name', 'login'], 'required'],
        [['password'], 'required', 'on' => 'register'],
        [['id', 'status'], 'integer'],
        ['email', 'email'],
        ['name', 'string', 'max' => 64],
        ['name', 'trim'],
     ];
    }
}

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

Вторым элементом идет указание валидатора. Здесь может быть имя стандартных валидаторов Yii2 или валидаторов, написанных вами, название функции обратного вызова, выполняющей роль валидатора, или анонимная функция. Следующие элементы идут с ключами. Ключом является аргумент валидатора. Есть как общие для всех валидаторов аргументы, так и уникальные для отдельных. Разберем пример построчно:

['status', 'default', 'value' => 1],
status имя атрибута
default указание на стандартный валидатор DefaultValidator
value аргумент валидатора, устанавливающий дефолтное значение

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

['login', 'unique'],

unique — стандартный валидатор UniqueValidator, проверяющий, что в БД еще нет записи с таким значением в поле. Ведь нам нужен уникальный логин.

['login', 'validateLogin'],

Как видно из примера, одно поле может валидироваться несколько раз.
validateLogin — это не стандартный валидатор. В данном случае указывается своя собственная функция. Сначала Yii попробует найти метод с таким названием в классе модели, потом постарается найти простую функцию с этим именем. Чтобы Yii вызвала статический метод другого класса, стоит указать в валидаторе вместо validateLogin массив с двумя элементами — имя класса и имя метода. Например так:

['login', ['Helper', 'validateLogin']],

Более подробно про собственные функции валидации расскажу чуть ниже.

[['id', 'email', 'name', 'login'], 'required'],

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

[['password'], 'required', 'on' => 'register'],

Поле password было вынесено в отдельный валидатор required, потому что валидировать его стоит только при регистрации пользователя, но не при изменении его данных.
on — технически является аргументом валидатора, практически — аргументом правила. Это дополнительное условия для правила, указывающее на сценарий, при котором требуется применить валидатор. О сценариях читай ниже.

['name', 'string', 'max' => 64],
string стандартный валидатор StringValidator
max параметр валидатора, означающий, что длина строки не может превышать 64 символа

Собственные функции валидации в Yii2

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

  • Продвинутый — сделать полноценный класс-валидатор, унаследовав его от класса Validator. Но это слишком сложно и редко имеет смысл.
  • Написать функцию валидации. Этот способ я опишу подробнее
public function  validateLogin($attribute)
{
  if(!preg_match('/^[a-zA-Z]{3,16}$/', $this->$attribute))
  {
    $this->addError($attribute, 'Login incorrect');
  }
}

Код прост до безобразия. В данном случае это метод класса модели. Имеем на входе $attribute — название поля. Проверяем значение этого поля. Если значение невалидно — генерируем ошибку.

Стоит обратить внимание, что в данном случае $attribute содержит строку с именем поля, поэтому чтобы получить значение поля, необходимо вызвать такую конструкцию: $this->attribute

Сценарии валидации в Yii2

Часто мы сталкиваемся с тем, что в одном случае нужно применить одни правила, а в другом — другие. Например регистрация, обновление профиля, восстановление пароля — это разные сценарии сохранения модели юзера. Здесь к нам на помощь приходят сценарии. Чтобы указать валидатору, что правило нужно применять только в определенных сценариях, нужно задать правилу параметр «on»:

// так
[['password'], 'required', 'on' => 'register']

// или так
[['password'], 'required', 'on' => ['register', 'change_password']]

Кроме того, можно не указывать сценарии для каждого правила. Вместо этого можно описать сценарии в специальном методе модели:

class User extends \yii\db\ActiveRecord
{
  public function scenarios()
  {
    $scenarios = parent::scenarios();
    $scenarios['login'] = ['login', 'password'];
    $scenarios['register'] = ['login', 'email', 'password'];
    self::SCENARIO_DEFAULT => ['login', '!password']
    return $scenarios;
  }
}

Какой сценарий использовать, указывается при сохранении модели:

// так
$user = new User(['scenario' => 'register']);

// или так
$user = new User();
$user->scenario = 'register';

// или так
$user = User::findByID($id)->one();
$user->scenario = 'login';

Условная валидация when

Атрибут правила when указывает, в каком случае нужно использовать правило. Чем-то напоминает сценарии, но не требует явного указания сценария. Значением должна быть функция обратного вызова:

// поле "name" обязательно для заполнения, только для юзера с логином "Vasya"
['name', 'required', 'when' => function($model) { return $model->login == 'Vasya'; }],

// поле "is_vampire" принимает значение "1", только если юзер регистрируется ночью
['is_vampire', 'default', 'value' => 1, 'when' => function($model) { return date('H') 

Условная валидация на стороне клиента whenClient

Для полного счастья следует так же добавить условие проверки и на сторону клиента. Для этого используется параметр whenClient, в который необходимо передать JS-код проверки.

['name', 'required', 'whenClient' => "function (attribute, value) {return $('#login').value == 'Vasya';}"],

Естественно, условие будет автоматически добавлено только при условии использования функционала Yii для создания форм.

SkipOnEmpty

Указывает валидатору пропускать или не пропускать правило, если значение поля пустое. По умолчанию true (то есть пропускать).

SkipOnError

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

Переопределяем кнопки просмотра, редактирования и удаления в GridView Yii2

$
0
0

btn-grid

Если вы знакомы с PHP фреймворком Yii2, то знаете, что в виджете GridView выводятся стандартные кнопки просмотра, редактирования и удаления записи с SVG иконками, которые чаще всего не вписываются в дизайн проекта и, если уж быть до конца честным, то они устарели и берут свои истоки из Bootstrap 3-ей версии, в то время как уже давно вышла пятая и многие на нее перешли. Но Yii2 не был бы так популярен, если бы с этим ничего нельзя было поделать. Эти кнопки можно переопределить на свои и сделать это не сложно. Можно поступить двумя способами. Хотелось бы начать сразу со второго, так как он наиболее предпочтительнее и первый вариант лучше не использовать. Но чтобы вы поняли почему именно, покажу оба варианта.

Переопределяем кнопки в GridView Yii2. Способ 1

Вот весь код целиком, а дальше рассмотрим его плюсы и минусы.

[
  'class' => ActionColumn::className(),
  'urlCreator' => function ($action, User $model, $key, $index, $column) {
    return Url::toRoute([$action, 'id' => $model->id]);
  },
  'buttons' => [
     'update' => function ($url,$model, $key) {
        return Html::a('',$url);
      },
     'view' => function ($url,$model, $key) {return Html::a('',$url);
     },
     'delete' => function ($url,$model, $key) {return Html::a('',$url,['data-confirm' => Yii::t('yii', 'Удалить сотрудника с ID: '.$key.'?'),'data-method' => 'post', 'data-pjax' => '1',]);
     },
],
],

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

Переопределяем кнопки в GridView Yii2. Способ 2

Сейчас мы займемся настоящим программированием и переопределим стандартный класс:

yii\grid\ActionColumn

Кнопки в нем по умолчанию прописаны так:

ActionColumn GridView

И напишем свой собственный класс, который будем наследовать от него. Для этого я создал папку по пути frontend\components\classes и назвал его CustomActionColumnClass. Вот его код:

namespace frontend\components\classes;

use yii\grid\ActionColumn;
class CustomActionColumnClass extends ActionColumn
{
    public $icons = [
        'eye-open' => '',
        'pencil' => '',
        'trash' => ''
    ];

}

Что теперь?

Чтобы все заработало, идем в файл, где выводится виджет и в самом верху прописываем:

use \frontend\components\classes\CustomActionColumnClass

И там, где выводятся кнопки, меняем на свой класс. Должно получиться:

[
 'class' => CustomActionColumnClass::className(),
  'urlCreator' => function ($action, StorageAreas $model, $key, $index, $column) {
     return Url::toRoute([$action, 'id' => $model->id]);
  }
],

И кнопки выглядят теперь так, как нам хочется

btn-gridview-yii2

Согласитесь, что переопределить класс ActionColumn это куда более профессиональней, чем если бы мы копипастили код кнопок из виджета в виджет. Тем более, что сложностей в этом возникнуть не должно.

Активация Windows 11 навсегда бесплатно (ключи активации)

$
0
0

Активация Windows 11

Если вы столкнулись с тем, что ваш компьютер требует активации, о чем вас уведомляет специальная надпись в низу экрана, то сейчас мы с вами как раз займемся активацией Windows 11 и не важно какая у вас версия, домашняя, про или для образовательных учреждений, ключи найдутся для любой из них. Делать мы это будем по тому же принципу, что и Windows 10, через командную строку и никаких KMS не нужно. Инструкция очень проста, поэтому вы без труда сможете самостоятельно активировать Windows 11.

Активация windows 11 через командную строку

Для активации Windows 11 обязательно откройте командную строку о имени администратора. Для этого в системном поиске пишем cmd. Затем правой кнопкой мыши и выбираем «Запуск от имени администратора», как показано на скриншоте.

run_administrator_cmd

Затем необходимо будет вводить по очереди три команды:

  1. Установить ключ продукта
  2. Подключиться к серверу активации
  3. Активировать ключ

Выбирайте ключи активации Windows 11 в зависимости от вашей версии системы. t вы всегда можете бстро посмотреть, если нажмете сочетание клавиш Win + Pause/Break

Свойства системы windows

У меня стоит десятка, так что на это не обращайте внимание.

Активация Windows 11 Домашняя

slmgr /ipk TX9XD-98N7V-6WMQ6-BX7FG-H8Q99
slmgr /skms kms.xspace.in
slmgr /ato

Активация Windows 11 Home N

slmgr /ipk 3KHY7-WNT83-DGQKR-F7HPR-844BM
slmgr /skms kms.xspace.in
slmgr /ato

Активация Windows 11 Домашняя для одного языка (Single Language)

slmgr /ipk 7HNRX-D7KGG-3K4RQ-4WPJ4-YTDFH
slmgr /skms kms.xspace.in
slmgr /ato

Активация Windows 11 Home Country Specific (для отдельных стран)

slmgr /ipk PVMJN-6DFY6-9CCP6-7BKTT-D3WVR
slmgr /skms kms.xspace.in
slmgr /ato

Активация Windows 11 Pro

slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX
slmgr /skms kms.xspace.in
slmgr /ato

Активация Windows 11 Pro N

slmgr /ipk MH37W-N47XK-V7XM9-C7227-GCQG9
slmgr /skms kms.xspace.in
slmgr /ato

Активация Windows 11 для образовательных учреждений (Education)

slmgr /ipk NW6C2-QMPVW-D7KKK-3GKT6-VCFB2
slmgr /skms kms.xspace.in
slmgr /ato

Активация Windows 11 Education N

slmgr /ipk 2WH4N-8QGBV-H22JP-CT43Q-MDWWJ
slmgr /skms kms.xspace.in
slmgr /ato

Активация Windows 11 Enterprise (предприятие)

slmgr /ipk NPPR9-FWDCX-D2C8J-H872K-2YT43
slmgr /skms kms.xspace.in
slmgr /ato

Активация Windows 11 Enterprise N

slmgr /ipk DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4
slmgr /skms kms.xspace.in
slmgr /ato

cmd-activate

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

Возможные проблемы при активации Windows 11

В некоторых случаях появляется ошибка активации windows 11 по причине того, что сервер активации бывает временами перегружен и приходится проделать ту же процедуру еще раз.

Надеюсь, что у вас все получилось и вы смогли убрать надпись об активации Windows 11 и теперь вас больше ничего не раздражает. Если вам было что-о непонятно, что предлагаю посмотреть видео-инструкцию по этой теме в моем телеграм-канале. так как в YouTube его удаляют. Она от десятой версии, но ничем не отличается.

Телеграм-канал: Записки программиста

Прелоадер для Gridview Yii2 Pjax

$
0
0

прелоадер для gridview yii2

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

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

$(document).on('pjax:send', function() {
  $('#loading').show()
})

$(document).on('pjax:complete', function() {
  $('#loading').hide()
})

Где #loading — это и есть прелоадер, который мы будем показывать при загрузке данных в Gridview. Никаких дополнительных настроек не требуется, все будет работать и так. А прелоадер, если хотите, можете использовать любой, по вашему усмотрению, даже в виде GIF изображения.

Как включить секунды на часах Windows

$
0
0

Добавить-секунды-в-часы-Windows

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

Включить секунды в Windows

Первым делом заходим в реестр Windows. О том, как это сделать, подробно написано здесь. Там же есть и видео-инструкция. Нам нужен этот путь:

Компьютер\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced

Кликаем по папке Advanced правой кнопкой мыши и создаем параметр DWORD (32 бита)

32

Даем ему название ShowSecondsInSystemClock, жмем Enter и кликаем по нему 2 раза. В открывшемся окошке меняем 0 на 1.


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

Как убрать секунды +в часах windows

Если же вам, по какой-то причине наоборот нужно убрать секунды в часах Windows, то нужно так же зайти в реестр Windows и удалить параметр ShowSecondsInSystemClock. Сделать это не сложно. Кликнуть правой клавишей мыши и выбрать в контекстном меню пункт «Удалить».

del

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





Latest Images