Обновить
1
0

Пользователь

Отправить сообщение

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

У меня была похожая проблема где-то в начале лета. ChatGPT Электронный болван посоветовал отслеживать статус воспроизведения видео/аудио через Wire Plumber. Идея была проверена и доведена до рабочего решения в виде такого bash скрипта:

#!/bin/bash
IDLE_LIMIT_MS=900000  # 15 minutes
while true; do
  idle_ms=$(xprintidle)
#  if wpctl status | awk '/Streams:/,/Video/ {print}' | grep -B1 'playback_' | grep -q '\[active\]'; then
  if wpctl status | grep 'playback' | grep '\[active\]'; then
    echo "$(date): Audio playing, skip suspend"
    sleep 60
    continue
  fi
  if [ "$idle_ms" -gt "$IDLE_LIMIT_MS" ]; then
    echo "$(date): Idle and no audio — suspending..."
    systemctl suspend
  fi
  sleep 60
done

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

Получается, каждую минуту смотрим wpctl status, если проигрывается аудио, то ждем минуту и возвращаемся в начало цикла. Если аудио нет и вывод xprintidle больше чем 15 минут, то отправляем систему в сон, иначе ждем минуту, все.

Кладем этот скрипт, например, куда-нибудь в ~/.local/bin, добавляем в автозагрузку, да хоть в том же xfce при логине пользователя и пользуемся. Не надо ничего патчить и перекомпилировать, нет проблем с апдейтами, после окончания фильма сам уснет через 15 мин.

Тоже ковырял слаку, где-то в 2010 в качестве эксперимента поставил на домашний комп, по сути с него начал знакомство с линуксами. Помню, у меня был kde и пользовался в основном для серфа интрнета/просмотра фильмов. Было очень не привычно, мне не понравилось - приходилось много красноглазить для решения простых бытовых задач, в итоге перешел на windows 7, а позже на dualboot debian/windows 10. На первом работаю уже много лет - все устраивает, доволен, как слон, на последнем иногда поигрываю игры.

удаленку тоже запретить?

Проверял ваш тезис про выбросы на практике. В моем случае он работает не так, как ожидалось, а именно любой порог отсечения ошибки по учебной выборке приводил к ухудшению результата на тестовой выборке. Регрессор тот же, набор данных другой.
Как разраб с опытом работы с клиентом 1 на 1, так и в команде, я вам так скажу: на практике мне удалось ощутить потребность как минимум в аналитике, открываешь бриф или иной документ, содержащий требования, а там описан пони единорога. Бывает, что что-то из этих требований реализовать невозможно, бывает, что проще и дешевле будет сделать как-то иначе. Далее у вас развивается коммуникация по этим вопросам с целью достигнуть каких-либо соглашений в виде адекватного ТЗ, которое еще к тому же будет меняться в процессе разработки. От изменений этих, порой начинают шевелиться волосы на голове. А поскольку в этой самой голове не хватает сведений о тонкостях их бизнес процесса, то порой хочется убежать к бабушке в деревню или остаться в садике на продленку, то выдвинуть оптимальные решения порой не всегда доступно. Именно это и есть работа аналитика, его труд сохранит ваши нервы и убережет от лишней головной боли. Он вам не враг и не нахлебник, а коллега и сотрудник.

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

Таким образом, из моего опыта минимальный набор людей на проект: 1 аналитик, 1 разраб, хотя бы 2 тестировщика, дизайнер (если есть UI). С такой командой в принципе можно вытянуть любой проект. Но если проект очень большой, то дополнительные люди, которых вы считаете лишними, позволяют ощутимо экономить ваше же время, которое могло бы быть потрачено на невостребованную работу.
А отсутствие продукта — отказ от прибыли, так получается? Либо разраб об этом не думал, либо думал, но решил отказаться от накладных расходов.
Чаще наоборот, переписывать полностью. Но, да, gii красивая игрушка.
Ни разу, ни в одном проекте, не случалось сгенерированный на Yii CRUD оставлять нетронутым.
Задача перевести приложение на 10—20 языков, в которых ни один из программистов ничего не понимает, довольно типична. Особенно для коробочных устанавливаемых продуктов. Разве не так?

