Ещё 4 мая хотел скачать один понравившийся паттерн с https://openclipart.org/. Как сообщал их twitter 3 мая, они подверглись DDoS атаке и ушли в даун. Охренеть просто, сегодня 10 мая, а они так и не поднялись.
Вот так и давят опен сорц и бесплатное распространение
Hi, коллективный разум!
Наблюдаю, что сейчас за 4200 р. можно купить SSD на 480G каких-то фирм LONDISK и AEGO. Может быть у кого-то из здешних есть опыт работы с этими дисками? Стоит ли их вообще покупать, надёжны ли они, выдают ли нормальную скорость при чтении/записи? Или лучше купить что-то дороже, но известных фирм?
Ссылки:
https://www.ozon.ru/context/detail/id/149533701/
https://www.ozon.ru/context/detail/id/147697896/
Download latest games for linux - <a href="http://trickzworld.com/best-websites-to-download-pc-games/">best pc game sites</a>
При переезде на i3-wm столкнулся с одной проблемой: при нажатии на кнопку включения ноута i3-wm сразу даёт команду на выключение без каких либо подтверждающих оповещений, что несколько не удобно. Было уже пару раз, когда экран был отключен в связи с простоем ноута, что можно перепутать с ждущим режимом и нажатие на кнопку выключения естественно приводило не к просыпанию ноута, а к его выключению.
Для управления питанием можно использовать управление от xfce, но хотелось бы сделать управление без сторонних утилит, к примеру если будет только i3 установлен.
Смотрел доки i3-wm, но как исправить проблему не нашел.
Подскажите как настроить реакцию на кнопку включения?
Сам разобрался, решил с остальными поделиться.
Когда мы монтируем флешку в консоли, мы вводим mount -t vfat /dev/sdb1 /mnt/flash
. При этом, русские имена файлов «кракозябрами», если не добавить параметр -o iocharset=utf8,codepage=866
. Почему iocharset это именно utf8, ведь во времена FAT этой кодировки не было? Потому что этот параметр указывает ту кодировку, в которую будет «переведена» исходная, и надо указать системную кодировку. Начиная с Red Hat 8.0 (а это примерно 2000 год) это UTF-8, соответственно и надо указывать utf8 (обратите внимание, без тире). Но если ваша система использует кодировку koi8r, то надо указывать её. Codepage 866 это русский регион (а например для США это 437).
Кодировка ASCII разделена на две половины. Первые 128 символов это английский алфавит, а также цифры, знаки препинания, символы псевдографики и так далее. Вторые 128 символов это буквы национального алфавита. В разных странах - разные кодировки.
Если у вас Gentoo, или любая другая конфигурация с самосборным ядром, то кодировку для FAT можно задать прямо в ядре. И тогда при монтировании флешки не придётся указывать те дополнительные параметры. В любом случае, во время автоматического монтирования при помощи системной слубжы HAL или udisks, всё само определяется и монтируется правильно.
Теперь давайте разберёмся, что такое vfat. Почему мы указываем именно её, а не fat16 или fat32? Что вообще за файловая система такая? vfat это расширение для FAT16 и FAT32, позволяющее в один и тот же момент хранить имя файла как короткое, так и длинное. Появилось в Windows 95. Подробнее тут: https://ru.wikipedia.org/wiki/FAT#VFAT Если очень хочется примонтировать без vfat, а только с поддержкой коротких имён, то -t msdos
. Естественно только FAT12 и FAT16.
Теперь exFAT. Эта файловая система появилась в 2006 году в Windows Mobile, Windows XP SP3 и Windows Vista. Дело в том, что релиз FAT32 не решил проблему с потерей полезного места на больщих дисках, а только отодвинул наступление этой проблемы. В exFAT эта проблема радикально решена, и флешки могут быть до 2 Тб размером.
В Linux есть 2 драйвера: exfat-fuse, exfat-nofuse. Первый создан сообществом по спецификации. Второй создан Samsung-ом для устройств на базе Android, скачать исходный код можно на сайте http://opensource.samsung.com/, введя название любой прошивки для любого смартфона и планшета. Там будет полный образ ядра Linux со всеми изменениями - в том числе и директория fs/exfat до ядра 4.4, и fs/sdfat начиная с ядра 4.4. Однако на Github всё уже есть: другие люди всё уже скачали и выложили отдельно (слава GPL). https://github.com/dorimanx/exfat-nofuse Кроме того, там наложено куча патчей со всякими улучшениями!
Кодировку указывать не надо: в exFAT это UTF-16, как и в NTFS. Но теперь надо указывать кое-что другое: ID вашего пользователя и группы. Для Debian это -o uid=1000,gid=1000
, для openSUSE gid равен 100. Хорошо что в форке на гитхабе нас избавили от необходимости так делать! А в оригинальном коде, если вы этого не сделаете, то вы не сможете записать файл на флешку. А если запишете от root, то не сможете прочитать этот файл на компьютере с Windows.
Но откуда такие проблемы? Дело в том, что в exFAT появился ACL... Это расширенные права. Если вы помните Norton Commander или Windows 95, вы помните что в «Свойствах файла» есть 4 галочки: «Только чтение», «Архивный», «Системный» и «Скрытый». Всего лишь 4, и всё так просто. Расширенные права добавляют ещё хренову кучу свойств файла...
Краткое описание проблемы:
машина имеет 2 сетевых интерфейса. Не получается добиться одновременной доступности этих интерфейсов по SSH. Т.е. всегда можно подключиться только к одному из интерфейсов в зависимости от настроек в /etc/conf.d/net
.
Детали конфигурации:
ОС: Gentoo, ядро 5.1.0
Интерфейсы:
- br0 имеет IP 192.168.0.150 в сети 192.168.0.0/24
- eth1 имеет IP 192.168.1.150 в сети 192.168.1.0/24
Вариант 1: есть только один интерфейс br0. Подключение по SSH успешно происходит:
bridge_br0="eth0"
bridge_forward_delay_br0=0
bridge_hello_time_br0=1000
config_br0="dhcp"
Вариант 2: добавляем eth1. Теперь получается подключиться по SSH ТОЛЬКО на интерфейс eth1, а на br0 уже не получается:
bridge_br0="eth0"
bridge_forward_delay_br0=0
bridge_hello_time_br0=1000
config_br0="dhcp"
config_eth1="192.168.1.150/24"
routes_eth1="default via 192.168.1.1"
Вариант 3: используем всё те же интерфейсы, но обоим выставляем DHCP. По-прежнему получается подключиться только на eth1, а на br0 не получается:
bridge_br0="eth0"
bridge_forward_delay_br0=0
bridge_hello_time_br0=1000
config_br0="dhcp"
config_eth1="dhcp"
Релевантные настройки SSH:
# /etc/ssh/sshd_config
ListenAddress 192.168.0.150:22
ListenAddress 192.168.1.150:22
# /etc/conf.d/sshd
rc_need="net.br0"
rc_need="net.eth1"
Вопрос: что нужно сделать, чтобы можно было подключаться на br0 при наличии eth1?
Всем добра!
Делаю туннель между двумя компьютерами (A, B) между ними роутер R
A ---- R ---- C.
- IP комп. A (192.168.1.1/24)
- IP комп. B (192.168.2.1/24)
на компьютере А создаю туннель следующей командой
ip tunnel add IPT mode ipip local 192.168.1.1 remote 192.168.2.1
ip link set dev IPT up
ip addr add 192.168.3.1/24 dev IPT
на компьютере C:
ip tunnel add IPT mode ipip local 192.168.2.1 remote 192.168.1.1
ip link set dev IPT up
ip addr add 192.168.3.254/24 dev IPT
Всё работает,всё движется.
Но вопрос не про это .
Вот чисто гипотетически. Не привязываясь к конкретной конфигурации и сфере применения.
вот если я делаю так на компьютере A:
iptables -t NAT -A OUTPUT -o eth0 -j DNAT --to 192.168.254.1
и на том же компьютере A:
ping -I IPT 192.168.3.254
я получаю отсутствие соответствующих пакетов на интерфейсе eth0 (комп. А). А ядро мне говорит, что у меня loop
Dead loop on virtual device IPT ...
А так работает
ping 192.168.3.254
Если я не ошибаюсь цепочка движения пакета с компьютера А (в том и другом случае) будет:
local process (ping) — routing decision — ... — netfilter output (-o IPT) — netfilter postrouting — вход на псевдо устройство tun (IPT) — ( ipip инкапсуляция ) — выход tun (IPT) — routing decision — ... — netfilter output (-o eth0) — netfilter postrouting — arp (link layer) — ...
Адреса такие же.
Что заставляет пакеты исходящие из eth0 вернуться в IPT (в бесконечном loop)?
Помогите, пожалуйста! Посоветуйте, что почитать. Интересно разобраться.
Спасибо.
Язык C не имеет встроенного механизма работы с ошибками. Но работать с ошибками как-то нужно, значит это придётся делать вручную.
Конечная цель — писать такие программы, где ошибка считается нормальным поведением. После ошибки можно прибрать за собой, написать в лог, в телеграм-канал, и самостоятельно заершить работу.
Прежде чем задать вопрос по поводу работы с ошибками, опишу своё исследование чтобы были понятны требования к механизму работы с ошибками.
Есть, например, функция, которая работает с файлами.
Попробуем в случае ошибки завершить работу программы:
void
kill_running_instance
(char *pid_file)
{
FILE *f = fopen(pid_file, "r"
;
if (f == NULL) {
fprintf(stderr, "can not open file for reading: %s: %s\n", pid_file, strerror(errno));
exit(1);
}
....
}
Проблема в том, что так мы не сможем вызвать код очистки. Попробуем исправить функцию:
void
kill_running_instance
(bool *ok, char *pid_file)
{
// reset error
*ok = true;
FILE *f = fopen(pid_file, "r"
;
// indicate error
if (f == NULL) {
bool *ok = false;
return;
}
....
}
Так мы сможем извне узнать — функция нормально выполнила свою работу или что-то пошло неправильно.
Здесь появляется главная проблема. Как узнать что конкретно пошло неправильно? Хотя бы для того чтобы записать ошибку в лог и в консоль:
bool *ok;
if (kill_running_instance(&ok, pid_file), !ok) {
// how can we find out what went wrong?
}
Это произошла ошибка открытия файла или ошибка чтения? Узнать это невозможно.
Небольшая заметка: посмотреть в errno
не получится. Эта переменная используется для уточнения ошибки, а не полного описания ошибки. Например, strerror(errno)
скажет Permission denied
, а как извне узнать к чему это ошибка относится — всё ещё неизвестно.
Чтобы решить эту проблему, я придумал возвращать не bool *ok
, а сообщение об ошибке и тип ошибки. Выглядит вот так:
void
kill_running_instance
(struct error *e, char *pid_file)
{
FILE *f = fopen(pid_file, "r"
;
if (f == NULL) {
ERROR_PRINTF(e, SYSTEM, "can not open file for reading: %s: %s", pid_file, strerror(errno));
return;
}
....
}
....
struct error e;
INIT_ERROR(&e);
if (kill_running_instance(&e, pid_file), e.is_set) {
print_error(&e);
deinit_error(&e);
goto cleanup;
}
Ошибка будет выведена в консоль. Это значит, что контекст ошибки нам известен извне. Это значит, что с этой ошибкой мы можем работать как захотим — писать в лог, отправлять по почте, etc. Таким образом, конечная цель выполнена.
Кстати, благодаря макросам известны имя файла и номер линии где был вызван ERROR_PRINTF
.
error
определён так:
enum error_type {
/*
Standard library function fails
*/
SYSTEM,
};
struct error {
enum error_type type;
char *msg;
bool is_set;
};
INIT_ERROR
присваивает структуре дефолтные значения.
Функция, раскрываемая макросом ERROR_PRINTF
, присваивает тип ошибки и сообщение об ошибке (сообщение об ошибке копируется, всё норм).
Теперь, собственно, вопросы.
Много ли Open Source проектов, где работа с ошибками организована похожим образом? Буду благодарен, если покажете.
Если в Open Source проектах с ошибками работают по-другому, значит, логично, они считают свой способ лучше моего. Можете показать как по-другому работают с ошибками и объяснить почему эти способы лучше моего?
Буду благодарен, если подскажите какие есть риски и недостатки в моём методе работы с ошибками.
Заранее спасибо.
может кто ставил и пользуются им на Arch + GNOME 3, GNOME Shell 3.32.1, xorg-xprop установлен, пробовал форк расширения, может еще есть аналоги чтобы при развернутом окне заголовок и кнопки убрать и поместить на верхнюю панель
версия из гитхаб работает наполовину, кнопка и заголовок наверху появляется но заголовок самого окна все равно остается https://github.com/pixel-saver/pixel-saver
Отправился искать оригинальный твит из данной темы, и случайно, через цепочку ссылок нашел вот такое:
Project: sdl12-compat
Кратко для Ъ: Ryan C. Gordon, известный разработчик портов игр под линукс, написал обертку вокруг SDL2, которая предоставляет ABI, совместимый с SDL 1.2.
Он позволяет запускать старые (в основном - проприетарные) игры, без установки в систему устаревшей и более не поддерживаемой SDL 1.2. Потенциально могут работать не только игры, но проект все еще в стадии вялотекущей разработки.
Киллер-фичи:
- Игры больше не захватывают ввод монопольно, ALT+TAB нормально работает
- Для полноэкранного режима используется SDL_WINDOW_FULLSCREEN_DESKTOP, с масштабированием на GPU если это надо. Игры больше не будут ломать вашу многомониторную конфигурацию!
- Приложения, использовавшие программный вывод 2d-графики средствами SDL, теперь прозрачно используют GPU-ускорение
- Поддержка Wayland, без необходимости изменять что-либо в самой программе
Видео-демонстрация: https://www.youtube.com/watch?v=3uVmUCuJpF4
Исходники тут: https://hg.libsdl.org/sdl12-compat
Код еще достаточно сырой, и в нем полно заглушек, но многие игры работают уже сейчас. Для корректной работы требуется SDL2 2.0.9
cast ZenitharChampion
Не получается валидировать multipart/form-data. Есть два поля: img (картинка) и alt (текст). Как правильно валидировать ситуацию, когда юзер картинку не передает? Делаю вот так:
type ImageUploadForm struct {
Alt string `form:"alt" binding:"required"`
Img *multipart.FileHeader `form:"img" binding:"required"`
}
func (ctr *imagesController) Upload(c *gin.Context) {
var imgForm forms.ImageUploadForm
if err := c.MustBindWith(&imgForm, binding.FormMultipart); err != nil {
c.Error(err)
return
}
/// Тут дальше обработка, к проблеме уже не относится
}
Код довольно сильно упростил, но, думаю, понятно. Проблема в том, что так не работает. То есть если не указать alt при сабмите формы, то MustBindWith кидает ошибку - все в порядке. Но если не отправлять файл в img, то MustBindWith ошибку почему-то не возвращает. Вопрос: почему и как сделать правильно?
P.s. в заголовке Content-Type передаю multipart/form-data - тут все ок
Мне в руки попал монитор и комп,вот такие:
https://ipc.msi.com/product/pages/ipc/MS-9A65.html
https://iiyama.com/by_ru/produkty/prolite-t1634mc-b4x/
Появилась идея сделать проект один.На python+kivy,который будет запускатся сразу же при старте системы и сама система не будет использоватся без нужды влезть в какие-то процессы.Просто монитор с одной программой которая будет постоянно включена.Встал вопрос какой дистрибутив выбрать.Я не самый уверенный пользователь линукс,сам сижу на убунте.Мне нужен максимально легкий дистрибутив,и что более важно с поддержкой тачскрина.
Приятель делал что-то подобное но на raspberry.
Использовал kivy-pie (http://kivypie.mitako.eu/). Я не уверен что
это система мне подойдет,но решил это учесть в сообщении.
Жду Вашего совета и заранее спасибо
При установке git на Ubuntu 18.04.1 LTS c помощью
sudo apt install git
получается такое:
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Некоторые пакеты невозможно установить. Возможно, вы просите невозможного,
или же используете нестабильную версию дистрибутива, где запрошенные вами
пакеты ещё не созданы или были удалены из Incoming.
Следующая информация, возможно, поможет вам:
Пакеты, имеющие неудовлетворённые зависимости:
git : Зависит: libpcre2-8-0 (>= 10.31) но он не может быть установлен
Зависит: liberror-perl но он не может быть установлен
E: Невозможно исправить ошибки, у вас отложены (held) битые пакеты.
я, грубо говоря, нуб в Линуксе, пытался вручную пакеты эти доставить - не получилось, пытался вручную git собрать - уперся в make / umake, которого тоже нет и при установке которого похожая история с пакетами, только, по-моему, другими. в общем, зашел в тупик.
заранее спасибо за помощь)
L.B.S.! На пути к максимальной комфортабельной индивидуализированности KDE нашёл замечательный виджет - «Global menu bar»(д. GMB) - пененосит titlebar с активного окна на панель и отлично экономит место на экране.
По дефолту GMB дружит с Qt и с другими стандартными приложениями KDE. Чтобы интегрировать GTK-приложения в GMB нужен соответствующий интерпрепатор, в репозиториях нашёл пакет - appmenu-gtk-module, благодаря нему некоторые GTK-приложения (напр GIMP) корректно взаимодействуют с GMB (Ф.1).
Однако некоторых других это не касается (напр: Firefox (Ф.2), Thunderbird (Ф.3), а также Audacity и Google Earth (он вроде на Qt, что особенно непонятно).
На одном из форумов (https://www.reddit.com/r/kde/comments/7voksl/kde_plasma_512_and_global_menu_g...) нашёл следующее:
Last release worked on Qt apps like KDE apps and VLC but applications like Firefox simply didn't work as it only displayed the first level menu items and you couldn't really use the menu. Now with the 5.12 release everything work as expected meaning you can have a global menu in the panel or menu button on the window bar and they will work regardless of the toolkit.
У TC Firefox успешно интегрирован в GMB (Ф.4).
Были у вас такие же проблемы с интеграцией Firefox и Thunderbird или это моя индивидуальная проблема? Может быть кто-то уже сталкивался с подобным и знает как их «подружить»?
Полагаю, довольно унылое чтиво. Благодарю всех и каждого.
Ф.4: https://i.imgur.com/QCeJac4.png
То ли я чего-то забыл в его использовании, то ли апдейты испохабили, но вот не пользовался им полгода или более и сейчас тыкаюсь, пыкаюсь как идиот.
Как нормально выбирать размер (Radius) кисти? Выбрал кисть. Из легко доступных регулировок только какой-то нахрен мне не нужный Spacing. Долго лазая по меню нашел «Brush editor», но в нем радиус серый, то есть не редактируется.
Чтобы редактировался надо сдублировать кисть как новую и все равно ползунок не меняет ее радиус почему-то, хотя и сдвигается.
В то же время я отлично помню, что еще прошлой осенью проблем с этим не было. Брал кисть и спокойно менял радиус на нужный в любой момент. Пара мазков одним, потом другим и т.д.
Ну не блин, на что я не на то нажал или не нажал или еще какая фигня. Причем в элементарном. Не я чувствую, что мне скажут RTFM. И если про rtfm-лю с полчаса или больше, наверное найду в чем дело. Просто запрос в гугл «изменить размер кисти» не помог сходу.
Ну ведь это же элементарное дело, что если выбрал кисть, то нужно и чтобы легко размер мог менять. Ё-моё.
А потом удивляемся, что люди называют Gimp не удобным.
Задача: как-то соорудить тв-антенну.
Пробовал скрутить из имеющихся проводов такую, но ловит только первый кАнал и тот с сильнейшими помехами...
Что если один провод от тв кабеля запитать в один провод из розетки, так скажем, что бы антеной стал веся проводка дома?
Не пыхнет ли телевизор?