Примечание. Примите к сведению, что следующий пост был приправлен пьяным автором небольшим количеством красочных образов и небольшим преувеличением для художественных нужд.
Если вы сравните сноску о прогрессе GSoC в этом посте (внизу) со сноской в блоге предыдущие две недели, вы обнаружите заметную разницу.
Основываясь на этом (и графике вклада Github слева), я рад сообщить, что ранняя заминка, с которой я столкнулся в начале периода написания кода, закончилась, и теперь я продолжаю идти в ногу с моей временной шкалой GSoC.
Пройдена середина проекта, большая часть общих процедур переведена. Теперь я уделю внимание более специализированным подпрограммам (которые имеют несколько зависимостей, требуют внешних пакетов, уникальных случаев и т. д.)
Поскольку я использовал игровую терминологию в своем последнем посте (Сейчас проходит Летняя распродажа в Steam, так почему вы не там, а не здесь?) и ничего не понял о чем еще писать, я просто приведу несколько примеров того, с чем я столкнулся до сих пор (и получил свой опыт кодирования).
Название задания: Иногда это не моя вина?
Переведенная подпрограмма co_aberration выдавала неверный результат, что бы я ни делал. Поиск нестабильности типов или четверная проверка с исходным кодом в IDL AstroLib ни к чему не привели. В конце концов мне пришлось просмотреть код строка за строкой (каждый раз сопоставляя выходные данные IDL), пока я не обнаружил, что в co_aberration этой ошибки нет! Она находилась в одной из его зависимостей — sunpos.
Результат:
Немного расстраивает. Однако пристальное внимание, которое я уделил co_aberration, не пропало даром, так как оно привело к AstroLib.jl/issues/24, нескольким приятным обсуждениям и целому ряду хороших вещей.
Название задания: Иногда это точно не моя вина!
Прошло 50 лет. Но я не старею. Время перестало действовать на меня. Однако страдания продолжаются. Код не дает правильного вывода. (отсылка к Самураю Джеку)
Пока не пришло время протестировать подпрограмму helio на примере из IDL AstroLib, каждая мелочь в этой функции работала идеально. Это была немного более сложная функция, чем обычно, так как она требовала модификации типа планеты, предоставленного AstroLib.jl, среди прочего. Включение Planet в код (чего не было сделано в исходном коде IDL) прошло гладко, несмотря на мои опасения.
Затем функция была протестирована на заданном примере IDL (приведенном в документации IDL AstroLib helio).
Вывод функции был неправильным. Отладил и нашел некоторые фактические ошибки, которые я исправил. Однако вывод все равно был неверным. Снова изменил код. Вывод по-прежнему неправильный. Представьте, что произошло дальше (см. изображение).
Через несколько часов я просто вышел из своей комнаты и прогулялся под дождем (дождь — обычное дело в моем нынешнем месте пребывания, Гоа, который также является известным туристическим местом в Индии. ). Не было никакой надежды. Ничего не осталось. Я сомневался в тщетности своей жизни и существования.
И именно в этот момент меня поразило —
Что, если? Что, если сам пример неверен?
Что ж, ответ был да. В примере был один неверный номер, поэтому вторая итерация (а не 102-я) кода, который я написал (где я обнаружил некоторые фактические ошибки), была кодом Мне было нужно. Больше ничего не требовалось и не требовалось.
Результат:
Я отправил PR в репозиторий IDL AstroLib, который исправил эту ошибку в примере. большинство.
Такого не существует.
Название задания: Куда это должно было вернуться?
В отличие от Python, где такие функции, как мировая система координат, обработка файлов FITS, астрономическое время, теперь объединены в мегакорпорацию AstroPy Inc., вы обнаружите, что эти функции обслуживаются специализированными пакетами/библиотеками в Julia ( конкретно в организации ЮлияАстро).
Это создает несколько сложных ситуаций, когда подпрограммы, которые я перевожу, перекрываются между AstroLib.jl и некоторыми другими библиотеками.
Одна из таких ситуаций произошла, когда в основном репозитории JuliaLang был выдан запрос функции для формата даты года. Теперь для этого есть подпрограмма date_conv (в IDL AstroLib), которую я могу перевести в AstroLib.jl. Тем не менее, рутину в основном покрывает (за исключением этой специфики) пакет AstronomicalTime.jl.
Я довел проблему до сведения заинтересованных сторон несколько прохладно, опасаясь, что это может превратиться в войну за захват функций (это вообще термин?) с межпакетными рейдами («Я возьму ваши строки документации!») и так далее. К счастью, Мозе почувствовал мое разыгравшееся воображение и быстро обуздал его.
Результат:
Теперь, когда мой второй наставник Кайл Барбэри дал мне немного информации о реализации и работе с зависимостями, я смотрю на себя моложе (на неделю) и слегка цокаю неодобрительно мотаю головой.
Награды за выполнение задания
В заключение я думаю, что теперь можно с уверенностью сказать, что Google Summer of Code оказался намного «больше», чем я ожидал, во всех смыслах. Период оценки начинается сейчас, так что давайте посмотрим, что будет дальше.
Сноска: GSoC Progress #2
Количество переведенных процедур — 10,5/21 (#19, #21, #22, #25, « #26″, «#27», «#29»)
Также несколько вопросов (типа Github), связанных с моим проектом — «Uno», «Dos», «Tres»
Прогноз проекта до сих пор — Идем вперед / На полпути пройдено!