У меня много микросервисов, в сорцах каждого есть docker-compose с тестовым окружением. Вот поэтому у меня их много. Но я работаю всегда на одним проектом одновременно, но переключаться приходится часто.
C++ выбрал потому что хорошо его знаю и мне сам язык больше нравится чем Go, ещё потому что можно собрать бинарь меньше чем он будет на Go. Сейчас глянул, пустой hello-world уже получается 1,8Мб.
Про стреляние в ногу, везде можно стрелять, не только в сишечке.
В целом да, указание имени немного облегчает жизнь. Но это не решает полностью проблему, которую я описал и для чего предназначена эта утилита.
Если вы погасили проект по имени, то поднять его по имени уже не получится, надо идти в папку с docker-compose и там писать docker-compose up -d
Чтобы быстро переключиться нужно значительно больше писать в консоли: docker compose ls docker compose -p app down docker-compose up -f where/is/my/project/docker-compose.yml -d
вместо: dcw up my_project
Так что я считаю, что кому-то это будет наверняка полезно. Мне вот удобно.
Написать нормальный bash completion это да, задача не из простых. Я сам недавно такое проходил, почитал разные статьи, но там всё примитивно как правило и сложные случаи с под командами и их флагами не рассказывается как сделать. В итоге остановился на конечном автомате. У вас я вижу много ифчиков, возможно с автоматом и состоянием их количество подсократится. Вот пример моего https://github.com/navrocky/dcw/blob/master/completion.bash
Сейчас ещё раз глянул на описание. Да, я кстати думал наворотить функционал, чтобы поддерживался не только докер. Наверное должно было бы получиться совсем что-то похожее на ELC. Но я сдержался и решил сделать что-то простое под конкретную задачку с docker-compose.
Ну вот веб интерфейс это не очень удобно, надо заглядывать во вкладку в браузере. В трее видеть что сейчас запущено - самое то.
У меня два варианта сейчас, взять Qt и наваять простое приложение для этого. Может его запаковать в AppImage, чтобы было проще распространять.
Второй вариант, например, для KDE можно замутить плазмоид, который будет использовать уже существующий CLI. Второй вариант похуже, так как это только для KDE.
У меня ещё есть идея сделать гуёвое приложение, чтобы висело в трее и было видно какое пространство запущено, ну и в выпадающей менюшке была возможность переключить. Жалко что статический бинарь уже не получится.
Да, бегло глянул, вроде что-то похожее, но выглядит сложнее. Для себя почерпнул идею, что можно переключаться без указания имени воркспейса, если находишься в папке проекта. Надо будет сделать.
А мне понравилась наивная фраза "Линукс может просто поставить свою, если мы не обнулим." ). Это видимо речь про неинициализированную структуру, которая забита мусором, это особенность C/C++, линукс тут не при чем.
Второе замечание, зачем использовать макросы там где это не нужно и только запутывает код? Это я про инициализацию структур, можно же написать обычную функцию или написать этот код прямо по месту. Ох уж эти сишники...
Хм, то есть обернули вызов слота в диалог? Лучше это реализовать в виде шаблонной функции и вместо имени слота передавать лямбду, тогда отпадает необходимость в QVariant. И лямбду можно гонять на тредпуле, чтобы не фризить UI.
Я бы интерфейс всего этого сделал таким:
template <typename R>
struct OperationResult {
bool isCanceled;
R result;
};
class ProgressDialog {
public:
void log(const QString& line);
void setProgress(int progress);
bool isCanceledByUser() const;
};
template <typename R>
OperationResult<R> runWithProgressDialog(
const QString& title,
int totalSteps,
const std::function<R(ProgressDialog& dialog)>& block
);
// пример использования
auto sumResult = runWithProgressDialog("Calc summ", 1000, [](auto& dlg){
int result = 0;
for (int i = 0; i < 1000; i++) {
if (dlg.isCanceledByUser()) return 0;
result += i;
dlg.setProgress(i);
QThread::sleep(100);
}
return i;
})
Из текста непонятно зачем там вообще QVariant, invokeMethod и использование таймера. Хотелось бы глянуть на исходники, но это, видимо, приватный проект на гитхабе...
А вообще enum в C# примитивные и ничем не лучше чем в C и один в один их повторяют. А вот за действительно крутыми enum'ами надо идти в Java, Kotlin и Swift. Вот там есть действительно что рассказать и чем удивить.
Да потому что макс, например, не смотря на шесть динамиков внутри и громкие заявления, звучит ужасно, просто звук как из бочки, слышно только бас. И уже несколько лет люди просят добавить эквалайзер, чтобы хоть как-то это исправить, но это слишком сложно для Яндекса. Я послушал ее в магазине, ужаснулся и пошел купил jbl link в три раза дешевле, звук божественный
У меня много микросервисов, в сорцах каждого есть docker-compose с тестовым окружением. Вот поэтому у меня их много. Но я работаю всегда на одним проектом одновременно, но переключаться приходится часто.
C++ выбрал потому что хорошо его знаю и мне сам язык больше нравится чем Go, ещё потому что можно собрать бинарь меньше чем он будет на Go. Сейчас глянул, пустой hello-world уже получается 1,8Мб.
Про стреляние в ногу, везде можно стрелять, не только в сишечке.
В целом да, указание имени немного облегчает жизнь. Но это не решает полностью проблему, которую я описал и для чего предназначена эта утилита.
Если вы погасили проект по имени, то поднять его по имени уже не получится, надо идти в папку с docker-compose и там писать docker-compose up -d
Чтобы быстро переключиться нужно значительно больше писать в консоли:
docker compose ls
docker compose -p app down
docker-compose up -f where/is/my/project/docker-compose.yml -d
вместо:
dcw up my_project
Так что я считаю, что кому-то это будет наверняка полезно. Мне вот удобно.
Написать нормальный bash completion это да, задача не из простых. Я сам недавно такое проходил, почитал разные статьи, но там всё примитивно как правило и сложные случаи с под командами и их флагами не рассказывается как сделать. В итоге остановился на конечном автомате. У вас я вижу много ифчиков, возможно с автоматом и состоянием их количество подсократится. Вот пример моего https://github.com/navrocky/dcw/blob/master/completion.bash
Сейчас ещё раз глянул на описание. Да, я кстати думал наворотить функционал, чтобы поддерживался не только докер. Наверное должно было бы получиться совсем что-то похожее на ELC. Но я сдержался и решил сделать что-то простое под конкретную задачку с docker-compose.
Ну вот веб интерфейс это не очень удобно, надо заглядывать во вкладку в браузере. В трее видеть что сейчас запущено - самое то.
У меня два варианта сейчас, взять Qt и наваять простое приложение для этого. Может его запаковать в AppImage, чтобы было проще распространять.
Второй вариант, например, для KDE можно замутить плазмоид, который будет использовать уже существующий CLI. Второй вариант похуже, так как это только для KDE.
В prompt да, тоже хорошая идея ?
У меня ещё есть идея сделать гуёвое приложение, чтобы висело в трее и было видно какое пространство запущено, ну и в выпадающей менюшке была возможность переключить. Жалко что статический бинарь уже не получится.
Да, бегло глянул, вроде что-то похожее, но выглядит сложнее. Для себя почерпнул идею, что можно переключаться без указания имени воркспейса, если находишься в папке проекта. Надо будет сделать.
А мне понравилась наивная фраза "Линукс может просто поставить свою, если мы не обнулим." ). Это видимо речь про неинициализированную структуру, которая забита мусором, это особенность C/C++, линукс тут не при чем.
Второе замечание, зачем использовать макросы там где это не нужно и только запутывает код? Это я про инициализацию структур, можно же написать обычную функцию или написать этот код прямо по месту. Ох уж эти сишники...
Можно добавить в статью очень удобный каталог VPS хостеров https://vps.today/. Там можно подобрать себе по стране, цене, способу оплаты, услугам.
Ну это же просто пример блокирующей операции. Если исполняться будет на тредпуле, то фризиться ничего не будет
Хм, то есть обернули вызов слота в диалог? Лучше это реализовать в виде шаблонной функции и вместо имени слота передавать лямбду, тогда отпадает необходимость в QVariant. И лямбду можно гонять на тредпуле, чтобы не фризить UI.
Я бы интерфейс всего этого сделал таким:
Похоже не исправили, по прежнему 404
Из текста непонятно зачем там вообще QVariant, invokeMethod и использование таймера. Хотелось бы глянуть на исходники, но это, видимо, приватный проект на гитхабе...
Опция
INSECURE_NOT_FOR_PRODUCTION_ignore_hash: True
отключает проверку контрольный сумм для сторонних репозиториев и всё работаетВот рабочий конфиг:
С зеркалом яндекса наблюдаются проблемы (не удается скачать mingw), поэтому я не стал его ставить как baseurl.
Ставить так:
И ни одного пруфа, видео прибоки с вау эффектом какого-нибудь...
А разве включение nullable начиная с 8 версии не спасает?
В свете последних событий и ухода сертификационных органов от Java, как реализовать подпись на, к примеру, libxml2, libxmlsec1?
Каноникализация там есть, а вот что делать с трансформацией СМЭВ3 ума не приложу ?♂️
А вообще enum в C# примитивные и ничем не лучше чем в C и один в один их повторяют. А вот за действительно крутыми enum'ами надо идти в Java, Kotlin и Swift. Вот там есть действительно что рассказать и чем удивить.
Да потому что макс, например, не смотря на шесть динамиков внутри и громкие заявления, звучит ужасно, просто звук как из бочки, слышно только бас. И уже несколько лет люди просят добавить эквалайзер, чтобы хоть как-то это исправить, но это слишком сложно для Яндекса. Я послушал ее в магазине, ужаснулся и пошел купил jbl link в три раза дешевле, звук божественный