LINUX.ORG.RU
ФорумTalks

Эпических обломов тред

 , , , ,


1

2

Только что со мной произошел инцидент, который можно сравнить с падением в открытый люк, появившийся из ниоткуда прямо перед шагом от обретения чего-то прекрасного - именно так я себя сейчас чувствую.

Ну, значит, просыпаюсь я среди ночи, чтобы отлить, и вдруг мне в голову приходит гениальное решение задачи, которая мучает меня на протяжении последней недели. Муза спустилась с небес! Мчусь к компу, чтобы сформулировать мысль в виде UML диаграммы (задача из сферы проектирования). Напроектировал целый табун классов, и тут, внезапно Dia исчезает! ... (см. первый абзац поста)

Полез я в журнал, а там:

kernel: dia[9196]: segfault at 7efcc38bce20 ip 00007efcc1d71a8b sp 00007fff1340e0e0 error 4 in libc-2.23.so[7efcc1cfd000+190000]

Сегфолт произошел после добавления очередного атрибута, коих я до этого добавил около сотни (размазанных по разным классам). Т.е. повторить такое специально, скорее всего, не получится, поэтому и багрепорт писать не о чем.

UPD: пока писал пост, наткнулся на файл в домашней директории - Диаграмма1.dia.autosave. Найти бы и расцеловать того, кто до этого додумался! Только странно, что сохраняется в ~/ - неаккуратно как-то.



Последнее исправление: Nietzsche (всего исправлений: 1)

чтобы сформулировать мысль в виде UML диаграммы

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

DawnCaster ★★
()

Только странно, что сохраняется в ~/ - неаккуратно как-то.

Много потерял? А то в коде такой комент:

If (auto)saving crashes you, this will really fuck you over!

mandala ★★★★★
()
Ответ на: комментарий от mandala

Если бы оно сохранялось куда-то в дебри, то вряд ли бы я на него случайно наткнулся. Но перфекционист во мне протестует.

Nietzsche
() автор топика
Ответ на: комментарий от mandala

Много потерял?

Все сохранилось ровно до момента добавления последнего злополучного атрибута. Отделался минимальными потерями :)

Nietzsche
() автор топика
Ответ на: комментарий от Nietzsche

перфекционист во мне протестует

12 лет назад твоего единомышленника послали нафиг:

https://bugzilla.gnome.org/show_bug.cgi?id=308774

Оно должно было после запуска сказать о автосохранённом файле, как я понимаю.

mandala ★★★★★
()
Последнее исправление: mandala (всего исправлений: 2)
Ответ на: комментарий от mandala

Такая реализация имеет право на существование, но я бы сделал все немного иначе. Как вариант: при следующем запуске после сегфолта пользователю бы сообщалось, что его данные в порядке и он может продолжить работу с последнего автосейва.

Nietzsche
() автор топика
Ответ на: комментарий от mandala

Оно должно было после запуска сказать о автосохранённом файле, как я понимаю.

Написал свой предыдущий пост до апдейта. Ну тогда разрабам зачетище.

Nietzsche
() автор топика
Ответ на: комментарий от Nietzsche

Оно должно было после запуска сказать о автосохранённом файле, как я понимаю.

Не спрашивает у меня. А, вижу, у меня тут git-версия а вней эту фишку выпилили.

Как вариант: при следующем запуске после сегфолта пользователю бы сообщалось, что его данные в порядке и он может продолжить работу с последнего автосейва.

