Предстоит тут писать дипломную работу в направлении информационной безопасности, но не могу найти действительно интересную мне тему. Хотелось бы разработать какое-нибудь ПО и сделать некоторый вклад в развитие линукса. Например, пару развстречал здесь на лоре, что не хватает нормального инструмента для мониторинга трафика по процессам. Насколько актуальна эта проблема? Чего конкретно не хватает в nethogs и atop с модулем netatop (про который, к слову, в интернете крайне мало упоминаний)? Еще не лишним было бы сказать, что на работу осталось менее трёх месяцев.
Поставил NightSky и обнаружил, что игра работает с раздвоенным экраном и неправильными цветами: скрин. Cogs из прошлых хамблов вел себя точно так же, когда я его ставил несколько месяцев назад. У кого есть мысли, куда копать? Ideos X5, Cyanogenmod 7.1.0, Android 2.3.7.
После обновления GTK до 3.4 появился один забавный баг. Как воспроизвести:
1. Запускаем любое приложение на GTK3 (например, nautilus). 2. Немного поперемещаем окно за пустое место на панели. 3. Открываем меню в этом приложении. 4. Профит — оконный менеджер падает.
Воспроизводится с openbox, с другими WM не пробовал. Кто-то еще сталкивался? Может, уже где-то есть багрепорт?
Писал тут игру на конкурс, и в самый последний день заметил, что при перезапуске уровня происходит жестокая утечка памяти: создается новый экземпляр уровня, а старый не удаляется, хотя внешних ссылок на него не остается. Поразмыслив и погуглив, пришел к выводу, что причина — циклические ссылки у объектов с деструкторами (gc их собрать не может ввиду неопределенности порядка вызова деструкторов). Был несколько огорчен, ибо немалая часть логики была завязана именно на циклических ссылках.
Вот ссылка на ревизию, в которой я еще ничего не пытался исправлять, а вот мои потуги в исправлении. Основная суть в level.py, player.py и game.py, в последнем из которых на 84 строчке пересоздается и утекает уровень. В общей сложности в игре чуть более тысячи строк, но интерес представляют всего где-то 600.
Какие циклы увидел я:
В game.py для space добавляются collision handler'ы — в level.space сохраняются ссылки на коллбэки, являющиеся методами level, т.е. фактически образуется цикл level → space → level. Вроде как решил переносом space в game.
player хранил ссылку на game (т.е. game → player → game), чтобы иметь возможность после смерти образовать капли крови и затем вернуться на чекпоинт. Решил передачей game в качестве параметра хэндлеру on_die.
Практически каждый класс в модуле level.py содержит ссылку на shape — объект типа pymunk.Shape. Но так как в collision handler передаются только ссылки на space и arbiter, из которых можно получить только физические объекты (тела и фигуры), мне нужно, чтобы фигура хранила еще некоторую дополнительную информацию (например, цвет у краски, next_level у выхода, id у триггера и прочее). Изначальное решение состояло в self.shape.sprite = self у объекта, что являлось явной циклической ссылкой. Решено частично, ибо при рисовании кляксы (level.py:365) мне нужно сразу обновить текстуру целевого объекта (т.е. нарисовать маску), а значит необходимо из фигуры иметь доступ к методу update_texture.
Из-за частичного решения третьего пункта и, вероятно, еще каких-то неучтенных деталей потребление памяти не уменьшилось.
Собственно, вопросы:
Все ли циклические ссылки я нашел?
Правильно ли я от них избавился, или это больше похоже на костыли, и ситуация требует пересмотра вообще всей архитектуры кода?
Нужно ли было вообще от них избавляться, или все можно было решить гораздо проще?
Как все-таки быть с обновлением текстуры, на которую был нарисован Blot?
Еще интересно, почему повышается потребление только VIRT памяти, а RES стабильно остается на уровне 40 мб, но это не мешает игре со временем уходить в своп.
Если у кого-то есть время и желание, большая просьба помочь разобраться с этими вещами.
Внезапно вспомнилась мелодия одна, набросал в seq24. Может кто знает, что это такое? За полное соответствие оригиналу не ручаюсь, но тот кто слышал, думаю узнает и так.
Пятиминутка глупых вопросов.
Где-то год назад заказал товар на eBay и успешно его оплатил. Но только потом заметил, что случайно тыкнул кнопку заказа дважды (не помню уже, каким образом это получилось), и, конечно, создался case о неоплаченном товаре. Перерыл ебеевский хелп на тему того, как можно от этого case избавиться, нашел что-то вроде «связаться с продавцом». Связался, написал ему, что заказал второй раз случайно, с намеком на то, что меня можно бы и помиловать. Ответа не поступило, через какое-то время case закрылся, а мой аккаунт оказался suspended (непонятно только, почему — в справке написано, что блокировка происходит когда накопится несколько неоплаченных товаров, у меня же он был только один).
Ну и главный вопрос: что теперь вообще можно сделать? Писать в техподдержку ебея неразумно — все-таки забанили за дело.
Неожиданно наткнулся на такую вещь: DjangoZoom.
Как я понял, это такой Heroku, только для Django-приложений (cloud application platform). Судя по видео, все очень даже замечательно и удобно, правда нигде не могу найти сколько оно будет стоить, сколько места дают и прочее. Сейчас находится в состоянии закрытого бета-теста, но есть возможность запросить инвайт. Кто-нибудь уже пробовал?
PS: да, там же узнал еще про Mezzanine, CMS на Django. На первый взгляд очень симпатишно, хорошая альтернатива всяким Plone, Django-CMS и Pinax. Список возможностей таки впечатляет.
Извиняюсь за невнятный сабж, но захотелось странного. Установлен у меня некий пакет foo, но нет собсно исходного файла пакета tar.gz. Вот именно его и нужно создать. Какой есть простой способ сделать это?
Раньше юзал laptop-mode, который автоматически гибернейтил ноутбук при низком заряде батареи. Но его работа походу зависела не только от уровня заряда батареи, но и от расположения звезд, потому что при заданных 4% он гибернейтил ноут то при 3%, то при 1%, а то и вообще не успевал. Решил в итоге пересесть на gnome-power-manager, который просто отлично выполнял свои обязанности и чётко при нуле всегда успешно и вовремя гибернейтил систему. Но при обновлении до гном3 оно стало просить запущенный gnome-settings-daemon, который мне нафиг не нужен на моем уютном опенбоксе. Поэтому вопрос: чем можно его заменить?