Pull to refresh
66
0
Гордый Хохол @Nomad1

Погромист игоръ

Send message
Осторожно!
Сарказм в каждой фразе, а особенно в курсиве. Серьезно не воспринимать!

Когда мне было 14 лет я всё лето участвовал в проекте наполнения министерской БД и рисования для нее формочек. Это было на MS Access, я был джуном — помощником программиста. Работа шла невероятно долго — 3 месяца казались целой жизнью, за которую я освоил все возможные и невозможные детали языка.
В 20 я устроился работать Java бекэнд программистом и проработал им три года. О, да, я познал все и по правилу 10000 часов в 23 года уже был гуру Java, Oracle и начинающей звездой С и PHP, которые иногда использовал в работе. Я целую вечность провел за компьютером, мыслил категориями «как я стар и опытен», с ухмылкой смотрел в прошлое на пацана, который что-то там ковырял в Access.
В 30 лет я оставил должность лида в иностранной компании, имея 10 лет стажа и 16 лет опыта программирования. Языки и операционки не имели значения — я был суперстар, думал на C# и C++, невероятно подкован в серверах, геймдеве и бэк энде, снисходительно поглядывая на 20-летних сеньоров с их дурацкими 10000 часами.
Скоро мне 40. Я давно ни на кого не работаю, делаю мелочи в свое удовольствие и они приносят какие-то деньги на жизнь. Зато много путешествую и часто сижу и смотрю на закат или на море, ни о чем не думая вообще. Разве что о том, как я был наивен раньше — всю молодость потратил на какую-то херню, писькомерство и достижения в виде циферок лет опыта, которые лишь вычитаются из того, что мне осталось.
Классный юмор, посмеялись всем коллективом :)
К сожалению, не смотря на новые технологии и т.д., если панель не строго перпендикулярна световому потоку, то генерация будет существенно ниже максимума. Единственное исключение, это дни, когда солнце светит очень ярко, но небо затянуто тонким слоем облаков и они рассеивают свет (не знаю, как это правильно называть). Тогда средняя выработка за час может доходить до невероятных 50% от номинала панелей (число из моего опыта, может быть завышено/занижено). В целом же, с учетом не постоянного солнца, рассвета/заката, отсутствия следящей опоры и т.д., я бы не рассчитывал больше, чем на 30-40% от номинала в среднем.

Мой опыт
Мои 760 Вт панелей генерируют суммарно около 40кВт*ч за летний месяц вместо 182 «номинальных». Причина в неудачном расположении, северных широтах, постоянном пылевом загрязнении, потерях на проводах и т.д. При этом, у меня еще аккумуляторный блок на 640 Ач (в пересчете на 12 вольт) и специализированное MPPT оборудование от Midnite Solar и Xantrex. Этого всего хватает на шкаф с роутерами, камеры, NVR и комп с монитором. Когда есть явные излишки, подключаю туда еще холодильник.


Отдельно я хотел чуток поспрашивать вас на счет проводов — 2 панели всяко лучше, чем одна, но с дешевым ШИМ контроллером вы можете подключить их только параллельно. Это значит, что максимальный расчетный ток от этих панелей может составить 17А при 12В напряжения (реально, так много никогда не будет, но все же). Ваша разводка внутри устройства рассчитана на такие токи? Каким проводом соединяются панели и устройство? Какой длины?

Еще я бы рекомендовал использовать контроллер с подсчетом генерации/потребления, а лучше еще отдельно вольт/ампер/метр с шунтом или бесконтактным измерением тока. Стоят эти устройства копейки, умеют считать генерацию за день и месяц.

Вы не поверите, именно это я и написал, теми же словами :)

