Синтвейва тред
Поскидывайте чего-нибудь подобного, чтобы было быстрым, агрессивным, и чтоб соседи тоже заценили.
https://youtu.be/eQqGKPVOQv8?list=PL9e7gmwejeGqo1h9Wf-PLxzuQSfEWF0ji
https://www.youtube.com/watch?v=HGzZ4SjFOLI
()
Поскидывайте чего-нибудь подобного, чтобы было быстрым, агрессивным, и чтоб соседи тоже заценили.
https://youtu.be/eQqGKPVOQv8?list=PL9e7gmwejeGqo1h9Wf-PLxzuQSfEWF0ji
https://www.youtube.com/watch?v=HGzZ4SjFOLI
Вышла новая редакция простыни, почему Linux не готов для десктопа: https://itvision.altervista.org/why.linux.is.not.ready.for.the.desktop.curren...
Список проблем был написан автором ещё в 2012 году перед уходом на macos, и с тех пор большая часть пунктов не потеряла актуальности.
TLDR:
Раз тут такое спонтанное выкладывание i3, то я тоже выложу своё.
Это - постепенное развитие моего конфига, который был сделан «по вашим советам» (NixOS + i3 + KDE (по вашим советам))
Основные внешние изменения - добавлены konversation с конфигом, цветовая тема okular, «цветовая тема» firefox ( LOR habr github ).
Ещё я попробовал попользовать XMonad, особого профита для себя не увидел. Вместо этого просто научился использовать табы в i3.
Внутри я добавил плагинов emacs для своего комфорта, растащил конфиг по отдельным файлам, дописал плагинов для albert, перешёл на rclone с gdrive-ocamlfuse.
Конфиг: https://github.com/balsoft/nixos-config/
>>> Просмотр (1920x1080, 277 Kb)
https://zulipchat.com/
Хочу понять, каковы шансы, что проект не загнется.
Иногда надо куда-то деть юзеров из основного трекера, чтобы не мешали своей бытовухой разработчикам. Есть всякие форумы, gitter и т.п. Но gitter слишком «плоский» по структуре для толстых проектов, а форумы надо хостить и администрить.
Ссылку на Zulip сегодня увидел впервые. Выглядит от конечно странновато, но идея забавная. Кто-нибудь уже успел покататься?
Вопрос про хорошие пользовательские классы исключений в Си++.
Хотелось бы в исключениях видеть не только способ сигнализирования что что-то произошло, но и удобный контейнер, который, можно было бы наполнить чем-то полезным.
Это конечно не какой-нибудь дамп многострочный, который наверное должен создаваться не через e.what() а через что-то специальное. Но хотелось бы чтобы в исключение можно было напихать как минимум char*, string, и любые другие от bool до double нативные типы. Потому что кажется что это было бы очень удобно с точки зрения использования:
throw SomeException() << "blabla " << "index " << i << " array_size" << arr.size() и т.п.
Ну и вот теперь вопрос - кто-нибудь такое делал, и как вы это сделали?
Это достаточно легко сделать средствами STL, берём std::string, берем std::to_string() и ура, если для числовых типов обернуть шаблоном, то вероятно потребовался бы один метод на все случаи :)
Но по-моему так нестоит в исключениях. Исключения это типа такие классы которые возможно создаются в экстремальных условиях нехватки памяти, и тогда
try{
throw SomeException();
} catch (const SomeException &e) {
//можем сюда не попасть.
}
Да, да, чтобы такого не было можно закостылить внутри методов иключения, в которых может породиться другое исключение свой try-catch - но это как-то не эстетично, и наверерное нагрузочно на стек вызовов, а хочется чего-то легкого, что имело бы больше шансов на удачное создание, жизнь и уничтожение, когда осталось мало ресурсов на стеке программы, в куче и тому подобном...
Вопросы
Можно ли придумать что-то более лучшее чем:
1. std::string или динамически расширяемый char * заменить исключительно на char * константной длинны (массив) и в случае захода за длинну просто не заполнять его дальше, а конец массива сделать многоточием - что будет обозначать что это не весь текст исключения.
2. Взамен to_string напрашивается что-то из std::sprintf(buf, «%ld», value) - https://ru.cppreference.com/w/cpp/io/c/fprintf но к сожалению не знаю/не_помню и по ссылке не нашел, что будет если в buf не хватит размера для преобразования числа в строку?
3. И немного глупый вопрос про низкий уровень: если в коде есть строка
A << val1 << val2 << val3 << val4
Правильно что хоть сколько в ряд таких операторов записать то стек не потратится больше чем на размещения вызываемого метода + входящей в него переменной?
Иными словами, где-то на хабре находил статью что например switch() оператор - бывает если условий очень много и добавить еще один условный переход в него - то могут пойти лютые баги, из-за того что стек переполнился и т.п. Но со свичем видимо играет то что он должен сразу все свои ветви разместить на стеке
А вот это грубо говоря просто пошагово должно быть: A << val1 << val2 << val3 << val4 это тоже самое что int a=0; a+=f(); a+=f(); a+=f(); т.е. хоть «беcконечность» таких a+=f(3); сделай - это не покрошит программу, т.к. не переполнит программный стек (ну разве что, безопасно для рантайма,переполнит тип int).
частенько тут (особенно при студенческих обострениях) возникают треды «куда приложить силы», «на чём практиковаться», «посоветуйте тему»..
Чтобы помочь страдальцам предлагаю публиковать тут ссылки на действительно интересные/полезные/любопытные проекты с GitHub,SF и прочих которые заброшены, но крайне неплохи. И просто-таки просят чтобы их продолжили и развили.
---
Собственно мысль возникла от факта сгинувшей mathomatic (https://en.wikipedia.org/wiki/Mathomatic , https://github.com/mfillpot/mathomatic) - true CAS для консольки :-)
Два дня назад вышла версия 2.0.0 Buildbot — свободной системы непрерывной интеграции.
Основные особенности Buildbot:
Buildbot используется такими крупными проектами, как Python, LLVM и Flathub.
В этом релизе добавлена поддержка UTF-8 в идентификаторах, удалена поддержка Python 2.7 из build master, исправлены ошибки и удалены deprecated API.
>>> Сайт проекта
>>> Релиз
решил я создать общую тему.
создаю кроссплатформенный покерный калькулятор эквити для безлимитного Holdem на си++17, сравнимый с simple postflop, CardRunners EV и подобным, только опенсорсный под лицензией GPLv3.
Покерный калькулятор будет вычислять эквити руки (шансы выиграть раздачу), относительно дипазона (предполагаемого множества рук) оппонента, а так же конкретной руки в безлимитном Holdem.
пока что пишу саму библиотеку для калькулятора.
на данный момент из вычислений реализован перебор бордов.
сам проект на ветке с STL
имеется ветка с использованием qt5 либы, тут будет задействовано максимум из qt5.
прошу советовать, что и как можно будет улучшить, предлагайте свое видение подобного проекта)))
Привет, лор, есть вопрос знатокам qt. Когда я создаю и рисую QLabel, выделяется сколько-то видеопамяти. Вопрос: освобождается ли эта память, когда я вызываю QLabel::hide()?
Я хотел проверить создать кучу лейбелов, hide() их, и при во время всего этого наблюдать за vram'ом. Но vram у меня от интела и мониторить его не получается.
Касательно code style. Не холивара (struct
vs class
) ради.
Веду парочку pet-проектов, придерживаюсь одинакового code style в них. Причем, сам code style в процессе разработки изменяется (как я считаю нужным). Сейчас вот задумался над такими пунктами:
struct
keyword should be used for types which do not have access specifiers (i.e. all members are public)struct
keyword can also be used for data straightforward objects that provide merely getters and setters- Implicit
private
section ofclass
should not be used. I.e. theprivate
access specifier should be used explicitly
А почему создал данную тему – я не уверен что написать в ‘‘rationale’’ для данных правил. Т.е. выгдядит, как вкусовщина.
Помогите придать смысла или отказаться от них.
Я не особо не шарю в тонкостях GUI, но может подключится тот кто знает. Итак в продолжение темы: GUI не стандартная задача
Задумка такая, чтобы использовать существующие каналы связи - мессенжеры/сайты/вообще что угодно для безопасной переписки.
Делается так:
Создается GUI окно, которое выглядит таким образом:
+-----header-------+
+------------------+
| |
| |
| A |
| |
| |
| |
+------------------+
| B |
*------------------+
За header окно можно перемещать по экрану как угодно, поле А полупрозрачное, поле B - это стандартный Input для ввода текста, точка обозначенная * нужна для того, чтобы навести это окно на существующий мессенджер чтобы программа понимала куда вводить модифицированный текст.
Работает таким образом: Наводим окно на мессенджер, вводим в поле B любой текст. Текст шифруется RSA, переводится в Base64, кодируется в QrCode в виде ASCII-графики в таком виде:
█████████████████████████████
█████████████████████████████
████ ▄▄▄▄▄ ███▄▄██ ▄▄▄▄▄ ████
████ █ █ █ ▀▄ █ █ █ ████
████ █▄▄▄█ █ ▄█▄ █ █▄▄▄█ ████
████▄▄▄▄▄▄▄█ █▄▀ █▄▄▄▄▄▄▄████
████ ▀▄ ▄ ▄██▄▀█ █▄ ▄ █▀████
████▄▀▄█ ▄▄▄▄█ ▄█▄█▀ ▄█████
█████▄██▄█▄▄ ▀▄ ▀ ▀█▄▄█ ▀████
████ ▄▄▄▄▄ █▀▀ ▀ ▀ ▄█▀ ▄█████
████ █ █ █ ▄█ ██ █ ▀▄█████
████ █▄▄▄█ █▄ ▄▄█▄█▀ █ ██████
████▄▄▄▄▄▄▄█▄▄█▄█▄██▄█▄▄█████
█████████████████████████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
И как простое сообщение постится в мессенджер. Теперь область А, за счет того, что она полупрозрачная видит этот QrCode, сама область «скриншотится» раз в секунду, в полученной картинке распознается QrCode, достается из него RSA, расшифровывается и в полупрозрачном окне поверх этой картинки распечатывается расшифрованный текст, чтобы выглядело примерно так: http://oi67.tinypic.com/2yljmfl.jpg
С помощью такого решения можно использовать любые каналы связи для удобного шифрования сообщений с помощью RSA
Предлагаю собраться программистам с ЛОРа, определиться с ЯП и реализовать этот проект.
Разыскивая для себя редактор заметок и редактор Markdown я обращал внимание на наличие следующих нужных мне функций:
Я посмотрел около полусотни программ, и результаты моего исследования неутешительны. К сожалению, даже просто стабильно работающих программ, которыми хоть сколько-нибудь удобно пользоваться, очень мало. К ним не относится чуть ли не единственный редактор Markdown, наличествующий в официальном репозитории Manjaro, ReText. В большинстве программ с заявленной поддержкой формул, они, во всяком случае с кириллицей, не работают.
Мне хотелось бы отметить лучшие программы, которые я нашел:
Стоит обратить особое внимание на первые две программы из последнего пункта. Помимо собственно заметок, они имеют очень большую функциональность: например, списки ToDo. Программа Makagiga, на мой взгляд, могла бы вообще стать основой для десктопа будущегоЪ, бучи объединена или связана с файловым менеджером и браузером, с некоторыми доработками.
Вы слышали о многих других программах, которые могли бы рассматриваться в этих категориях? (Из последних новостей на LOR: Cherrytree? MyTetra?) Скорее всего, вас обманули: они не юзабильны и / или сильно отстают от вышеназванных. И, скорее всего, я их смотрел.
Прошлые темы
[markdown] Гениальное — простоЪ (февраль 2017)
Примечания
Ъ - Ъ-friendly ссылка
На канале сообщества CoreHard появились видеозаписи докладов с прошедшей в начале ноября в Минске конференции C++ CoreHard Autumn 2018.
Важный дисклаймер. На конференции были проблемы с Интернетом и он-лайн трансляцией, поэтому в каких-то видеозаписях есть проблемы (например, выпадение отдельных кусочков).
Text Formatting For a Future Range-Based Standard Library - Arno Schödl
Concurrency and Parallelism in C++17 and C++20/23 - Rainer Grimm
Что должен знать каждый C++ программист или Как проводить собеседование - Игорь Садченко и Ко
Информационная безопасность и разработка ПО - Евгений Рыжков
Что не умеет оптимизировать компилятор - Александр Зайцев
Метаклассы: воплощаем мечты в реальность - Сергей Садовников
Asynchronous programming with ranges - Ivan Čukić
Обучаем на Python, применяем на C++ - Павел Филонов
Создание пакетов для открытых библиотек через conan.io - Константин Ивлев
Полезный constexpr - Антон Полухин
Кодогенерация C++ кроссплатформенно. Продолжение - Алексей Ткаченко
Обработка списков на C++ в функциональном стиле - Вадим Винник
Заглядываем под капот «Поясов по C++» - Илья Шишков
Ускорение сборки C++ проектов, способы и последствия - Александр Жоров
C++ CoreHard Autumn 2018. Знай свое «железо»: иерархия памяти - Александр Титов
Actors vs CSP vs Tasks vs ... - Евгений Охотников
Debug C++ Without Running - Anastasia Kazakova
Слайды докладов можно найти здесь
Состоялся релиз go-ipfs (эталонной реализации IPFS, написанной на языке Go) версии 0.4.18. Вероятно, это самый значительный релиз в недавней истории; на его подготовку ушло 3 месяца. Со времени предыдущей новости об IPFS на LOR прошло уже более четырёх лет.
IPFS (InterPlanetary File System) — это гипермедийный протокол и распределённая файловая система, созданная с использованием идей, реализованных в Git и BitTorrent, и нацеленная на то, чтобы заменить или дополнить существующий Web. IPFS похож на BitTorrent Swarm, ноды которого обмениваются объектами Git-репозитория. IPFS основан на идее адресации по содержимому — один и тот же блок данных всегда будет иметь один и тот же адрес, вне зависимости от его физического расположения. В отличие от BitTorrent, данные разбиваются на блоки по границе файла, таким образом один и тот же файл может быть переиспользован в разных каталогах без необходимости повторного выделения места на диске. В отличие от Freenet и Perfect Dark, ноды хранят только те данные, которые они явно запросили. IPFS способен интегрироваться с существующими системами разрешения имён — с классическим DNS в настоящее время, с Tor .onion, Namecoin .bit и возможно, некоторыми другими в будущем.
Особенности этого релиза:
Титульные особенности этого релиза — экспериментальная поддержка QUIC, новый алгоритм маршрутизации pubsub-сообщений, возможность подписывания pubsub-сообщений, а также переписанная команда ipfs p2p
. Однако всё это лишь вершина айсберга.
( читать дальше... )
>>> Официальный сайт
>>> Каталог приложений, созданных на основе IPFS
MindForger – это инструмент для редактирования и хранения идей, заметок, планов и любых текстов в формате Markdown. MindForger – это нечто большее, чем просто блокнот – это редактор, который работает как человеческий мозг: накапливает знания, распознаёт их, создаёт ассоциации и гибкие связи между ними и, наконец, позволяет их забывать.
( читать дальше... )
Как для своей программы организовать возможность расширяться плагинами?
Уважаемый многоликий ЛОР. Может кто-то имеет возможность распечатать и вывесить в профильном ИТ ВУЗе, у кафедры, на которой учат программировать, следующее объявление для студентов о возможности повысить свои умения в С++ путем кодинга в OpenSource проект LibreOffice:
https://yadi.sk/i/AmG5iFGALtDoTg
В общем и целом распространение данного объявления везде, где только можно, также приветствуется.
Заранее спасибо всем не равнодушным
Всем привет. Задумался - а как правильно обрабатывать ошибки в Python? Допустим мне нужно запустить в модуле module функцию run, и так неколько раз где-то в коде, она может выдать множество разных исключений - каждый раз надоест отлавливать. И на каждое исключение мне нужно как-то изменить действия программы. Я придумал такой способ - в самой функции run отлавливаются ошибки, а результат она возвращает в таком виде
answer = {'completed': True, 'exception': None}
и ещё какие-нибудь значения. И в итоге всего я просто ловлю вывод от функции, его разбираю, и умещается это всё в несколько строк, и в принципе удобно. А теперь вопрос - как правильно это делать, может есть какой-то более удобный способ? Всем спасибо.
Есть некоторый метод, который обрабатывает xml. При обработке могут вылезти c десяток разных исключений (IOException, SAXException, DOMException и другие). Как их лучше обработать?
- Выпустить все наружу, указав в секции throws метода?
- Ловить все исключения, заносить в лог и «тихо» выходить из метода через return?
- Ловить все исключения и выпускать наружу только как, например, общее IOException с комментарием в параметре конструкторе?
- Другой способ?
Заодно, подскажите, пожалуйста, проект на java, по которому можно было бы подсмотреть стиль кодирования.
заранее спасибо!
Как принято работать с кодами ошибок C API в C++?
У меня есть такой код, но по нему несколько вопросов
//R — тип результата функции которая может вернуть ошибку
template<typename R>
class is_minus_one{
public:
bool operator()(const R& val){
return val == -1;
}
};
//FailPolicy — функтор для проверки является ли результат выполнения функции ошибкой
template<template<class> typename FailPolicy>
class ExceptionWrapper{
public:
template<typename R, typename... ArgsT>
static auto wrap(R (*func)(ArgsT...)){
return [func](ArgsT... args){
FailPolicy<R> isFail;
R res = func(args...);
if(!isFail(res))
return res;
else {
throw std::system_error(errno, std::system_category());
}
};
}
};
using std_ex = ExceptionWrapper<is_minus_one>;
#define EX_WRAP(func) const static auto ex_##func = std_ex::wrap(func)
//Использование
EX_WRAP(epoll_create1);
EX_WRAP(close);
EX_WRAP(epoll_wait);
EX_WRAP(epoll_ctl);
Наверняка есть более адекватные способы для обработки кодов ошибок в C++, но нагуглить их сходу не удается.
следующие → |