И это всё МОЁ

Всем привет.


Однажды я решил навести порядок в своей электронной библиотеке и увлёкся этим делом больше, чем ожидал, а в процессе наведения порядка ещё и подумал, что неплохо бы научиться полученную струкуру сохранять на случай технических сбоев и чтобы ей можно было поделиться.


В результате (кроме самой библиотеки) получился набор скриптов на python для работы с многоуровневыми коллекциями fb2-книг из базы данных флибусты. Скрипты позволяют записать файловую структуру в небольшой (3.8 мб для 35000 книг) дамп-файл и восстановить её из архива флибусты.


Конечно, необходимо сперва скачать 300Гб торрент, что не совсем удобно, но он хорошо сидируется и вообще довольно полезен в быту как оффлайн-флибуста, особенно с учётом блокировок, а дисковое пространство нынче недорого.


Скрипты лежат в репозитории


https://github.com/flibrarian/flibrary


а та самая моя библиотека отдельно в


https://github.com/flibrarian/flibrary-main-collection


Альтрнативно и то и другое есть на меге:


https://mega.nz/folder/QJpGXRjb#1HftyMZtcSzBUh0omTHUsQ


К скриптам прилагается детальное README, а также тестовая коллекция из нескольких книг, для проверки настроек перед использованием основной.


Немного о моей библиотеке: на сегодняшний день она содержит 35618 книг, разложенных по 6825 подкатегориям. Охват довольно широк, включая классическую литературу, фольклор, науку, религию и практические знания, но на полноту она ни в коем случае не претендует. Как пример, здесь почти нет современной развлекательной беллетристики (хотя «классика» жанровой литературы присутствует), специфических хобби и много другого, в чём я не смог или не захотел разобраться. Строгость классификации также соблюдается не всегда, однако это лучшее, что я смог сделать на своём дилетантском уровне.


Чтобы посмотреть на структуру и оценить, насколько это вам подходит, есть скрипт flibhtml, позволяющий сгенерировать html-каталог библиотеки из дамп-файла.


Надеюсь, кому-нибудь это будет полезно как для пользования моей библиотекой, так и для создания своих - с нуля или из моей.









 , , ,








И это всё МОЁ

Здравствуйте.
Сетап такой:
Компьютер за провайдерским NAT’ом, IP серый.
Попросил провайдера сделать проброс портов, выбрал порт 2138.
Но есть одна особенность - при проверке через сервис https://whatismyipaddress.com/
я получаю IP a.a.a.a, а чтоб достучаться к компьютеру через проброс портов нужно стучаться на b.b.b.b (этот IP мне сообщил провайдер, когда настраивал проброс).
В итоге получается, что сколько я ни указываю порт 2138 в настройках transmission, проверка порта через transmission-remote выдаёт результат failed. Думаю это происходит т.к. пиры не знают о адресе b.b.b.b, пытаются коннектиться к a a.a.a, и, ясное дело, у них это не получается.
Можно ли как-то в transmission’е указать IP адрес на который пирам стучаться?









 ,








И это всё МОЁ

Есть два enum для двух очень похожих, но не пересекающихся категорий.

И стандартные map’ы где хранятся элементы:


struct Entity {
const int v1;
int v2;
/* дальше кучка методов с формулами */
};
enum class First { ... };
enum class Second { ... };
std::map<First, Entity> FirstMap;
std::map<Second, Entity> SecondMap;


Хочется написать некий класс View, который будет запоминать часть данных от Entity на момент создания View.
А также возможность обновить представление. Что то типа:


View( First t, const Entity & e ){...}
View( Second t, const Entity & e){...}


Как лучше хранить t внутри объекта View? т.к. без этого не сделать «обновление данных» в View, надо знать, что за сущность отображается.
Отображение First отличается от отображения Second, поэтому и затык.


Про std::variant и его аналоги в курсе, но вдруг найдется более лучше решение, т.к. здесь всего 2 возможных типа.

Или можно по другому организовать хранение данных, чтобы такая проблема вообще не возникла? Буду рад любым идеям.









 








И это всё МОЁ

Есть машина с двумя сетевыми картами. В одну воткнут провод от роутера, раздающего интернет (+192.168.1.0/24), во вторую - провод от роутера, доступ в интернет не имеющего, и дающего доступ в 192.168.2.0/24. Проблема - при подключении этого второго роутера возникает второй default gateway, и доступ в интернет пропадает по понятным причинам (назначающиеся по умолчанию метрики оказываются неправильными). Желательное поведение - все пакеты в 192.168.2.0/24 идут в этот второй роутер, всё остальное в него не идёт.


