LINUX.ORG.RU

[python] нужна конструктивная критика кода

 


0

2

Здравствуйте, нужна конструктивная критика исходного кода проекта SnapFly - автогенерящегося PyGTK меню для *Box и других подобных оконных менеджеров.

В новости камрад fat_angel положил начало критике кода и предложил обратиться сюда, за более конкретной инспекцией на предмет всевозможных ляпов и казусов (что собственно я и делаю).

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

Заранее спасибо

Ответ на: комментарий от anonymous

В венде гуй не глючит и не тормозит?
Рад за венду.

anonymous
()

Код не смотрел, но. Что за функция IsInt? Чем не угодило, например,

isinstance(1, int)
? Почитал комменты. И с такими знаниями люди пишут на Python. У каждой тормозной питоновской аппликухи нужно сначала код посмотреть, чем язык хаять. Может дело не в языке, а в прокладке между креслом и клавиатурой.

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

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

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

Also, мы выпустили версию 0.5.6, в которой исправили почти все замечания высказанные как в этой теме, так и в новости на главной. Осталось переписать пару функций с кучей циклов, перевести сборку на setuptools и перенести все в более фен-шуйное место, нежели /usr/share/snapfly. Последняя версия как всегда в транке.

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

Я не программист и даже не учусь на него. Пару лет _лениво_ пишу под свои нокиафоны :) на мобайлпитоне.
Тех ошибок, что перечислили в комментариях не делаю уже давно.
Я ж вас не ругаю, я такого г... питон-кода насмотрелся уже.
Ваши ошибки скорее всего объясняются (прочитал новость о релизе, ага) недостаточным пока проникновением в нюансы языка. Или, возможно, это вообще код, унаследованный от adeskmenu.
Пока не подтянете, подобные ляпы будут возникать регулярно, так что не затягивайте.
А то я ведь думаю, если что-нибудь хоть немного хитрое спросить, сядете в лужу ).

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

Так это мой первый опыт использования питона, что вы хотели :)

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

>Код не смотрел, но. Что за функция IsInt? Чем не угодило, например,

Вы не поверите, искал в гугле как проверить переменную на int — нашел только способ, который можно увидеть в IsInt. Погуглил про isinstance — узнал, что и можно проверять и через

type(a) == int

и через isinstance(a, int) :)

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

>На всякий случай :)

никаких всяких случаев) любая оставшаяся переменная - это тормоз в вашем скрипте)

P.S. решил подправить код, чтоб сделать патч. Блин, патч размером с скрипт!!! Авторы, перепишите заново, потому что код ужасен, честно! :)

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

Ещё полезно прочитать про: isinstance(x, (A, B, ...)) Короче

>>> help(isinstance)

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

посмотрел свежий код: все те же неиспользуемые переменные, неиспользуемые импортированные модули, if colormap == None, авторы нихрена ничему не учатся, им надо показывать и тыкать носом в своё творение по пять раз!?

    except:
        print("# Error : parsing %s" % file)
        pass

нахрена тут pass?

Раз уж попросили чтоб посмотрели ваш код то будьте добры хоть делайте.

Просто сядьте и перепишите, потому что беда начинается у вас с оформления. После запятой идет пробел! А переменные нельзя инициализировать списком (widget=[],hideList=[] и т.д.), в циклах тем более. Строка должна быть <80 символов, ограничьтесь максимум пятью аргументами в функции :)

Блин, посмотрел код - нихрена почти не сделали. Зато print поменяли. Пишут на втором питоне а косят под третий. Пипец.)

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

>нахрена тут pass?

Кстати, хороший вопрос :) Насчет этого не задумывался.

А переменные нельзя инициализировать списком (widget=[],hideList=[] и т.д.), в циклах тем более.

Хм, а как тогда?

Строка должна быть <80 символов, ограничьтесь максимум пятью аргументами в функции :)

Ну это уже не обязательно же )

Блин, посмотрел код - нихрена почти не сделали. Зато print поменяли. Пишут на втором питоне а косят под третий. Пипец.)

Так я второй день с питоном работаю, что вы хотите :) Зато уже узнал экспресс курсом довольно много всего. Кстати, в чем принципиальное отличие 3-х print'ов от 2-х? Только синтаксис? Вообще, надо будет почитать на эту тему.

PS. Сейчас был проведен небольшой рефакторинг на тему избавления совсем уж страшных конструкций (вроде конкатенации строк, совсем уж лишних переменных). На втором шаге хочу переписать ф-ии MakeMenu, info_desktop и прочии, использующие кучу циклов. После этого еще раз причесать, и посмотреть, что получилось :)

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

> Ну это уже не обязательно же )

Но сильно рекомендуется.