Какой контроллер используется (PWM или MPPT, какие индикаторы м порты)? Какой инвертор (КПД, фирма)?
Затем мне не ясно применение устройства: за 8ч солнечного дня с средней производительностью в 40% от номинала панель сгенерирует 0.4 100 8
= 320 ватт ~= 27 Ампер-часов при напряжении 12В. 2/3 этого значения отправим на зарядку АКБ (чтобы компенсировать 16 часов реактивности, когда питали нагрузку от АКБ), условно отбрасываем потери и получаем +9 Ач в день при 12В. Это либо потребление тока в 9 ампер в течение одного часа и потом 23 часа без нагрузки, либо средний ток потребления за 24 часа не выше 0.375А при напряжении 12В или 0.9 ампер при 5 вольтах. Это то, что можно безболезненно забирать из системы каждый день и она не будет очень сильно деградировать (на самом деле будет, но это другой разговор).
Конечно же, все преобразования нещадно режут КПД, а АКБ любит скушать 1.2х от ёмкости для полного заряда. Выходит, панель в 100 Вт это буквально под роутер и камеру хватит (цифровое табло, как выше приводили), либо пользоваться системой для выезда на природу. Но никак не для холодильника или ноутбука на постоянку.

(посыпает голову пеплом)
(speed — prevSpeed) * deltaTime/ 2

+ конечно же
Это в Mathematica. Вверху видно условие, а ниже решение, которое получилось )
Решалась обратная задача — имея формулу движения найти сколько времени лететь до остановки.
speed += acceleration * deltaTime;
speed *= pow(friction, deltaTime);
position += speed * deltaTime;

И хотя это как будто сработает, на самом деле так делать неправильно. Можете проверить сами.


Потому что физику не обманешь — расстояние это интеграл от изменения скорости по времени, а не просто произведение моментальной скорости на время. По-сути, он считал раньше интеграл дискретным суммированием и делать это можно лишь с минимальным возможным шагом времени, но попытка увеличивать этот шаг сразу же дает ошибку. В правильном варианте надо вывести функцию изменения скорости (а вывести ее с таким трением будем не просто) и затем интегрировать. В крайнем случае можно хотя бы приближенно брать (speed — prevSpeed) * deltaTime/ 2, но это тоже не очень точно.

P.S. Если кому-то будет интересно, могу попробовать написать статью, как я для своей игры выводил что-то похожее, но только мне надо было на сервере и клиенте одинаково рассчитывать движение с учетом диссипативных сил (трение). В ходе этих расчетов один раз вышло вот такое решение:
формула


He heard the Hare yelling: 'Here comes the heir with her hair waving in the air!'
Нашел где-то хороший совет для русскоязычных: говоря beach/bitch и sheet/shit произносите через мягкое 'и' только если имеете в виде «хорошее» слово и низкое 'ы' — «плохое». Это не совсем то, как говорят носители, но очень помогает, если боитесь ошибиться.