[internet]---[192.168.1.1]---[machine]---[192.168.2.1]---[192.168.2.0/24]


Насколько я понимаю (и насколько показали эксперименты), удаление этого default route даёт желательное поведение (т.е. хочется избавиться от default route обозначенного <<<<<<<<< в выводе ниже). Однако это требует настройки на машине - и в итоге, это потребуется делать на любом устройстве, одновременно подключенном к этим двум роутерам.


Хочется ограничиться однократной настройкой и этот второй роутер настроить таким образом, что бы он как default gateway не подцеплялся никакими подключенными устройствами (но при этом что бы они имели доступ через него в 192.168.2.0/24). Правильно ли я понимаю, что в теории это (неанонсирование себя как default gateway) возможно? По каким ключевым словам надо искать? роутер - микротик.


(в примере ниже соединение с роутером, раздающим интернет - по wlan, эта деталь ни на что влиять не должна).


$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default роутер_внутр 0.0.0.0 UG 100 0 0 eno1 <<<<<<<<<
default роутер_с_инетом 0.0.0.0 UG 600 0 0 wlo1
link-local 0.0.0.0 255.255.0.0 U 1000 0 0 wlo1
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 wlo1
192.168.2.0 0.0.0.0 255.255.255.0 U 100 0 0 eno1









 ,








И это всё МОЁ

В Debian приходится логиниться сначала юзером, а потом рутом -

su -

Как избавиться от такого двухшагового залогинивания рутом?

PS. В красной шляпе такой проблемы нет, сразу можно логинится рутом.








 








И это всё МОЁ

Здравствуйте,


Когда-то очень давно слышал что если в линуксе не хватает какого-то ПО то можно куда-то послать запрос, где его рассмотрят и подумают


Быстрое гугление и тыканье сайта fsf org не дало результатов куда можно оставить свои просьбы и пожелания


Подскажите пожалуйста









 








И это всё МОЁ

Добрый день. А когда сломалось удаление кеша по c-f5? Конкретно, проблема была сейчас с подгрузкой комментов на youtube.com. ctrl-f5 не спасал, пришлось вручную удалять куки. Может это уже давно, просто я из криокамеры? Что сейчас удаляется, а что надо вручную чистить?


Name 	Firefox
Version 83.0a1
Build ID 20201012093605









 ,








И это всё МОЁ

Есть поле


"name"=>"Київ"


Я его выбираю с помощью point.name


И есть поле


"name:de"=>"Kiew"


Как его выбрать?


point.«name:de» не получается









 , ,








И это всё МОЁ

Столкнулся со странным (непонятным) поведением fgets при чтении данных с сокета посредством fdopen. При запросе с десктопной версии браузера всё хорошо, но когда запрос идет с мобильного браузера chrome, то fgets виснет.

С чем это связано? fgets не находит символа новой строки/EOF? Так fgets все равно должен завершиться при достижении предела num.

char *fgets(char *str, int num, FILE *stream);

Тогда, получается, сам мобильный chrome шлет непрерывные данные в каком-то запросе? Я правильно понимаю (баг chrome?)? Или в чем причина?

Да, при использовании read такое поведение не замечено.

ssize_t read(int fd, void *buf, size_t count);