На моей практике коммерческой разработки это происходит обычно так — программисту передают переводы нужной локали и он их сам добавляет. Вендорных переводов, как правило, остается >30%
Ну а в плане реализации? В Yii стандартные CRUD есть из коробки.

image
SamDark
Вот по переводам не стоит даже сравнивать. В Yii intl со всеми его фичами. То, что в Laravel на эту тему, не дотягивает даже до Yii 1.1. Скорее всего, причина в географии основных авторов и пользователей фреймворка. Для штатов переводы, мягко говоря, не актуальны.

В данной ситуации я — пользователь и сравниваю то, с чем успел поработать. Если нужен именно intl — уверен, под laravel есть соответствующий extension. В случае Laravel — в 80% случаев все работает из коробки так, как требуется в большинстве прикладных задач. В Yii же — всегда нужно править конфиги, где-то что-то допиливать, а порой и вендор переопределять. Такая кастомизация — это не плохо, да только время разраба на это расплывается.
$model = new \app\models\ContactForm();

// populate model attributes with user inputs
$model->load(\Yii::$app->request->post());
// which is equivalent to the following:
// $model->attributes = \Yii::$app->request->post('ContactForm');

if ($model->validate()) {
    // all inputs are valid
} else {
    // validation failed: $errors is an array containing error messages
    $errors = $model->errors;
}



public function rules()
{
    return [
        // the name, email, subject and body attributes are required
        [['name', 'email', 'subject', 'body'], 'required'],

        // the email attribute should be a valid email address
        ['email', 'email'],
    ];
}


public function store(Request $request)
{
    try {
      $this->validate($request, [
        'name' => 'required',
        'email' => 'required|email',
        'subject' => 'required',
        'body' => 'required',
      ]);
    } catch(\Illuminate\Foundation\Validation\ValidationException $e) {
        return $e->getResponse();
    }

  // Статья прошла проверку, сохранение в БД...
}


Я могу продолжить…
'components' => [
    // ...
    'i18n' => [
        'translations' => [
            'app*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                //'basePath' => '@app/messages',
                //'sourceLanguage' => 'en-US',
                'fileMap' => [
                    'app' => 'app.php',
                    'app/error' => 'error.php',
                ],
            ],
        ],
    ],
],

\Yii::t('app', 'welcome');


В Laravel просто натыкать файлики:
/resources
  /lang
    /en
      messages.php
    /es
      messages.php

trans('messages.welcome');
use yii\web\Controller;
use yii\filters\AccessControl;

class SiteController extends Controller
{
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['login', 'logout', 'SIGNUP'],
                'rules' => [
                    [
                        'allow' => true,
                        'actions' => ['login', 'signup'],
                        'roles' => ['?'],
                    ],
                    [
                        'allow' => true,
                        'actions' => ['logout'],
                        'roles' => ['@'],
                    ],
                ],
            ],
        ];
    }
    // ...
}


Route::group(['middleware' => ['auth', 'role:editor']], function () {
  Route::get('/', function ()    {
    // Использует посредника Auth
  });

  Route::get('user/profile', function () {
    // Использует посредника Auth
  });
});


'rules' => array(
    array('restUser/index', 'pattern' => 'api/v1/users', 'verb' => 'GET'),
    array('restUser/view', 'pattern' => 'api/v1/users/<id>', 'verb' => 'GET'),
    array('restUser/create', 'pattern' => 'api/v1/users', 'verb' => 'POST'),
    array('restUser/update', 'pattern' => 'api/v1/users/<id>', 'verb' => 'PUT'),
    array('restUser/delete', 'pattern' => 'api/v1/users/<id>', 'verb' => 'DELETE'),
)


Route::get('api/v1/users', 'UserController@index');
Route::get('api/v1/users/{id}', 'UserController@view');
Route::post('api/v1/users', 'UserController@create');
Route::put('api/v1/users/{id}', 'UserController@update');
Route::delete('api/v1/users/{id}', 'UserController@delete');
А я пробовал и Yii и Laravel. Ну, например, SPA на laravel будет в разы проще делать, а учитывая то, что тенденции меняются в их сторону, это очень даже актуально.

Информация

В рейтинге
6 732-й
Зарегистрирован
Активность