P.S. Есть сказочные произношения с юга Америки, при которых почти не шевелится нижняя челюсть. В таком разговоре половина слов угадывается по контексту, потому что bad/bed/bet/pet отличить почти невозможно.
Оффтоп - история с антивирусами
Как-то раз я написал утилиту-лаунчер, которая подменяет в клиенте WoW адрес новостей при запуске. Утилита заняла около 200кб, что мне откровенно не нравилось, поэтому я перенес код на VC6, прикрутил кусочки кода от libctiny и откомпилил с /NODEFAULTLIB. В итоге получилось 3072 байт exe файла, все отлично работало, пользователи счастливы. Ну а затем Avira забила тревогу, а вслед за ней и другие антивирусы: минимальный размер, VirtualProtectEx, подключение к чужому процессу — явные признаки малвари. Я не мог изменить «опасный» характер работы программы, но и антивирусы были не особо умны в те времена, поэтому все подозрительные импорты я заменил на GetProcAddress, а названия функций побил XORом. Трюк обманул половину антивирусов, кроме особо настойчивых, размер подрос до 4кб. Я боролся с ними еще несколько дней, пока мне не прислали красивую иконку для программы — вместе с этой иконкой программа занимала 25кб и успешно проходила проверку всех антивирусов, включая и VirusTotal.
Давайте посмотрим чуть шире: когда суд разбирается с патентными спорами или вопросами «кто у кого украл идею», сами судьи не обязаны вникать в суть изобретений и патентов. Есть истец, ответчик и эксперт, чтобы это сделать и объяснить, что происходит. В итоге на несведущего, но авторитетного и опытного человека возлагается обязанность по решению спора, затем это решение может быть обжаловано и пересмотрено при наличии других доказательств. В хорошем варианте, парламент должен выполнять такую же роль — имея опыт решения глобальных ситуаций и руководствуясь буквой закона принимать или не принимать законопроекты. Это весьма здравая идея и я не знаю, что пошло не так, что в парламентах сидят певцы и боксеры, а голосования проходят в формате «пофиг, нажму что-нибудь» и «о, это сказали поддержать».
Ничего страшного, хаброфагоцитарная система все расставит на свои места.
Еще отмечу важный момент: американцы реально гордятся своей страной. Не показушно, не с маршами и демонстрациями, а как-то очень естественно. Подойти к ветерану, пожать ему руку и сказать «Thank you for your service, sir!» — это не чудо, а модель поведения. Поправить зацепившийся флаг — естественный порыв всех, проходящих мимо.
Подозреваю, что такое отношение насаждалось и созревало не два десятилетия и гораздо более филигранными методами, а государственное вмешательство дозировалось с аптекарской точностью (если оно и было вообще).
Позволю себе с вами не согласиться. Видимо все дело в субъективном определении «повседневной задачи».
Массив это безопасная коллекция фиксированной длины, полностью реализующая IEnumerable и частично IList/ICollection (Insert, Remove, Add не доступны). Ее использование диктуется ее свойствами и массивы незаменимы при работе с изображениями, матрицами/тензорами, буферами и вообще любыми данными фиксированной длины и с рандомным доступом.
Небезопасность начинается при маршалинге, unsafe трюках (указатель на первый элемент), использовании Array.Copy и прочих методов. Но никто не заставляет вас этим пользоваться для повседневных задач. Конечно же, с массивами можно легко написать кривой код, если везде использовать их вместо списков и других коллекций, это плохой стиль и premature optimization. Но и для сравнения, System.String тоже позволяет и прямую адресацию, и указатели на отдельные символы, и реализует IEnumerable, и вообще это immutable тип и при каждой операции создает свои копии, но не стоит утверждать, что из-за этого надо его выкинуть и всегда пользоваться StringBuilder.
Коллега, наверное вы имеете в виду, что почти всегда можно использовать foreach. К сожалению, вы забываете, что записать в массив данные через foreach нельзя (кроме самых извращенных случаев). В этой ситуации for оказывается не дебрями, а самым читабельным методом для инициализации массивов, особенно многомерных.
0. Где IL код, где бенчмарки?
1. При использовании multi-dimensional array JIT не может сам сделать подобную оптимизацию и вынести длину в внешнее число, потому как не знает, что результат GetLength не меняется. Если вдруг вы задумались о производительности, то используйте в этой ситуации jagged array (массив массивов), где гарантирована статическая длина каждого массива. Почитать об этом можно в огромном количестве мест.
2. При всех своих плюсах jagged array состоит из разрозненных блоков памяти, а не хранится в одном участке. Для высокой скорости надо бы использовать одномерный массив размера [a*b]. Естественно, для адресации придется использовать умножение или увеличивать внутренний счетчик. Разница в скорости между multi-dimensional, jagged и single-dimensional настолько отличается, что мизерные отличия с выносом длины в внешнюю переменную стираются.
3. Не экономьте на спичках! Забудьте то, что я сказал, забудьте эту и предыдущую статью. Пишите рабочий, красивый и документированный код, а не оптимизированный, нечитабельный и с глюками!
Мне знакомые моряки рассказывали байку, что один русский мореплаватель как-то это королевство оставил и без света. Просто пройдя с высокой мачтой там, где был натянут временный кабель над бухтой. Говорит, поразился, как энергично махали ему туземцы с берега — видимо рады были видеть нашу яхту! =)
Да, это так. Но есть нюансы, которые мы годами обсуждаем на соответствующем форуме.

P.S. Надеюсь, что наши сообщения тут уже дали достаточную базу, чтобы люди увидели общую картину, а дальше они пойдут на форум, сайты IRS и в гугл. Спасибо вам за дискуссию!
В моем случае вычет $4050. Не фонтан, но все-таки неплохо.
Для читающих, кто не в теме: если за год ваши налоговые обязательства меньше или равны этой сумме, то ничего дополнительно платить IRS не надо.

Information

Rating
Does not participate
Location
Украина
Date of birth
Registered
Activity