Пусть даже гики для гиков за 100500 денег. Даже если это будет кирпич а-ля старый тинкпад где вместо мобильного проца поставили декстопный но зато можно самому заменить сгоревший или сделать апгрейд.
rtorrent проработал у меня неделю. Ман нормальный хрен найдешь. Воевал с dht(ничего не видит). Довоевался что dht было максимум 20 пиров. Соответственно раздает очень плохо. А качает еще хуже. Я так понял у него не работает peer exchange.
Вчера ночью переехал на трансмиссию. Качать стало лучше. Даже качает брошенные торренты с 1 сидом через диалап автора. Не порадовал жор цпу. rtorrent жрал меньше в 1.5 раза. Понравилось что есть нативные удаленные клиенты под все ос и не по одной штуке. Сейчас управляю с андроид телефона. На сервере ncurses клиент
С ходу мне сказали что qbittorrent будет еще лучше тк умеет bittorent 2.0 и еще какие то протоколы и связь с самым популярным uTorrent будет около 100%.
Про делюгу сами мне расскажите.
PS сравниваю все с uTorrent 2.2.1 на соседней вендо машине где dht всегда около 300+ и качает все моментально. А rtorrent даже рядом соседнюю машину в упор не видел пока через общий рабочий трекер не помог.
Раньше и без js все ссылки были видны. А теперь там кружочек анимации загрузки и нифига не скачать. Аш бесит. В html коде тоже ссылок не замечено. Ещё оно требует веб компонент которых нету например в паленуме. Да и вообще в альтернативных браузерах без зашквара.
Итого только убогой хром вынужден использовать. А это по умолчанию бб.
А как например скачать на сервере через links?
Короче зла не хватает. Чтобы они смузи подавились.
#include <cstdint>
#include <cstdlib>
#define BGA__ARRAY_SIZE(arrayArg) (sizeof((arrayArg)) / sizeof((arrayArg)[0]))
template<class ValueArg, class IndexArg = size_t>
struct Stack {
typedef ValueArg Value;
typedef IndexArg Index;
private:
Index topIndex = 0;
//# спрячем поля чтобы гарантированно пользователь не смог их изменить. Даже через const_cast. Тк мы и сами не можем изменить поля то фактически они есть жеткие константы
Value* const data;
const Index m_size;
public:
Stack(Value* data_, Index size_): data(data_), m_size(size_) {
}
Index size() const {
return this->m_size;
}
void push(Value const& v) {
if(this->topIndex < this->size()) {
this->data[this->topIndex++] = v;
};
}
};
//# тут компилятор знает адрес fixedStack_data и размер и может заинлайнить их в методы. Более того - вообще выкинуть память под указатель на данные и размер если все методы есть инлайн. Те фактически это должно работать как Stack<Stack_Storage_Static<int, 16> > но не инстанцировать новые методы класса на каждый размер данных
int fixedStack_data[16];
Stack<int> fixedStack(fixedStack_data, BGA__ARRAY_SIZE(fixedStack_data));
int main() {
fixedStack.push(1);
size_t dynamicStack_size = 16; //# но может быть задано пользователем
//# тут уже dynamicStack_data с неизвестным адресом и размером. Оптимизация не выйдет. Работает как Stack<Stack_Storage_Dynamic<int> >
int* dynamicStack_data = new int[dynamicStack_size];
Stack<int> dynamicStack(dynamicStack_data, dynamicStack_size);
dynamicStack.push(1);
return 0;
}
Что это дает? Меньший объем исходного кода. Меньше бойлерплейтной возни с шаблонами. Значительно меньший шанс случайно нарожать кучу одинаковых методов, отличающихся только размером контейнера (было такое).
Понятно что нужно проверять работает ли оптимизация на каждом интересующем компиляторе. Но тут вопрос чисто теоретический. Равноценная ли эта подмена?
И сразу параллельный вопрос. Допустим ::std::array<int, size>. Возможно компилятор достаточно не дебил и не рожает одинаковые методы для разных размеров а просто сам создает новое динамическое поле размера? Короче как сделать лучше?
И да. Это все чтобы экономить на спичках в условиях мелко контроллеров.
Адская боль (уже есть или предстоит, например у зубного врача). Отключаем нервы боли тумблером и ок.
Или допустим не спиться. А спать надо. Переводим мозг в режим сна форсированно воздействием на определённый нерв. Пусть это будет просто кнопка или программа на мк тут уже не важно.
Возможны просто всякие симуляции того что сейчас работает плохо а нужно чтобы хорошо или отлично.
Или я попал в окружение где женщин нет и не предвидится. Проще отключить половую систему чем вынужденно регулярно симулировать.
Внутри же они все одинаковые. Стальной полированный блин и магнитная голова.
Можно разметить блин и на 120гб и на 2 тб. Или это зависит от качества полировки блина? Типа пытаются разметить максимально пока бэды массово не пойдут?
Осознал что чистый int неизвестно какого размера мне перестал быть нужным. Кроме как передать в printf и общаться с api ос.
Давно использую (u)intXX_fast_t для считаная и (u)intXX_t для хранения. А так же (s)size_t для работы с памятью.
Некоторое время продолжал использовать int и unsigned для всяких констант и вычисления во время компиляции пока не понял что проще и надежнее в таких случаях сразу брать (u)int_max_t.
Про всякие short и прочие странные long long вообще молчу. Чистый бред.
PS реквестирую современный подход к шаблонам в printf. Чтобы не %d а %u8, %i32