<tagezi>
гитхаб это прежде всего облако для созранения того что нашёл и не хочешь потерять
<tagezi>
так что это иследование яйца выеденого не стоит
<JohnDoe_71Rus>
ну почему. иногда на собеседованиях спрашивают проекты на гитхабе
<tagezi>
а перевод темболее... кто-то взял статью, пропустил через гт и причесал как ему хотелось
<tagezi>
спрашивают, но свои проекты, показывать копипаст, это как сказать факофф работадатель, я просто ворую у вас время
<tagezi>
лучше показать только патч для чегото, чем месево
* tagezi
на прошлой неделе только вычищал свой гитхаб :)
<JohnDoe_71Rus>
свои проекты это хорошо. там и обсуждается что проект на JS тянет зависимостей 95% и только 5% получается полезного собственного кода
<tagezi>
да, и когда работодатель видит, что человек копипастит, а не использует зависимости, он сразу понимает, что у человека базовые знания
<tagezi>
а такие можно и не показывать, побольшому счету
<tagezi>
базовое знание по JS делается за пару вечеров
<JohnDoe_71Rus>
копипастить вынуждает ситуация. сегодня работает, завтра вчерашний код не работает, зависимости обновились
<mikekaganski>
На самом деле работодателю важно знать, что человек может решить задачу. Уровень знаний - это всего лишь один из показателей, характеризующих эту способность (единственно важную на самом деле)
<JohnDoe_71Rus>
и приходится рабучую версию тащить себе в git
<tagezi>
старые версии всегда остаются
<tagezi>
короче, это фигня..
<tagezi>
у меня тоже самое на гите было.. например скрипты для вим.. вот мне не разу не здалось каждый раз подстраивать их под себя, я скачал, настроил, а потом полумал что хорошобы их куданибудь выложить, чтобы не перенастраивать
<tagezi>
и естественно я не делал форк, а просто запульнул их туда
<tagezi>
в итоге у меня скопипащеный проект, с 10-15 строками правки
<tagezi>
да ладно, одним больше, одинм меньше, погоды не сделает
<tagezi>
если ты посмотришь регрессии в багзиле, то с ужасом сожешь обнаружить, что на каждое исправление ошибки, приходиться парочка новых регрессий
<tagezi>
а я много не исправлю
<mikekaganski>
:)
<tagezi>
mikekaganski: слушай, вот вопрос, там по уму, эти функции отличаются только хвостами
<mikekaganski>
ага
<tagezi>
и можно было бы заменить это всё на одну
<tagezi>
но, как обработать хвосты?
<tagezi>
раньше, я делал вспомогательную переменную, например булевую, и по ней определял что делать, но это плохой способ
<tagezi>
в большом проекте это будет железно ошибка
<tagezi>
как понять что вызвало ыункцию?
<tagezi>
функцию*
<mikekaganski>
Ты просто сделай функцию, которая будет возвращать четыре значения (через параметры-ссылки, например): nTitleSpaceWidth, nTitleSpaceHeight, nSecondTitleSpaceWidth, nSecondTitleSpaceHeight. А в этих функциях вызывай её и делай арифметику
<tagezi>
не понял
<tagezi>
там нужно понять, как считать aRet
<tagezi>
он по разному считается, по этому и есть этот копипаст
<mikekaganski>
Ну смотри: там вся логика - получить эти четыре параметра, а потом их вычесть/прибавить к соответствующим размерам прямоугольника
<tagezi>
да
<mikekaganski>
Ну вот, получение этих параметров - общая часть
<tagezi>
да
<mikekaganski>
а сложение-вычитание сотанется в этих функциях
<tagezi>
не
<tagezi>
так получиться просто вынос серидинки
<tagezi>
от //detect whether x axis points into x direction or not
<tagezi>
до расчета
<tagezi>
или я слишком многого хочу?
<mikekaganski>
Здрасьте. Так получится вынос 90%
<tagezi>
73% из всего повторения
<tagezi>
а если определить когда какую математику делать, тогда 100% из возможного
<tagezi>
:)
<tagezi>
видимо я слишком многого хочу
<mikekaganski>
не стоит усложнять. Код должен остаться читаемым
<tagezi>
ну тогда тут просто.. нужно сделать приватную функцию, передать ей 4 параметра и вернуть 4
<tagezi>
а можно же это разделить на 3 функции
<tagezi>
2 будут делать математику, а третья всю эту скопипасченую байду
<tagezi>
mikekaganski: не?
<JohnDoe_71Rus>
в большом проекте сложно наверно придумывать имена функциям
<tagezi>
а, нет
<mikekaganski>
tagezi: не меняй заголовок. Сделай статическую функцию (в безымянном namespace)
<tagezi>
mikekaganski: что значит безымянный?
<mikekaganski>
namespace { ... }
<tagezi>
так они тут все такие, кроме первого
<mikekaganski>
ну и хорошо, значит, всё, что в этих неймспейсах, не видно извне
<mikekaganski>
Погодь, кто тебе сказал, что это в безымянном неймспейсе
<mikekaganski>
Первый безымянный - строки 136-1029; второй - 1260-1266; третий - 1414-1564; дальше - 1980-2010; следующий уже после этих функций
<mikekaganski>
а сами они в именованном неймспейсе chart
<tagezi>
угу, вижу
<tagezi>
закрыл все безымянные и стало видно
<tagezi>
значит функцию мне нужно написать в неймспэйс который под ними?
<mikekaganski>
не, создай над ними
<mikekaganski>
под ними - будет им не видна
<tagezi>
а возвращвемый тип будет awt::Rectangle?
<tagezi>
не, sal_Int32
<tagezi>
так, сяп, пойду писать новый баг для ЛО, надеюсь все буду счастливы его ругать в багзиле :)
<kompi>
"пропал чат. сначала они будут обсуждать внесение изменений в код, потом они начнут портировать Либру на Qt..." (ц)
<mikekaganski>
:)
<tagezi>
mikekaganski: а как передавать xTitle_Height, xTitle_Width, xSecondTitle_Height, xSecondTitle_Width?
<tagezi>
этже контейнеры, какой у них тип получается?
<mikekaganski>
Не понял, зачем это передавать??? Это всё должно создаваться, использоваться и умирать во внутренней функции
<tagezi>
то есть я буду создавать это второй раз?
<mikekaganski>
ничего не понял. Они же тебе нужны только там, зачем их ещё где-то создавать?
<tagezi>
они участвуют в проверке существования в условии выше
<mikekaganski>
Погодь. Всё, что от строки 2099 до 2148, должно уйти в новую функцию, со всеми проверками
<tagezi>
а как математику сделать?
<tagezi>
математика в нутри иф
<mikekaganski>
как она есть, так и сделай. Если у тебя вернутся нули, какая разница?
<JohnDoe_71Rus>
где это виданно, где это слыхано.. папа решает, а вася сдает (с) :)
<tagezi>
ну, в теории да, aRet возвращается в любом случае
<mikekaganski>
Там же можно сделать по разному: можно возвращать булево значение об успехе, по которому проверять, нужна ли математика; а можно всегда делать математику, но проверять, что в когда надо возвращаются нули
<tagezi>
я только не уверен, что нули будут иметь смысл
<mikekaganski>
?
<tagezi>
так кудато далеко всё это проваливается, я не совсем понимаю почему математика делается только в том случае если есть pExplicitValueProvider
<mikekaganski>
У тебя есть некий прямоугольник; в случае, если .тамошние условия выполняются, к нему что-то добавляется; в любом случае этот прямоугольник возвращается.
<mikekaganski>
Теперь ты можешь сделать так: берёшь прямоугольник, получаешь значения инкремента, прибавляешь. А значения инкремента нулевые, если условия не выполнены. Что меняется?
<tagezi>
а зачем тогда его засунули в иф?
<mikekaganski>
??? В существующей схеме это имеет смысл
<mikekaganski>
ты же меняешь схему
<mikekaganski>
упрощаешь
<tagezi>
да, я же супер сишник :)
<mikekaganski>
ну, тут нужно не столько си, сколько проанализировать алгоритс
<tagezi>
ну, да.. я с тобой согласен
<tagezi>
почти, хотя до моего понятия проанализировать алгоритм, это очень далеко
<tagezi>
хотя да, он иницыализирован, так что по любому что-то вернётся
<tagezi>
да
<mikekaganski>
В данном случае ты "ухудшаешь" алгоритм в том смысле, что арифметика будет выполняться всегда, в т.ч. когда не нужна: дополнительные 6 целочисленных сложений
* tagezi
супер сишник и анализатор алгоритмов, просто очень тормазнутый :)
<mikekaganski>
это пренебрежимая величина. Ну, или всё же можно возвращать признак нужности арифметики
<JohnDoe_71Rus>
процы к тому времени подтянутся. и тормозов от лишних сложений не будет заметно :)
<mikekaganski>
да и сейчас не будет заметно. Это ерунда
<mikekaganski>
важны оптимизации не здесь
<tagezi>
да, я тебя понял
<tagezi>
осознал и исправлюсь :)
* tagezi
пошёл думать почему 6
<mikekaganski>
я имею ввиду, 6 сложений в случаях, когда вроде они не нужны (условие не выполнено)
<tagezi>
да
<tagezi>
вот ещё вопрос, а как правильно вернуть? у меня 4 целочисленных значения
<tagezi>
как массив?
<mikekaganski>
через параметры-ссылки bool foo(sal_Int32& param1, sal_Int32& param2, ...)
* tagezi
любит знать как проверить то что он натворил, имеено по этому
<tagezi>
никогда так не делал, но я думаю я разберусь
<JohnDoe_71Rus>
потом надо 4 часа собирать ЛО что бы убедится что ничего не сломал?
<tagezi>
не, думаю за час собирётся.. этоже только один модусь
<tagezi>
л*
<mikekaganski>
:)) Если ты не делал pull - соберётся за минуту. Ну, а пулл - это лотерея
<mikekaganski>
У нас за день набегает столько, что обычно я вечером пуллю, чтобы за ночь успеть
<mikekaganski>
tagezi: а можешь передавать в функцию прямоугольник и булево значение "отнять", и тогда уже всё вынести в эту отдельную функцию, а в исходных функциях оставить одну строчку
<tagezi>
ну я тебе это с самого начала говорил
<tagezi>
я не уверен что это хорошо
<mikekaganski>
ну да
<mikekaganski>
вполне хорошо
<tagezi>
эм
<tagezi>
а я уже почти разобрался как вернуть значение :)
<mikekaganski>
я просто размышляю. Можешь делать по всякому
<tagezi>
нет, нужно зделать одним способом, а то я потом сам не разберусь :)
<tagezi>
так, ты меня запутал
<kompi>
это как стили таблиц райтера, оно вроде работает, но так запутанно....
<JohnDoe_71Rus>
надо сделать 2 способами. недельку каждый погонять тестами. плюнуть на все и реализовать третьим
<tagezi>
mikekaganski: обясни мне тогда, почему нельзя сделать одной функцией? зачем параметры пересылать так много раз?
<mikekaganski>
addSubstractAxisTitleSizes -> AddSubstractAxisTitleSizes - потому что и Add, и Subtract равнозначны (а то выглядит как "Добавить вычитание")
<tagezi>
хорошо
<tagezi>
а то что я посылаю труе и фалс прямо так, нормально?
<mikekaganski>
погодь, ещё: правильно subtract, а не subStract
<mikekaganski>
там кто-то ошибся
<mikekaganski>
а как ещё передавать буль?
<tagezi>
эм.. не понял по поводу subStract
<mikekaganski>
не должно быть там буквы s
<mikekaganski>
Хороший коммит: убивает 63 строки кода. Одобрямс!
<kompi>
63 из 10кк?
<mikekaganski>
да, курочка по зёрнышку...
<mikekaganski>
ничего, такими коммитами мы воспитываем кодера, который потом добавит 100500 новых!
<kompi>
через 160000 коммитов код скатится к 0 строк
<tagezi>
да, иы ещё увидим кто ыстрее печатает.. колон или я :))
<mikekaganski>
Я как-то читал детскую книжку, в которой пацан всё усовершенствовал приёмник, убирая лишние детали, и хотел добиться, чтобы работал пустой корпус...
<tagezi>
он же может и не успеть создавать новые строки, пока я удаляю те что есть :)
<mikekaganski>
:)
<tagezi>
так, всё сломал :(
<mikekaganski>
Прекрасно. Как проверится - закину
<mikekaganski>
kompi: видишь, а ты говоришь муторно. Нормальный изихак. Так, помаленьку, и код чистится, и люди тренируются
<tagezi>
mikekaganski: первые два можно отменить
<mikekaganski>
ок, вижу
<kompi>
код не может чиститься бесконечно
<kompi>
вона Виталий сначало материлсо, а потом проникся
<kompi>
VitaliyAnderson: как жизнь?!
<tagezi>
с++ может
<tagezi>
и причем именно бесконечно
<tagezi>
всегда можно что-то улучшить, аптимизировать, сделать более читабельным
<tagezi>
а в опенсорс проекте, это вообще поле не паханое
<mikekaganski>
kompi: на неделе, если ничего не случится
<mikekaganski>
это значит, в последний момент (все хотят чего-нибудь успеть впихнуть)
<tagezi>
блин, реально дофига скопипасчиного кода
<mikekaganski>
это нормально :)
<mikekaganski>
и полезно от него избавляться
<tagezi>
он в разных файлах..
<tagezi>
иногда это просто кусов функции на 60 строк
<tagezi>
кусок
<tagezi>
можно конечно попробовать его вынести в отдельный класс, и в конструкторе класса реализовать эту функцию, но такими путями это вырастить в 100500 файлов
<kompi>
mikekaganski: ты делай смену ника, когда тебя нет =) на типа mikekaganski|evening
<tagezi>
зачем?
<tagezi>
и так понятно что он с семъей.. придет ответит
<mikekaganski>
ага :)
<mikekaganski>
сделай ребейс
<tagezi>
пульнёшь завтра значит :)
<kompi>
чтобы нас пристыдить и чтобы мы заткнулись
<kompi>
tagezi: ты юзаешь скриншотилку в Линукс? Какую?
<tagezi>
Prt Sc
<tagezi>
:)
<tagezi>
у меня кеды, тут какая-то встроеная, я особо не парюсь по этому поводу.
<tagezi>
меня больше интерисуют программы более низкого уровня
kompi has quit [Quit: Page closed]
<tagezi>
mikekaganski: вопрос есть, я тут думаю насчет этих трех повторений кода в файле
<tagezi>
там явно нужно выносить куски как функции
<tagezi>
но у меня вопрос есть, если функцию выносить в безымянный найм спейс, её нужно добавлять в hxx?
<tagezi>
или достаточно просто раньше всех использований указать?
<mikekaganski>
просто раньше всех укажи
<mikekaganski>
чем меньше в hxx, тем лучше
<mikekaganski>
kompi: "чтобы нас пристыдить и чтобы мы заткнулись" - это о чём?
<tagezi>
не знаю
<tagezi>
а то что в ней будут использоваться члены класса, это ничего?
<tagezi>
mikekaganski: а почему в hxx нужно по минимуму лазить?
<mikekaganski>
tagezi: если там нужны члены класса, может понадобиться добавлять эту функцию в класс - и тогда да, нужно менять заголовок
<tagezi>
а на последний вопрос ответ? :)
<mikekaganski>
Заголовки нужны чаще всего для того, чтобы предоставить клиентам интерфейс взаимодействия с классами или функциями. Ничего лишнего там быть не должно. А деталь реализации - это лишнее, что клиентам не нужно знать.
<mikekaganski>
ух ты, не дописался до телевизоров :)
<mikekaganski>
Если мы детали реализации прячем, то потом проще их менять, не затрагивая внешние модули
<tagezi>
так, стоп, причем тут клиенты?
<mikekaganski>
Клиент класса - это другой класс, или любой код, который использует наш класс
<tagezi>
если я делаю в hxx приват член, то он для клиента никакой интерес не преставляет
<mikekaganski>
да, но к сожалению, всё равно им виден
<tagezi>
но использовать они его не могут
<mikekaganski>
и при изменении его все файлы, которые включают твой заголовок, будут перекомпилированы
<mikekaganski>
поэтому если только можно, детали реализации стоит прятать так, чтобы следа их не было в заголовках
<mikekaganski>
конечно, *по возможности*
<mikekaganski>
если функции нужен доступ к членам класса, тогда ничего не сделаешь
<mikekaganski>
пуляй её в private
<tagezi>
понятно
<tagezi>
блин, свойства больших проектов
<mikekaganski>
:)
<tagezi>
ну, теперь я знаю.. потому что я никогда не задумывался об этом
<mikekaganski>
на самом деле за последние пару лет у нас настолько поменялось отношение к большим перекомпиляциям, что ой-ёй-ёй.
<tagezi>
когда есть смысл добавить в заголовок переменные или функции я их всегда добавлял
<mikekaganski>
Раньше каждое изменение, которое приводило к правкам в широко видимых заголовках, сопровождалось воплями
<mikekaganski>
сейчас чуть ни каждый день это происходит, и все к этому спокойно относятся
<tagezi>
насамом деле, сейчас оно перекомпилируется каждый раз как обновился.. и всегда почти полностью
<tagezi>
потому на ночь и ставим :)
<mikekaganski>
но всё же, если есть возможность, лучше заголовки делать минимально изменяемыми, то есть убирать оттуда всё, что можно