Минималку из своего pet-проекта делать не стал, вот отсюда (https://ycpcs.github.io/cs365-spring2017/lectures/lecture15.html) тупо (для теста, вдруг я где накосячил) взял пример - то же самое поведение.

// This is like server.c, but uses fdopen to allow communication
// via stdio functions rather than Unix system calls

#include <unistd.h>
#include <stdio.h> // for perror()
#include <stdlib.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <fcntl.h>

#include <netinet/in.h> // for struct sockaddr_in
#include <arpa/inet.h> // for inet_pton

#include <string.h>

#define PORT 40002
#define BUFSIZE 2000

int main(void)
{
int server_sock_fd;
int rc;
char buf[BUFSIZE];
int done = 0;

server_sock_fd = socket(PF_INET, SOCK_STREAM, 0);
if (server_sock_fd < 0) {
perror("Couldn't create socket";);
exit(1);
}

struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
inet_pton(AF_INET, "0.0.0.0", &server_addr.sin_addr);

rc = bind(
server_sock_fd,
(struct sockaddr *) &server_addr,
sizeof(server_addr));
if (rc < 0) {
perror("Couldn't bind server socket";);
exit(1);
}

rc = listen(server_sock_fd, 5);
if (rc < 0) {
perror("Couldn't listen on server socket";);
exit(1);
}

while (!done) {
int client_socket_fd;
struct sockaddr_in client_addr;
socklen_t client_addr_size = sizeof(client_addr);

client_socket_fd = accept(
server_sock_fd,
(struct sockaddr*) &client_addr,
&client_addr_size);
if (client_socket_fd < 0) {
perror("Couldn't accept connection";);
exit(1);
}

// Wrap the socket file descriptor using a FILE*,
// for reading only.
FILE *client_socket_fh = fdopen(client_socket_fd, "r";);

printf("before fgets\n";);

// Read one line from the client
fgets(buf, BUFSIZE, client_socket_fh);

printf("after fgets\n";);

// Close the client socket
fclose(client_socket_fh);

// Write the received message to stdout
printf("%s", buf);

if (strcmp(buf, "quit\r\n";) == 0) {
done = 1;
}
}

close(server_sock_fd);

return 0;
}

Т.е. c десктопного chrome вывод в консоль:
before fgets
after fgets

C мобильного под android:
before fgets
<висим до закрытия вкладки/браузера>
after fgets








 , , ,








И это всё МОЁ

Я использую кастомную плату на чипе AM5749 и столкнулся со следующей проблемой..


Мне нужно выполнить загрузку с SATA накопителя.В загруженном линуксе жесткий видно те проблем с физической реализацией никаких а вот с загрузчиком трабл.


В даташите AM574x SitaraTM Processors Silicon Revision 1.0 в таблице 6.6 указана последовательность загрузки где явно есть варианты с SATA одним из которых я воспользовался. CONFIG_SATA_BOOT=y И казалось бы все должно было загрузится но нет чудо не произошло. После попыток поиска ответов в интернете в часнтости на форуме TI столкнулся с тем что они просто ответили:В нашем SDK не поддерживается загрузка с SATA. Есть похожая история с чипом AM5728 https://e2e.ti.com/support/legacy_forums/embedded/linux/f/354/p/523720/1903993


я решил поступить аналогично патчил настраивал и в итоге получил вот что и окончательно застрял:


U-Boot SPL 2019.01-g54a57c4-dirty (Oct 13 2020 - 16:26:18 +0200) DRA762-GP ES1.0 ABZ package no pinctrl state for default mode Card did not respond to voltage select! Firmware loading failed Trying to boot from SATA Target spinup took 0 ms. AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl SATA mode flags: 64bit ncq stag pm led clo only pmp pio slum part ccc apst Loading Environment from FAT… no pinctrl state for default mode Card did not respond to voltage select! Loading Environment from MMC… Card did not respond to voltage select! *** Warning - No block device, using default environment


ERROR:Error loading sata device SPL: failed to boot from all boot devices
ERROR ### Please RESET the board


Если кто нибудь сталкивался с подобными проблемами подскажите решение…









 








И это всё МОЁ

Справить большую и малую нужду в условиях невесомости не так просто, как на Земле. NASA отправило в космос свой новый космический туалет. Его разработчики впервые подумали и о женщинах", - пишет немецкий журнал Stern.


«Первые космонавты мочились в презерватив, из которого моча стекала в мешок. Над новым космическим туалетом NASA работало шесть лет. Он оснащен удобным «сиденьем», при этом препятствует загрязнению космического корабля в условиях невесомости. «Универсальная система управления отходами» была разработана для полетов на Марс, но сначала должна быть протестирована на Международной космической станции. Туалет установят и будут пользоваться им американский астронавт Крис Кэссиди и его российские коллеги Иван Вагнер и Анатолий Иванишин», - говорится в статье.


«Стоимость разработки составила 23 млн долларов США. (&hellip;) Конечно, на МКС и до этого имелся пригодный к эксплуатации туалет, но новая модель на 65% компактнее и на 40% легче туалета, установленного на МКС», - отмечает издание.


«Основной принцип работы космического туалета остался прежним. Без силы земного притяжения ставка делается на механизм откачивания отходов. При этом при справлении малой или большой нужды работают две разные системы. Мочатся космонавты в шланг, в котором создается низкое давление. Грубо говоря, принцип его работы можно сравнить с пылесосом. Чтобы справить большую нужду, космонавты садятся на бак. Там любой «груз» всасывается, уплотняется и упаковывается в пакет. В баке умещается до 30 пакетов, после этого его нужно очистить. Когда контейнер заполняется, экскременты вместе с другим мусором утилизируются в космическом пространстве».


"Разработчики нового туалета впервые подумали и о женщинах. Старые разработки предназначались для мужчин. «Конструкция воронки была полностью видоизменена для большего соответствия женской анатомии, - отметила Мелисса Маккинли, менеджер проекта по разработке нового туалета. - Это становится проблемой особенно в тех случаях, когда члены экипажа пытаются осуществить два процесса - когда они одновременно справляют большую нужду и мочатся».


«Разделение этих процессов имеет важное значение, так как вода из мочи не утилизируется, а перерабатывается. (&hellip;) Над проблемами космического туалета ученые продолжат работать и в будущем. Так, планируется, что следующее поколение туалетов будет извлекать воду и из фекалий», - передает Stern


https://www.stern.de/digital/technik/23-millionen-us-dollar---nasa-baut-teuerste-toilette-der-welt-9448486.html









 








И это всё МОЁ

Всем привет, короче задачка такая, нужно как то добавлять CallerID number в queue_log, на текущий момент он пишется в отдельную таблицу queue_log БД астера, и всё что выводится вот тут | id | time | callid | queuename | agent | event | data1 | data2 | data3 | data4 | data5 |
Я вижу два варианта, поменять как то вывод столбца agent, либо добавить новый столбец с CallerID number. Но как кастомизировать данный процесс на freepbx пока не представляю.
Всем спасибо за внимание!









 , ,








И это всё МОЁ

Добрый день, появилась необходимость добавить поле на вывод get запроса

    def annotate_poll_name(self, obj):
steps = Step.objects.filter(block=obj).annotate(
poll_text=Poll.objects.get(id=447).text
)
return StepSerializer(steps, many=True).data

id пока что указан руками просто для тестов, в дальнейшем там должно передаваться поле Step.object_id, проблема в том что даже в таком варианте все валится и я не могу понять почему, помогите пожалуйста
TypeError: QuerySet.annotate() received non-expression(s):








 ,








И это всё МОЁ

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









 








И это всё МОЁ

собственно, интересуют чипсеты типа Q67, Z77 и прочие. Хочется для coreboot впаять флешку на 64 Мбайт, но в документации на чипсет вроде бы написано, что PCH поддерживает максимум 16 Мбайт. ifdtool из состава coreboot вроде бы декодирует значения вплоть до 64 Мбайт из дескриптора флешки.


Я так и не понял, с чем это связано. Почему именно столько, а не больше? Есть ли у кого истории успеха, связанные с заменой чипа на больший по размеру?









 , ,








И это всё МОЁ

Какие есть преимущество у xinit над DM или наоборот. Не могу для себя решить…









 ,








И это всё МОЁ

Привет. Есть такая конструкция:




curl localhost:8272 | grep -i «data»




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









 ,








И это всё МОЁ

Добрый день.


Нужно на каждую машину выдавать свой выделенный IP, но именно через NAT.


Есть много однотипных правил NAT но с уникальными внутренними ip к которым привязан уникальный внешний ip:


iptables -t nat -A POSTROUTING –protocol all –source ВНУТРЕННИЙIP1 -o eth1 -j SNAT –to-source ВНЕШНИЙIP1


iptables -t nat -A POSTROUTING –protocol all –source ВНУТРЕННИЙIP2 -o eth1 -j SNAT –to-source ВНЕШНИЙIP2



Можно ли их как-то сократить до одного правила при помощи ipset?









 ,








И это всё МОЁ

Какие IT компании в Москве практикуют это? Получать зп в рухлях - это полный мрак.

Для примера, чтобы получить тысячу баксов в 2019 году, мне нужно было обменять примерно 64 тысячи рухлей. Осенью же 2020 для этого мне потребуется уже примерно 78 тысяч рухлей.

То есть, на скачках курса я потерял примерно 18%. Добавим к этому еще непропорциональное увеличение цен на импортируемые товары (железо, например).

Линукс тут при том, что скоро выйдут в продажу 5xxx райзены и будет анонс Big Navi и я хотел обновить свою машину, которая под линуксом и работает. Но ведь мне еще и семью кормить.








 ,








И это всё МОЁ

Чтобы запустить bash-скрипт, я создал файл ярлыка:

/home/user/Desktop/connectItcServer.desktop

Содержание:
[Desktop Entry]
Version=1.0
Encoding=UTF-8
Type=Application
Name=Соединение с ИТЦ
Icon=gparted
Exec=/opt/sсript/connectItcServer.sh
Terminal=true
Path=/opt/sсript/
Categories=ConsoleOnly;Utility;

Права на /home/user/Desktop/connectItcServer.desktop - 644
Права на /opt/sсript/connectItcServer.sh - 755

Однако, при запуске ярлыка, bash-скрипт не выполняется. Вместо этого появляется окно:

Этот текстовый файл «Соединение с ИТЦ», судя по всему является исполняемым скриптом.
Какое действие вы ходите выполнить?
[Выполнить] [Запустить файл в терминале] [Открыть] [Отменить]

Если нажать «Выполнить», то скрипт начнет выполняться.

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

Это вообще возможно?








 , , ,