«Это слишком сложно для юзера», убрали. :(

mandala ★★★★★
()
Последнее исправление: mandala (всего исправлений: 1)
Ответ на: комментарий от mandala

Можно понять и тех, кто добавил спрашивалку, и тех, кто убрал. Сам я не очень люблю назойливые попапы, но, с другой стороны, сегфолты каждый день не вылетают. Сюда бы подошло компромиссное решение: если dia была завершена аварийно (сегфолт, потеря питания, etc), то при следующем запуске показывалось бы сообщение о произошедшем инциденте с вариантом продолжения работы с последнего автосейва.

Из той реализации, что убрали:

If autosave files exist, ask the user if they should be restored

Т.е. это действительно могло раздражать.

Nietzsche
() автор топика
Ответ на: комментарий от Nietzsche

Не хватило запала доработать, бывает. Хотя там при штатном завершении просто автосейв удалять можно.

mandala ★★★★★
()
Последнее исправление: mandala (всего исправлений: 1)
Ответ на: комментарий от system-root

Мощная софтина, я бы попробовал, но жаль, что они решили закрыть сорцы.

Вот в dia я и сам могу поправить все, что меня не устраивает, не учитывая мнения разработчиков, которым мои идеи могут прийтись не по вкусу.

Например: Dolphin в сортировке по Date использует mtime, что для меня неприемлемо, т.к. когда качаю какой-нить файлик из сети, он нередко теряется где-то в дебрях директории Downloads, потому что у него mtime может быть каким угодно в отличии от ctime, который отражает время начала загрузки файла (последнее изменение прав доступа, но не суть). Так вот, накидал патч за пять минут, закинул его в директорию для патчей:

/etc/portage/patches/kde-apps/dolphin/ctime-sort.patch

Всё! Мой патч автоматом накладывается при каждом обновлении системы. Этой свободой я не готов поступиться.

К тому же я могу писать код для патчей настолько ужасно, насколько способен, потому его никто никогда не увидит (в случае с Dolphin это было актуально, так как я не пишу на Qt и мне проще было использовать средства стандартной библиотеки - такой патч у меня никогда бы не приняли).

Nietzsche
() автор топика
Ответ на: комментарий от Nietzsche

Вспомнил, почему пришлось делать костыль к дельфину. Первоночальный патч был элементарным:

- const KDateTime dateTime = item.time(KFileItem::ModificationTime);
+ const KDateTime dateTime = item.time(KFileItem::CreationTime);
..
- const KDateTime dateTimeA = itemA.time(KFileItem::ModificationTime);
const KDateTime dateTimeB = - itemB.time(KFileItem::ModificationTime);
+ const KDateTime dateTimeA = itemA.time(KFileItem::CreationTime);
+ const KDateTime dateTimeB = itemB.time(KFileItem::CreationTime);

Но в итоге ничего не получилось, т.к. по какой-то неведомой причине ModificationTime и CreationTime вели себя одинаково, а мне лень было копаться в кдешных либах (ошибка была где-то в библиотеке kio, может быть, и сейчас есть), поэтому костыль зарешал.

Nietzsche
() автор топика

Только странно, что сохраняется в ~/ - неаккуратно как-то.

Ты ж её наверное не сохранял ни разу в процессе правки — так что куда еще ему её по дефолту сохранять?

У меня вбит рефлекс: в любом новом документе в первую очередь Ctrl+S, а потом уже работа с документом. И Ctrl+S на автомате где-то раз в минуту.

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

Deleted
()
Ответ на: комментарий от Deleted

ctime есть, но он значит не дату создания файла, а дату последнего изменения метаданных (inode change time)

Nietzsche
() автор топика
Ответ на: комментарий от Deleted

Твой пост навел меня на мысль, что разработчики kde тоже относятся к ctime, как creation time, они ведь его так и обозвали - KFileItem::CreationTime, а так как creation time в линуксах действительно отсутствует, то и они решат не реализовывать этот функционал. И, о чудо, я был прав!

https://github.com/KDE/kdelibs/blob/KDE/4.14/kip/kio/kfileitem.cpp#L350

        KDE_struct_stat buf;
        if ( KDE::stat( m_url.toLocalFile(KUrl::RemoveTrailingSlash), &buf ) == 0 )
        {
            setTime(KFileItem::ModificationTime, buf.st_mtime);
            setTime(KFileItem::AccessTime, buf.st_atime);
            m_time[KFileItem::CreationTime] = KDateTime(); // <------ THIS
            return m_time[mappedWhich];
        }

KDateTime()

KDateTime::KDateTime() Constructs an invalid date/time.

Такой патч должен работать:

- m_time[KFileItem::CreationTime] = KDateTime();
+ setTime(KFileItem::CreationTime, buf.st_ctime);

Я бы еще CreationTime переименовал в какой-нибудь InodeChangeTime, чтобы людей не путать.

Nietzsche
() автор топика

а вот нехер в продакшн валить с проверенной четвёрки! не вые**улся бы, всё хорошо бы было.

darkenshvein ★★★★★
()

Напроектировал целый табун классов, и тут, внезапно Dia исчезает!

ручка и листик, для пацанов, остальное потом, когда мысли оформятся. бонусом идёт - возможность рисовать сидя на толчке +)

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

бонусом идёт - возможность рисовать сидя на толчке +)

Я так однажды Си выучил - K&R листал на толчке вместо журналов (в те времена еще не было смартфонов способных заменить бумажное туалетное чтиво).

Nietzsche
() автор топика
Ответ на: комментарий от imul

Уровни эпичности и обломности - величины относительные, а значит не могут подпадать под указанный пункт. Иначе любой, кто пишет в этот тред недостаточно (?) эпично-обломные истории подпадет под 4.2.

Nietzsche
() автор топика
Ответ на: комментарий от Nietzsche

Ты не в военкомате, не отмазывайся.

imul ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.