Кстати, в чем принципиальное отличие 3-х print'ов от 2-х?

В 2 это оператор, в 3 функция.

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

Знаешь как ты меня напугал?
Можно и списком, только ресет их не забывать делать. :)

Пишут на втором питоне а косят под третий.


Для питона 2.7 это нормально, у него 2 и 3 синтаксис.

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

>В 2 это оператор, в 3 функция.

Ну это-то видно, я имел в виду по скорости :)

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

Хм, а как тогда?

У тебя так:

def func(param1, param2=None):
    param2 = param2 or []

Ну это уже не обязательно же )

уважай тех кто просматривает твой код, это приятно и увеличит желание тебе помогать. Код в конце концов пишется для человека. ;)

совсем уж лишних переменных

ты избавься от ВСЕХ лишних, а не по степени «совсемости лишнести» :D

Посмотри мои ранние сообщения, всё что писал - всё надо исправить. Если что - буду помогать. Только ёпрст, ДЕЛАЙТЕ! Если вам говорят, значит важно.

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

Так, а можно маленький вопрос по gtk.statusIcon.set_from_icon_name(icon)?

Есть у меня такая конструкция:

self.statusIcon = gtk.StatusIcon() self.statusIcon.set_from_icon_name(«snapfly»)

Всё работает (иконку по совету fat_angel кинул в /usr/share/icons/hicolor). Больше этой иконки нигде нету. Но у NomerUNO, при таких же условиях иконка для трея не загружается (само изображение). Теперь вопрос: где нибудь есть адекватное описание данной функции, точнее говоря, где будет производиться поиск иконки при вызове этой функции? Гуглил долго, но толи не там, толи не так...

PS. Код очищается, просто постепенно :)

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

self.statusIcon = gtk.StatusIcon()

self.statusIcon.set_from_icon_name(«snapfly»)

Конечно же

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

Выводит строку, а как внутри обрабатывает ­— это незнаю :)

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

Вот тебе спецификация http://standards.freedesktop.org/icon-theme-spec/latest/

В кратце hicolor в /usr/share/icons это тема иконок по умолчанию. Соответственно кидать иконку надо не в сам hicolor, а в поддиректории внутри нее. Посмотри ее структуру и увидишь там стандартные директории вида ${size}x${size} в которых будут поддиректории apps, mimetypes и т.д. Поэтому тебе желательно создать иконку в нескольких размерах и закинуть ее в директории ${size}x${size}/apps/. Если создавать несколько размеров не получается то кидай ее в scalable/apps внутри hicolor.

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

И замени уже этот ужасную, страшенную функцию find_icon из __init__.py соответствующими методами из вышеуказанного класса.

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

О, спасибо.

/me принял на заметку, что надо было гуглить по site:freedesktop.org :)

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

Ну, знаний у меня маловато) Но фор фан рад глянуть, вдруг чего путное из меня выйдет :) Тока при исправлениях, ускорений, патчей и т.д. - впиши меня в коммитеры (если наберётся конечно), ЧСВ потешу, да и кто знает, вдруг я хоть кодером стану :)

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

Но фор фан рад глянуть

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

впиши меня в коммитеры

Нивапрос. Чтобы не гадить в эту тему, можешь ишью или в мыло написать. :)

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

Около 60. Мин. функционал для работы есть. Отсутствуют некоторые плюшки, до возможного, запланированного релиза, в туду написаны.

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

Около 60.

Интересно. Посмотрю сейчас. А какие зависимости? Вы же вроде обещали «Python 2 and Python 3 projects support»

    class Common(QtCore.QObject, metaclass=Section):
                                          ^
SyntaxError: invalid syntax
shelA
()
Ответ на: комментарий от zJes

> Он написан на 3 питоне. :)

Эх, жаль нет у меня в Ubuntu 10.10 pyQT «из каропки» для третьего питона, а гемороится из-за посмотреть не охота, да обленился, а чё делать?))) Не ну позже наверно все таки посмотрю, тема интересная.

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

та же фигня. убунта 10.04, третий питон есть, но либ нету.)

Бананиу нэма коммитов не будет, но zJes, джаббер кидай, чтоб связался)

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

Нет, ну вот вы ленивые то! :)
zjesclean на гмыле.

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

> Так и напрашивается коронный вопрос - что я делаю не так?

Отвечаешь на тупой и неоригинальный троллинг (:

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

> А если к делу подходить с толком, то получаются хорошие приложения вроде quodlibet или sk1.

Неистово плюсую. Первый не тормозит даже на слабеньком нетбуке.

pevzi ★★★★★
()

перевел транк на setup.py
проверил в Agilialinux - вроде корректно собирается :)
Начиная с версии 0.6.4 сборка только через setup.py

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