Интересно, можно без копания в уравнениях и познаний в OpenGL (WebGL) за день просимулировать и визуализировать видимый (лазерный) луч, отражающийся от одного зеркала в другое, от которого отражается в линзу, по прохождении которой попадает на поверхность. Важно только задать позиции зеркал и их наклон, а также зависимость изменения угла при прохождении линзы и получить координаты луча на поверхности.
Как известно swap можно размещать не только в отдельном разделе но и в обычном файле на существующем разделе, но не рекомендуется по понятным причинам: дополнительная прослойка намекает на меньшую производительность.
Понадобилось заархивировать (и сжать) 1 ТБ диск (забитый где-то на треть) так, чтобы можно было сохранить простой доступ на чтение. Ничего лучше кроме squashfs не нашёл. Зато как раз вовремя подоспела поддержка zstd в ядре (пришлось разве что самому собрать свежий squashfs-tools). В итоге получилось, и быстрее, и без потери в размере (189 ГБ zstd против 193 ГБ gzip).
Сохранил образ с диска и создал раздел, на который через dd записал squashfs образ. Потом примонтировал и проверил на целостность: md5sum -b /mnt/sqfs/raw.hdd.img. Диск этот - внешний 2,5" USB2, так что максимум чтение 30 МБ/с (зато вне зависимости начало диска или конец). Получилось где-то 260 минут.
На всякий случай, решил сделать ext4 раздел минимального подходящего размера с -m 0 -T largefile4 и просто переписать образ в виде файла. Примонтировал, запустил проверку. Закончилась через... 160 минут. Не ожидал.
Выходит, или я что-то упустил, или мне выгоднее оставить тот ext4 раздел с единственным файлом-образом (разве что каждый раз при автомонтировании появляется предупреждение, что на нём осталось слишком мало места)?
Есть большие файлы, так что каждый раз начинать сравнение с нуля нерационально. С помощью rdiff сделал delta-файл. Как бы теперь увидеть изменения в человеко-читаемом виде?
Есть другие варианты?
P.S. xdelta3 3.0.11 с -B536870912 (512 MB) вылетает из-за нехватки памяти. Да и есть ли что-то для визуализации vcdiff?
В условиях необходимости экономить трафик, и чтобы избежать создания по отдельному подключению на каждый ящик на сервере (ограничение IDLE), нужно чтобы сервер поддерживал как минимум IMAP расширения BINARY, COMPRESS, NOTIFY. Вроде как dovecot такое умеет, даже больше. (Есть ещё какие-то интересные расширения для описанных целей? Что-то для поиска на стороне сервера точно нужно). И ещё нужен THREAD.
Но такие старые и заслуженные сервера как mail.ru и yandex.ru изобретают велосипед (зачем?) и поддерживают разве что IDLE и BINARY (только yandex, да и то иногда неработающий). Остаётся разве что поднимать у себя dovecot, синхронизировать почту в обе стороны и устанавливать связь уже со своим сервером. Или есть всё же европейские публичные сервера с необходимыми расширениями?
Ещё есть проблема с отправкой писем: одно и тоже сначала отправляется по SMTP, а потом копируется по IMAP в Sent. Как можно это побороть?
usb 2-1.2: new high-speed USB device number 4 using ehci-pci
...
usb-storage 2-1.2:1.0: USB Mass Storage device detected
scsi host9: usb-storage 2-1.2:1.0
После umount с помощью udisksctl power-off можно обесточить подключённый USB HDD:
udisksd[5178]: Powered off /dev/sde - successfully wrote to sysfs path /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/remove
После этого ссылка /dev/bus/usb/002/004 на него удаляется. Но как теперь без отсоединения/присоединения кабеля снова включить диск?
11 лет назад пришло счастье Manual driver binding and unbinding: отпала необходимость в rmmod всего драйвера из-за одного устройства. Но с USB этого не достаточно: одно устройство - это целый hub. Т.е.
приводит к отсоединению/подсоединению всех остальных USB устройств, висящих на той же шине. Вроде не так страшно, пока одним из них не оказывается ещё один переносной диск/флешка.
Так как же вернуть мой 0000:00:1d.0/usb2/2-1/2-1.2 снова в рабочее состояние? Какой-нибудь rescan usb хаба?
Zmicierпредложил привести пример заимствования кода одним открытым проектом из другого открытого проекта, причём в одном из них код GPLнут. Вот сейчас наткнулся на эпический пример надевания GPL на crc32, crc32c (VirtualBox) <-> crc32c.c (NetBSD), crc64, реализация которых, мне кажется, достойна ни то что BSD, а является уже общественным достоянием (public domain). Там у виртуалбокса и дальше идёт подобный код в common: https://www.virtualbox.org/svn/vbox/trunk/src/VBox/Runtime/common/ Вот нужно было называть не public domain, а common code in public domain. Тогда было бы ещё очевидней.
Хотя бы в crc32.c Оракл признаётся, что код основан на:
* This code is based on:
*
* CRC32 code derived from work by Gary S. Brown.
*
* COPYRIGHT (C) 1986 Gary S. Brown. You may use this program, or
* code or tables extracted from it, as desired without restriction.
Но зачем на оригинальное «без ограничений» было накладывать лицензию, отличающуюся от public domain / unlicense?
Ещё пример: вы ищете в вашем коде расширение файла, но ваш код не GPL? Тогда Оракл придёт к вам:
/* $Id$ */
/** @file
* IPRT - RTPathExt
*/
/*
* Copyright (C) 2006-2016 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* you can redistribute it and/or modify it under the terms of the GNU
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*
* The contents of this file may alternatively be used under the terms
* of the Common Development and Distribution License Version 1.0
* (CDDL) only, as it comes in the "COPYING.CDDL" file of the
* VirtualBox OSE distribution, in which case the provisions of the
* CDDL are applicable instead of those of the GPL.
*
* You may elect to license modified versions of this file under the
* terms and conditions of either the GPL or the CDDL or both.
*/
/*********************************************************************************************************************************
* Header Files *
*********************************************************************************************************************************/
#include "internal/iprt.h"
#include <iprt/path.h>
RTDECL(char *) RTPathSuffix(const char *pszPath)
{
const char *psz = pszPath;
const char *pszExt = NULL;
for (;; psz++)
{
switch (*psz)
{
/* handle separators. */
#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
case ':':
pszExt = NULL;
break;
case '\\':
#endif
case '/':
pszExt = NULL;
break;
case '.':
pszExt = psz;
break;
/* the end */
case '\0':
if (pszExt && pszExt != pszPath && pszExt[1])
return (char *)(void *)pszExt;
return NULL;
}
}
/* not reached */
}
Абсурдно, нет? Там есть и однострочники (но с длинной GPL, по крайней мере по сравнению с длиной «кода»).
Именно из-за подобных примеров каждый раз, когда я вижу кусочки GPL-кода, которые не решают полностью какую-то уникальную задачу, я предполагаю, что они подпадают под fair use.
Домашняя удалённая система на 4GB флешке, бывает, сбоит:
[Thu Oct 27 12:01:59 2016] sd 10:0:0:0: [sdg] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[Thu Oct 27 12:01:59 2016] sd 10:0:0:0: [sdg] tag#0 Sense Key : Medium Error [current]
[Thu Oct 27 12:01:59 2016] sd 10:0:0:0: [sdg] tag#0 Add. Sense: Unrecovered read error
[Thu Oct 27 12:01:59 2016] sd 10:0:0:0: [sdg] tag#0 CDB: Read(10) 28 00 00 4b 70 58 00 00 08 00
[Thu Oct 27 12:01:59 2016] blk_update_request: critical medium error, dev sdg, sector 4943960
[Thu Oct 27 12:01:59 2016] Buffer I/O error on dev sdg2, logical block 524299, async page read
Иногда после такой ошибки / (/dev/sdg2) переходит в ro. Как бы его оттуда вытащить без перезагрузки?
Бесконечный цикл:
# mount -o remount,rw /dev/sdg2
mount: cannot remount /dev/sdg2 read-write, is write-protected
# dmesg -T | tail -n1
[Thu Oct 27 12:35:52 2016] EXT4-fs error (device sdg2): ext4_remount:4707: Abort forced by user
# blockdev -v --getro /dev/sdg2
get read-only: 0
# blockdev -v --setrw /dev/sdg2
set read-write succeeded.
# fsck /dev/sdg2
fsck from util-linux 2.28.2
e2fsck 1.43.3 (04-Sep-2016)
debianroothome contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (122865, counted=122944).
Fix<y>? yes
Free inodes count wrong (70515, counted=70521).
Fix<y>? yes
debianroothome: ***** FILE SYSTEM WAS MODIFIED *****
debianroothome: ***** REBOOT SYSTEM *****
debianroothome: 150663/221184 files (0.4% non-contiguous), 760768/883712 blocks
# fsck -f /dev/sdg2
fsck from util-linux 2.28.2
e2fsck 1.43.3 (04-Sep-2016)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
debianroothome: 150663/221184 files (0.4% non-contiguous), 760768/883712 blocks
Перезапуск удалённо не имеет смысла: обнаруживается, что ФС с ошибками, которые нужно фиксить вручную, что совсем некстати. Когда потом из initrd запускаю fsck, всё фиксится и грузится дальше. Но в чём разница? В флешке что-то ресетится при перезапуске?
Кстати, на простых флешках есть wear leveling? Иначе его отсутствие могло бы быть объяснением чрезмерно быстрого износа одних и тех же секторов, хотя общее кол-во записанного совсем небольшое.
Иногда при создании закладок для вкладок, которые не открывались после восстановления предыдущей сессии, у них пустует поле Name. Вместо заглавия страниц виден только адрес, что мешает поиску. Насколько я понял, это может произойти, если создавать закладки после того, как пришлось восстанавливать предыдущую сессию после падения firefox. У меня много вкладок, и нередко firefox не в состоянии нормально завершится: спокойно ждёшь, а он всё равно в segfault.
Как бы автоматизировать процесс нахождения закладок с пустующим заголовком, и установкой его в титул соответствующей страницы (включая обновление favicon)?
Каждые 24 часа происходит автоматическая смена IP-адерса провайдером. И up-трафик заметно падает. После рестарта демона всё приходит в норму.
Давно откладывал этот вопрос, так как кажется, что такого не может быть. Ведь поменялся адрес - ну отвалились пиры. А после очередного анонса о смене адреса можно уже забыть. Но факт.
Ещё 2,5 года не прошло, а в смарте одного из моих wd red обнаружил одну raw read error. Пошёл смотреть на каком именно LBA он споткнулся, но... не нашёл. Странно, винт ведь более дорогой (типа для домашнего NAS), а играет со мной в прятки. Может, есть какой-то способ быстро получить этот номер? Пока я запустил long test. Но это же часов 7. И винчестер ведь точно знает, какой блок он не прочитал.
В норме: Выход Debian 8.1 (08.06.2015), Выпуск Debian 8.2 (06.09.2015), Debian 8.3 (23.01.2016). А эта новость вдруг стала «минорным релизом»: Debian 8.4 (02.04.2016). Ведь не каждую неделю, а раз в три месяца выходят. Так почему вдруг? Ведь теперь получается, что Debian 8.4 согласно ЛОРу и не выходил (т.к. есть новости только про 8.1, 8.2 и 8.3).
Есть линукс хост. Самостоятельный. Есть и виндовс-акканут. Пароли разные. После поднятия самбы на хосте другие видят имя хоста. Но как самбе удаётся зарегистрировать имя хоста на виндвовом сервере (без пароля)?
Необходимо это повторить (на Си, к примеру).
Настроить dnsmasq для DHCP & hostname было просто. В винде же это, вроде, разные вещи. С DHCP всё просто. А вот с запросом имени не так. Т.е. если его запрашивать по в dhcp request'е винда это игнорирует. А самба использует NBNS?
Последующие действия проводятся на исправной ext4.
В debugfs можно протестировать блок на используемость и принадлежность:
debugfs: testb 11465694
Block 11465694 marked in use
debugfs: icheck 11465694
Block Inode number
11465694 1308606
debugfs: ncheck 1308606
Inode Pathname
1308606 /path/to/filename
Если блок не используется:
debugfs: testb 11465707
Block 11465707 not in use
debugfs: icheck 11465707
Block Inode number
11465707 <block not found>
Кстати, что означает не используется? В нём не лежат метаданные и в данный момент он не является частью какого-либо файла? Или что-то ещё?
А как понимать вот это:
debugfs: testb 5242939
Block 5242939 marked in use
debugfs: icheck 5242939
Block Inode number
5242939 <block not found>
Это как раз смахивает на мой вопрос: если блок используется, но в нём находятся метаданные, как узнать, какие именно? Только brute-force по всем метаданным?
Андроидная прошивка от Самсунга, tar.md5, это обычный tar с прикреплённым md5. Извлёк из него boot.img. Потом с abootimg -x boot.img получил zImage. Дальше можно и его в Image распаковать. А дальше? Попадался кому скриптик, который найдёт и распакует прикреплённые (надеюсь) во время сборки ядра сжатые скриптиком scripts/kallsyms.c ядерные символы?
Вы пишете патч, его используют, но автор, получается, не вы. Обидно? Например, в [1] опубликован патч, в ответ - тишина. Спустя почти 4 месяца без спасибо - баг исправлен. В [2] видно, что автор - главный программер проекта (который при этом ещё и один из самых первых и известных разработчиков ядра). А предложенное улучшение вообще проигнорировано.
Есть диагонально противоположный случай. Например, если вы хотите комитнуть в какой-нибудь проект гугла, то необходимо «подписать» с ними соглашение. Т.е. даже если вы хотите исправить опечатку, гугл признаёт и заботится о вашем праве на авторство, но и хочет обезопасить себя. Есть и другие проекты, которые требуют подобного. А теперь представьте, вы находите проблему с безопасностью в одном из таких проектов, пишете патч и... устанавливаете на него лицензию, которая свободная, но конфликтует с каким-нибудь пунктом лицензии проекта, и этот патч не имеют право принять. Но! Этот патч исправляет очень острую проблему, которую нельзя вот так теперь оставить. С другой стороны, вы являетесь автором, и никто не имеет права взять ваш кусочек кода и сказать, что это «тривиальный» фикс (хотя его обнаружить было далеко не тривиально), и мы имеем право и так его закомитить.
А есть и вариант между ними. Вы написали патч, но один к одному его не могут принять. Помимо варианта, когда вас будут доставать до тех пор, пока вы сами его не приведёте в идеальный вид, и его можно будет закомитить (но только когда никому не особо важно быстрее получить эти изменения), есть два других варианта. Первый: комитер берёт и сам меняет патч, ставит себя в авторы, а вас где-то в комит-комментарии, что, мол, основано на таком-то патче. Вариант второй: создаётся ветка, ваш патч комитится, а потом второй патч облагораживает его, ветку «атомарно» сливают куда надо (т.е. ваш «сырой» патч ничего не может испортить). В итоге - вы автор оригинально патча, а комитер - автор изменений. Всё ясно и понятно. Есть какие-то оправдания первого варианта? И как агитировать на применение исключительно второго варианта?
Частенько в открытых проектах можно видеть образцы кода, примеры, которые тем не менее защищены GPL/LGPL,.. Эммм... Какая тут логика? Ведь это код, который будет в любом проекте, который будет использовать данную библиотеку. Одно дело защищать код библиотеки, но что за бред защищать такой код? И действительно вообще в данном случае лицензионное ограничение?
Бывает, встречаю статьи о том, как сделать что-то нехитрое, использовать какую-то либу. И... автор указывает, что его примеры лизензируются под GPL. Ну, 100%, что точно такой же код существует в куче проектов, использующих эти либы. И лицензии там 100% самые разные. Кто прав? И если авторы подобных статей не правы, кого вообще в подобных случаях оповещать о нарушении? Вот если кто-то нарушает GPL, то куда писать все знают. А если кто-то не в праве в конкретном случае использовать GPL, то тогда куда?
Патентование алгоритмов - это зло. А что если GPL наложена на код, который можно назвать вариантом псевдокода алгоритма, который совпадает с C? [3] Мне кажется, что такая практика - это тоже зло. И, похоже, со мной согласны: вот, например, проект [4] использовал одну из «GPL»-функций. А у проекта лицензия BSD [5]. Упс.
Ух, пока всё. Внимание, ПРОСЬБА: конструктивные ответы и критика по пунктам. Особенно интересен опыт пишущих патчи и использующих чужой код в реальных (внутрефирменных тоже) проектах.
Достал внешний usb-винт toshiba, в котором сидит 2-терабайтный винт от них же. Раньше такого ещё не наблюдал: отправил винт в длинный смарт тест, и через минуты 3 он пошёл спасть! hdparm -S не лечит. В логе: тест прерван хостом. Пришлось читать регулярно рандомный сектор, но хотелось бы решить это культурно.
при подключении через HDMI < 2.0 будет, разумеется, более зернистая, но по-прежнему чёткая картинка?
HDMI vs DisplayPort: YCbCr 4:4:4 == RGB? Только ошибки округления или ещё что-то?
input lag из-за HDMI? Если через DisplayPort его не будет? Где-то 2 кадра / 34 мс уходит на конвертацию цвета или на что?!
3D: mpv / vlc умеют вывести на 4k TV 3D из встречающихся в сети видео? При разрешении 3840x2160 можно получить FullHD 3D (а не только половину вертикального разрешения)?
Как насчёт мерцания при невысокой яркости и шрифтов?
Panasonic ещё год назад гордилась, что они единственные встраивают DisplayPort, но в этом году, вдруг, его больше нет. Что произошло? Они как и все тоже были уверены, что AMD и intel вот-вот выпустят (интегрированные) карточки с HDMI 2.0?