вандерн — такое себе — во многих местах в Альпах даже с тропинок сходить нельзя
Поверьте, в Альпах достаточно тропинок, с которых вам и не захочется сойти. Альпинизм и скалолазание тоже никто не отменял.
Гриль разрешен в обустроенных местах. Квадроциклы и джипы я бы и сам запретил, потому что они разрушают природу. МТБ — а чем вас не устраивают маршруты? По-моему это даже круто, тем более их столько, что ездить не переездить.
Это правда, но кредит становится действительно выгодным через 3-5 лет, когда выплаты за регистрацию и штрафы банку становятся меньше арендных выплат за прошедший срок.
А расскажите, пожалуйста, подробнее про разницу в стоимости комуналки. Я живу не в Германии, а в Бельгии, у нас разницы в случае владения или аренды нет. В Германии не так?
Разница появляется там, где надо что-то большое в доме/квартире менять или чинить, типа котла отопления или крыши. Или вот домовой совет может постановить новые деревья посадить за много денег, скидываются на эти причуды все владельцы квартир.
в Мюнхене, там за съем адекватной жилплощади можно и 2 тысячи отдать легко
менее 200 тысяч евро будет стоить разве что трешка в муравейнике на краю города. Учитывая, что с одной средней зарплаты в месяц откладывать больше тысячи
При кредите в 2% вы банку ежемесячно будете платить чуть ли не меньше, чем за аренду.
Если вы самостоятельно почините холодильник, а он потом сгорит и за собой сожжет дом, и страховая докажет, что это случилось из-за ремонта, то вы просто не получите выплат. Вопрос в том, сколько людей готовы взять на себя риск. На самом деле, не так и много, как можно подумать.
Я прекрасно понимаю, почему это стоит так дорого. С мелкой техникой все чуть проще, а вот выкинуть ту же стиральную машину, в которой элементарно ресурсов много просто жалко. Мелкий ремонт крупной технички часто можно сделать и самому. Я спокойно обхожусь без специалиста ремонтируя посудомойку и стиральную машину, но мне пока не были нужны запасные части.
Именно потому что в Украине есть рынок запчастей, а в Европе его нет, немцы и протестуют. Сервисы тут стоят безумных денег, опять же, не как в Украине, поэтому новый холодильник порой действительно дешевле купить, чем починить. Рынок запчастей, на самом деле, существует на e-bay, но там есть далеко не все и не всегда.
Rebase — еще один способ перенести изменения из одной ветки в другую. Rebase сжимает все изменения в один «патч». Затем он интегрирует патч в целевую ветку.
Rebase не изменяет целевую ветку, он «переигрывает» изменения из текущей ветки на вершине целевой ветки, оставаясь в текущей ветке. Для интеграции изменений вам все равно прийдется сделать merge. Однако поскольку в целевой ветке более не будет изменений, сделанных после точки отбранчевания, мердж будет проведен как fast forward, что означает перенесение маркера вершины целевой ветки на конец текущей ветки без merge-комита.
Я понимаю, что возможно, я придираюсь к словам, и в результате происходит ровно то, что вы и описали. Но эти неточности в понимании тонкостей работы git только вредят. И лишний раз приводят к спорам, что лучше, merge или rebase, хотя это вообще в принципе разные функции!
Во-первых, везде в вызовах добавьте const DOMString& key. не только тут, а вообще везде. Вы постоянно копируете параметры, где это нужно и где не нужно.
Во-вторых, вы когда преобразуете kebab-case, копируете строки много раз. Можно этого избежать, если заранее подсчитать количество заглавных букв, выделить память, а потом копировать из исходной строки в новую по кусочкам, вставляя разделители. Если эта функция вызывается часто, а она таки вызывается часто, то это в перспективе очередной оверхед.
И в-третьих, я пощелкал по нескольким файлам, и буду откровенен, у меня есть предположение, что ваш DOMStringMap не реализует сложный функционал, но глядя на заголовки, я не могу понять, зачем он нужен. Кстати, он не map, а view, потому что предоставляет другой интерфейс к значениям в NamedNodeMap, но зачем в свою очередь нужен тот, я тоже не очень понял. В нем еще есть проблема с владением укателем на атрибут.
Он в свою очередь тоже view, но имеет интерфейс map, и реализован вектором, что порождает проблемы скорости, о которых я писал.
И еще момент. Если вы реализуете контейнеры, то очень полезно сохранять у них стандартный интерфейс с итераторами, функциями begin(), end() и т.п. Это позволяет легко применять к ним алгоритмы стандартной библиотеки и не только их.
Целиком согласен — браться за проект такого размера и добиваться хоть какого результата в 14 лет — это уже само по себе большой результат. Остается только пожелать автору всяческих удач и творческих успехов :-)
Вы студет или работаете программистом пару лет, я угадал?
Я заглянул в репозиторий на github и в несколько кликов попал на код класса DOMStringMap. Вы в статье пеняете на различные типы умных указателей, но в вашем коде реализуете map обычным массивом, и вместо логарифмической сложности ищете ключ линейно. Более того, вы итерируете вектор по обычному индексу, хотя итератор позволяет не производить лишних операций вычисления адреса. Оверхед неправильного выбора часто используемого алгоритма будет на порядки выше оверхеда умных указателей, не котороя уже о том, что использование обычных указателей в сложном коде легко приводит к нестабильности кода. И в других местах вы делаете огромное количество ошибок С++, которые влияют либо на скорость, либо на простоту/расширяемость/поддерживаемость, либо на надежность кода.
Во многом правильные мысли, только вы делаете одну ошибку, которая сводит на нет все дальнейшие рассуждения. Вы говорите — наши программы сложны, давайте уменьшим количество сущностей в коде, и программа станет проще. Проблема в том, что программа может содержать тысячи сущностей, и даже уменьшив их количество до сотни, вы не сделаете код проще, просто потому что в голове мы можем одновременно удержать семь плюс минус две сущности. Человек работает всегда с ограниченным контекстом. Введение промежуточных сущностей в теории сужает контект, упрощая работу с конкретным куском кода. Вы же пытаетесь убрать «лишние» сущности, превращая весь код в один огромный контекст, разобраться в котором сразу целиком намного сложнее, чем сто раз в кусочках поменьше. Хотя я согласен с тем, что зачастую люди так увлекаются созданием промежуточных слоев, что код выходит совершенно нечитаемым.
Есть чудесный набор принципов дизайна SOLID, обязательно прочтите про него, если не слышали ранее. Первая же буква акронима означает Single Responsibility, т.е. как раз то, о чем вы говорите, только в пределах одного контекста. Иными словами, минимизировать стоит сущности внутри контекста, но не в проекте в целом. А создавать новые контексты необходимо также с умом, контекст должен быть целостным и в то же время минималистичным. Ваш пример с документацией хорош, потому что страница документации — это как раз один ограниченный и целостный контекст. Он должен быть минималистичным, точным и понятным.
Однострочные функции и временные переменные, против которых вы выступаете, должны в теории сужать текущий контекст, скрывая вычисления за понятным именем. Т.е. видя вызов функции getWidth(), вы сразу понимаете, что это ширина. А если вы видите abs(x2-x1), то вы должны включить в контекст две переменных и функцию и понять что вычисляется. А если таких вычислений и разных много? Вы будете каждый раз пытаться понять, что делает та или иная строчка, раздувая локальный контекст?
Поэтому я не могу согласиться с тем, что простое уменьшение количества сущностей упрощает код и его поддержку. Но могу согласиться, что бездумное создание сущностей действительно сильно усложняет жизнь. Поэтому очень важно уметь правильно ограничивать контексты, их количество и размер, но так же как количество строк кода не является адекватной мерой работы программиста, так же и количество сущностей не может быть мерой сложности кода.
53%-99.6% вкратце можно пересказать как «либо есть либо нет». Чудесный результат, браво!
Вообще, я бы не стал доверять сильно этим результатам, похоже на гадание на кофейной гуще. Формула Дрейка — это всего лишь умозрительная гипотеза, которую пока что никак нельзя ни доказать, ни опровергнуть. Да что там, мы даже смоделировать развитие межзвезной цивилизации не можем, потому что не имеем представления о том, как оно происходит. С тем же успехом можно вывести формулу существования бога. Будет о чем поговорить на симпозиумах.
В Девонский период, когда на Земле были тёплые болота, согласно астрономии среднегодовая температура на экваторе должна была составлять… -108 градусов мороза по Цельсию!
Температура на поверхности Земли определяется еще и составом атмосферы, а это парниковый эффект, вулканическая деятельность и другие факторы, жизнь в том числе. Поэтому температура Земли в течении последних нескольких миллиардов лет менялась от очень жаркой до так называемой земли-снежка, в обоих случаях происходили чудовищные вымирания.
Поэтому температура-то возрастает, но атмосфера может сгладить это возрастание, либо наоборот, сделать его более быстрым. Наверняка мы не знаем.
В основном, кажется, что моя работа состоит в том, что я физически занимаю место на рецепции. В процессе этого я свободен «заниматься моими собственными делами», в качестве которых в основном выступает создание резиновых шаров из резинок, которые я нахожу в кабинетах.
Вот таких людей проще посадить на ненужную работу и платить минимальную зарплату. В результате выходит дешевле, чем платить пособие по безработице.
Поддерживаю. Учил голландский в Бельгии на а-ля государственных курсах, остался очень доволен. По английски на уроке говорить запрещено, плюс куча людей из разных стран, далеко не всегда знающих английский, поэтому хочешь не хочешь, а либо говори, либо умри :-) После двух уровней языка было уже достаточно, чтобы и на переменах обсуждать все по-голландски. После четырех уровней понял, что курсы дают меньше, чем реальное общение — и ушел.
Сейчас эти же курсы по разным причинам сильно сдулись, жена осталась весьма недовольна темпом обучения. Я же за два года успел докачаться до хорошего B1, до B2 сейчас не хватает лексики. У курсов все же есть важный плюс: они не требуют самодисциплины дома, мне выделить время в течении года дома сложно.
Курсы Мишеля Томаса для французского опробовал на себе, очень понравились, во Франции теперь могу понять очень многое, если только не говорят скороговоркой.
Депрессия и выгорания — это патологические состояния, которые должны лечиться специалистом, а не круизами, о чем в статье и написано. На фоне их вы получите снижение работоспособности, бессонницу, снижение иммунитета, очень высокий риск заболеваний сердечно-сосудистой, гипертонии и прочих радостей, не говоря уже о сильном снижении качества жизни вашего и ваших близких. А дальше каждый сам решает, добавлять ли ему слово «депрессия» в лексикон или нет, идти ли ему к специалисту, либо не идти, есть ли у него деньги на лечение или нет, и что он может себе позволить.
Но я с вами согласен, лучше быть здоровым и богатым, чем бедным и больным. Это касается вообще любой болезни, потому что для бедного человека любой серьезный диагноз равносилен смертному приговору. Но это предмет другого разговора.
Поверьте, в Альпах достаточно тропинок, с которых вам и не захочется сойти. Альпинизм и скалолазание тоже никто не отменял.
Гриль разрешен в обустроенных местах. Квадроциклы и джипы я бы и сам запретил, потому что они разрушают природу. МТБ — а чем вас не устраивают маршруты? По-моему это даже круто, тем более их столько, что ездить не переездить.
Это как? Он как-то зависит от количества осадков?
А расскажите, пожалуйста, подробнее про разницу в стоимости комуналки. Я живу не в Германии, а в Бельгии, у нас разницы в случае владения или аренды нет. В Германии не так?
Разница появляется там, где надо что-то большое в доме/квартире менять или чинить, типа котла отопления или крыши. Или вот домовой совет может постановить новые деревья посадить за много денег, скидываются на эти причуды все владельцы квартир.
При кредите в 2% вы банку ежемесячно будете платить чуть ли не меньше, чем за аренду.
Rebase не изменяет целевую ветку, он «переигрывает» изменения из текущей ветки на вершине целевой ветки, оставаясь в текущей ветке. Для интеграции изменений вам все равно прийдется сделать merge. Однако поскольку в целевой ветке более не будет изменений, сделанных после точки отбранчевания, мердж будет проведен как fast forward, что означает перенесение маркера вершины целевой ветки на конец текущей ветки без merge-комита.
Я понимаю, что возможно, я придираюсь к словам, и в результате происходит ровно то, что вы и описали. Но эти неточности в понимании тонкостей работы git только вредят. И лишний раз приводят к спорам, что лучше, merge или rebase, хотя это вообще в принципе разные функции!
Во-вторых, вы когда преобразуете kebab-case, копируете строки много раз. Можно этого избежать, если заранее подсчитать количество заглавных букв, выделить память, а потом копировать из исходной строки в новую по кусочкам, вставляя разделители. Если эта функция вызывается часто, а она таки вызывается часто, то это в перспективе очередной оверхед.
И в-третьих, я пощелкал по нескольким файлам, и буду откровенен, у меня есть предположение, что ваш DOMStringMap не реализует сложный функционал, но глядя на заголовки, я не могу понять, зачем он нужен. Кстати, он не map, а view, потому что предоставляет другой интерфейс к значениям в NamedNodeMap, но зачем в свою очередь нужен тот, я тоже не очень понял. В нем еще есть проблема с владением укателем на атрибут.
Он в свою очередь тоже view, но имеет интерфейс map, и реализован вектором, что порождает проблемы скорости, о которых я писал.
И еще момент. Если вы реализуете контейнеры, то очень полезно сохранять у них стандартный интерфейс с итераторами, функциями begin(), end() и т.п. Это позволяет легко применять к ним алгоритмы стандартной библиотеки и не только их.
Я заглянул в репозиторий на github и в несколько кликов попал на код класса DOMStringMap. Вы в статье пеняете на различные типы умных указателей, но в вашем коде реализуете map обычным массивом, и вместо логарифмической сложности ищете ключ линейно. Более того, вы итерируете вектор по обычному индексу, хотя итератор позволяет не производить лишних операций вычисления адреса. Оверхед неправильного выбора часто используемого алгоритма будет на порядки выше оверхеда умных указателей, не котороя уже о том, что использование обычных указателей в сложном коде легко приводит к нестабильности кода. И в других местах вы делаете огромное количество ошибок С++, которые влияют либо на скорость, либо на простоту/расширяемость/поддерживаемость, либо на надежность кода.
Есть чудесный набор принципов дизайна SOLID, обязательно прочтите про него, если не слышали ранее. Первая же буква акронима означает Single Responsibility, т.е. как раз то, о чем вы говорите, только в пределах одного контекста. Иными словами, минимизировать стоит сущности внутри контекста, но не в проекте в целом. А создавать новые контексты необходимо также с умом, контекст должен быть целостным и в то же время минималистичным. Ваш пример с документацией хорош, потому что страница документации — это как раз один ограниченный и целостный контекст. Он должен быть минималистичным, точным и понятным.
Однострочные функции и временные переменные, против которых вы выступаете, должны в теории сужать текущий контекст, скрывая вычисления за понятным именем. Т.е. видя вызов функции getWidth(), вы сразу понимаете, что это ширина. А если вы видите abs(x2-x1), то вы должны включить в контекст две переменных и функцию и понять что вычисляется. А если таких вычислений и разных много? Вы будете каждый раз пытаться понять, что делает та или иная строчка, раздувая локальный контекст?
Поэтому я не могу согласиться с тем, что простое уменьшение количества сущностей упрощает код и его поддержку. Но могу согласиться, что бездумное создание сущностей действительно сильно усложняет жизнь. Поэтому очень важно уметь правильно ограничивать контексты, их количество и размер, но так же как количество строк кода не является адекватной мерой работы программиста, так же и количество сущностей не может быть мерой сложности кода.
Вообще, я бы не стал доверять сильно этим результатам, похоже на гадание на кофейной гуще. Формула Дрейка — это всего лишь умозрительная гипотеза, которую пока что никак нельзя ни доказать, ни опровергнуть. Да что там, мы даже смоделировать развитие межзвезной цивилизации не можем, потому что не имеем представления о том, как оно происходит. С тем же успехом можно вывести формулу существования бога. Будет о чем поговорить на симпозиумах.
Температура на поверхности Земли определяется еще и составом атмосферы, а это парниковый эффект, вулканическая деятельность и другие факторы, жизнь в том числе. Поэтому температура Земли в течении последних нескольких миллиардов лет менялась от очень жаркой до так называемой земли-снежка, в обоих случаях происходили чудовищные вымирания.
Поэтому температура-то возрастает, но атмосфера может сгладить это возрастание, либо наоборот, сделать его более быстрым. Наверняка мы не знаем.
Вот таких людей проще посадить на ненужную работу и платить минимальную зарплату. В результате выходит дешевле, чем платить пособие по безработице.
Сейчас эти же курсы по разным причинам сильно сдулись, жена осталась весьма недовольна темпом обучения. Я же за два года успел докачаться до хорошего B1, до B2 сейчас не хватает лексики. У курсов все же есть важный плюс: они не требуют самодисциплины дома, мне выделить время в течении года дома сложно.
Курсы Мишеля Томаса для французского опробовал на себе, очень понравились, во Франции теперь могу понять очень многое, если только не говорят скороговоркой.
Но я с вами согласен, лучше быть здоровым и богатым, чем бедным и больным. Это касается вообще любой болезни, потому что для бедного человека любой серьезный диагноз равносилен смертному приговору. Но это предмет другого разговора.