」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 我的 GSoC 經驗:PEcAn 項目

我的 GSoC 經驗:PEcAn 項目

發佈於2024-08-31
瀏覽:884

My GSoC Experience : PEcAn Project

关于PEcAN:

预测生态系统分析器 (PEcAn) 是一个科学工作流程系统,用于管理大量公开可用的环境数据和贝叶斯数据同化系统,用于在最先进的生态系统模型中综合这些信息。

项目概要

组织:PecAn Project

导师:Christopher Black (#infotrop)、Shashank Singh(#moki1202)

贡献者:Abhinav Pandey (#Sweetdevil144)

项目持续时间: 350小时

项目标题: 优化 PEcAn 以独立使用单个

非常感谢克里斯,您仔细聆听我的方法并以更好的方式改进它们!!

也特别感谢其他导师:David LeBauer、Shashank Singh 和 Michael Dietze

关于该项目:

该项目的目标是通过优化其独立使用的模块来增强 PEcAn 项目。尽管 PEcAn 具有强大的框架和互连的模块,但越来越需要使这些模块独立运行。这种转变对于简化模块使用、测试和开发至关重要,使系统对用户和贡献者来说更容易访问和更高效。重点是优化独立使用的模块,增强它们在 PEcAn 互连框架内的单独可操作性。我们的首要任务是通过重新审视 PEcAn 封装的设计和界面来“重新松开这些耦合”。

概述

今年夏天,我有幸与 PEcAn 项目一起参加了 2024 年 Google 编程之夏。在今年计划中选出的众多才华横溢的候选人中,我是其中之一,被选为具有重大全球影响力的现实世界开源软件做出贡献。随着项目接近尾声,我想回顾一下过去三个月我在 PEcAn.

中学到的东西

我的 PEcAn 项目早在官方 GSoC 周期之前就开始了,我的第一个 PR 早在 2023 年 12 月就被合并了——比 GSoC 时间表提前了五个月。早期的参与为我提供了宝贵的经验,让我能够了解 PEcAn 错综复杂的架构和复杂的代码库设计。它还让我熟悉了该组织的工作,特别是 R 编程语言。从早期开始,我就渴望更深入地参与该项目并做出有意义的贡献。

GSoC 教给我的最有价值的一课是:我们通过实践学习,即使前方的道路似乎不确定,我们也为前进铺平道路。 我在这次 GSoC 之旅中的经历向我展示了什么我最初计划完成的只是我最终实现的一小部分。

通过 15 拉取请求、6 问题得到解决,以及在与导师的会议上花费了无数时间,我发现自己逐渐与 PEcAn 项目的目标保持一致.


我对 PEcAn 的贡献

(我将要讨论的所有工作都链接在此页面底部。)

GSoC 时期分为三个关键阶段:

  1. 第一阶段:社区联系期:在这个阶段,我熟悉了项目并与导师建立了牢固的联系。这一次让我对项目的目标和复杂性有了深入的了解。我首先对代码库进行了一些小的更改,同时掌握了 PEcAn 的关键方面。我的工作重点是收集数据,这些数据后来对于解决项目挑战至关重要。

  2. 阶段 2:解耦 PEcAn 的包:我在这个阶段的主要任务是开始解耦 PEcAn 的包,我的起点是 data.land 包。这涉及仔细检查项目中需要改进模块化和灵活性的包。在此阶段,我通过找出依赖项的微小实例并将其重定向回数据库调用,从 data.atmosphere 包中删除了 data.land 的依赖项,从而减少了总体依赖项。除此之外,我还对 为 met2Cf.csv.R 添加测试套件删除 db.site.lat.lon 函数并将所有用法替换为 query.site。我还组合了多个数据库调用,这进一步有助于减少我们系统中进行的数据库调用,并进一步减少数据库上的延迟。我还创建了一个自定义 python 脚本来查明代码库中不再使用的孤立函数,并执行此类实例的清理。

  3. 阶段3:增强convert_input函数:由于PEcAn中convert_input函数的复杂性,这一阶段被证明是最具挑战性的。我投入了大量时间来寻找解决我们所面临的各种问题的好方法。然而,由于此时我对代码库有了更深入的了解,这个阶段也是最有成效的。

在此阶段,我提出了一个新功能,可以通过 #3324 选择性地检索 site.info,从而增强灵活性。此外,我还帮助重构并删除了现已停产的 BrownDog 软件包,通过 #3348 确保了干净且现代的代码库。我成功删除了 BrownDog 的所有实例,同时与我的导师积极讨论这些更改。

为了进一步提高convert_input函数的模块化,我决定在#3338中将其分解为更小的辅助函数。这种重组简化了代码库的导航和理解,使未来的开发人员更容易使用。

在整个 GSoC 期间,我与我的导师定期举行会议(每周三),讨论我们每周的进展、未来计划和推进项目的策略。我的导师的定期帮助确实帮助我将注意力集中在该项目上。

我非常感谢整个 PEcAn 团队为我提供了这个难得的成长、学习和与他人合作的机会。真正让 GSoC 与众不同的是旅程本身的乐趣。我不仅熟练掌握了一门新的编程语言,而且我作为一个人也得到了成长,通过每周的会议和与导师的互动走出了我的舒适区。这段经历在技术上和个人上都具有变革性。

继续前进,我计划继续与 PEcAN 长期合作,并尽我所能提高 PEcAN 的能力!现在就这样了! ??

我在 PEcAn 项目中的 PRs 列表?

ID 标题 状态
3359 更新DEV-INTRO.md 合并
3312 在单个查询中组合多个 PEcAn.db 调用 合并
3308 删除 db.site.lat.lon 函数并将所有用法替换为 query.site 合并
3301 为met2Cf.csv.R添加测试套件 合并
3300 从 data.land 中删除对 data.atmosphere 的依赖 合并
3291 添加脚本以识别代码库中的孤立函数 合并
3290 删除未使用的 inst/met2CF.R 合并
3283 更新 API 端点 URL 合并
3281 修复met2model.SIPNET功能中的文件扩展名搜索 合并
3276 更新 cos_solar_zenith_angle 函数的文档 合并
3246 修复 Markdown 文档中的拼写错误和错误 合并
3243 更新book.yml 合并
3348 删除 Browndog 打开
3338 重构convert_input以通过辅助函数执行任务 打开
3324 添加功能可选择获取 site.info(如果不存在) 打开
3319 重构 met.process 和 dbfiles 打开
版本聲明 本文轉載於:https://dev.to/devrx/my-gsoc-experience-pecan-project-bi0?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 馴服電子郵件野獸:我的收件匣管理人工智慧之旅
    馴服電子郵件野獸:我的收件匣管理人工智慧之旅
    是否曾经感觉您的收件箱是一个数字九头蛇,为您回复的每个人发送两封新电子邮件? ??好吧,科技爱好者们,我决定用秘密武器来对付这个怪物:人工智能! ??️ 尤里卡时刻 想象一下:现在是凌晨 3 点,我周围都是空咖啡杯☕☕☕,盯着一个数量可与国会图书馆相媲美的收件箱。就在那时,我突然想到...
    程式設計 發佈於2024-11-06
  • 為什麼 Go 是智能合約開發的新競爭者
    為什麼 Go 是智能合約開發的新競爭者
    区块链生态系统迅速发展,引入了创新的解决方案和平台,扩展了分布式账本技术的潜力。这项创新的核心是智能合约——自动执行的程序,无需中介即可自动执行协议。传统上,Solidity 一直是编写智能合约的首选语言,尤其是以太坊区块链。 Solidity 旨在在以太坊虚拟机 (EVM) 中运行,为开发人员提供...
    程式設計 發佈於2024-11-06
  • 如何在等待執行緒完成時保持 tkinter GUI 回應?
    如何在等待執行緒完成時保持 tkinter GUI 回應?
    等待線程完成時凍結/掛起tkinter GUI在Python 中使用tkinter GUI 工具包時遇到的常見問題執行某些操作時介面凍結或掛起。這通常是由於在主事件循環中使用了阻塞操作,例如加入執行緒。 瞭解 tkinter Mainlooptkinter mainloop() 是負責處理使用者輸入...
    程式設計 發佈於2024-11-06
  • C 和 C++ 中條件運算子的行為有什麼不同?
    C 和 C++ 中條件運算子的行為有什麼不同?
    條件運算子:剖析C 與C 的差異在程式設計領域,條件運算子(?:) 充當計算表達式並根據結果傳回特定值的簡潔方法。雖然此運算符在 C 和 C 中的操作類似,但出現了一個微妙的區別,可能會影響程式碼執行。 C:對左值的限制在 C 中,條件運算子會對傳回左值(駐留在特定記憶體位址的變數)施加限制。這表示...
    程式設計 發佈於2024-11-06
  • Java中如何有效率地檢查字串中是否存在某個字元?
    Java中如何有效率地檢查字串中是否存在某個字元?
    高效字串字元驗證在Java中,一個常見的任務是判斷某個特定字元是否出現在字串中。雖然傳統方法涉及遍歷字串,但利用 indexOf() 的有效替代方法消除了循環的需要。 IndexOf() 逐個字元掃描字串,並傳回指定字元所在的第一個實例的索引出現。如果該字元不存在,則傳回值 -1。 考慮檢查字元「a...
    程式設計 發佈於2024-11-06
  • 如何使用 PHP 為圖片添加浮水印?
    如何使用 PHP 為圖片添加浮水印?
    使用PHP 向圖像添加浮水印如果您正在使用允許用戶上傳圖像的網站,則可能需要添加這些圖像的浮水印,以防止未經授權的使用。添加浮水印可確保您的徽標或品牌在每個上傳的圖像上都可見。以下是如何在PHP 中實現此目的:使用PHP 函數PHP 手冊提供了使用以下函數的綜合範例:imagecreatefromp...
    程式設計 發佈於2024-11-06
  • 如何抑制 Tensorflow 調試輸出?
    如何抑制 Tensorflow 調試輸出?
    抑制Tensorflow調試信息Tensorflow可能會在初始化時在終端中顯示調試信息,包括加載的庫和發現的設備。雖然此資訊對於偵錯目的很有用,但它也會使控制台混亂並使追蹤重要訊息變得困難。 要停用此偵錯訊息,您可以使用 os.environ 模組:import os os.environ['TF...
    程式設計 發佈於2024-11-06
  • 如何確定我的 MySQL 查詢是否利用了索引?
    如何確定我的 MySQL 查詢是否利用了索引?
    識別 MySQL 索引的效能優化 MySQL 查詢時,評估索引的有效性至關重要。 取得索引效能指標要確定您的查詢是否使用索引,請執行下列查詢:EXPLAIN EXTENDED SELECT col1, col2, col3, COUNT(1) FROM table_name WHERE col1...
    程式設計 發佈於2024-11-06
  • 如何更改 WAMP/MySQL 中錯誤訊息的語言?
    如何更改 WAMP/MySQL 中錯誤訊息的語言?
    WAMP/MySQL 中的語言錯誤WAMP/MySQL 中的語言錯誤許多用戶都遇到WAMP/MySQL 中的錯誤未以正確的語言顯示的問題。多次重新安裝WAMP並蒐索大量資源後,該問題仍然存在。 要解決此問題,需要修改my.ini檔案。 修改my.ini檔案# Change your locale h...
    程式設計 發佈於2024-11-06
  • Item - 傳回空集合或陣列而不是 null
    Item - 傳回空集合或陣列而不是 null
    不回傳 null: 傳回 null 取代空集合或陣列的方法需要額外的客戶端處理以避免異常。 null 問題: 客戶端需要新增冗餘檢查(如果要檢查null)。 這些檢查中的遺漏可能會被忽視,從而導致錯誤。 傳回集合或陣列的方法很難實現。 反對 null 的參數: 不要擔心分配空集合或陣列的效...
    程式設計 發佈於2024-11-06
  • 節點 JS || Epress js ||作者:穆尼塞卡·烏達瓦拉帕蒂
    節點 JS || Epress js ||作者:穆尼塞卡·烏達瓦拉帕蒂
    Express js 編寫簡單的express js應用程式 npm 初始化 npm 安裝 Express const express=require('expreass'); const app=express(); app.use('/',(req,res,next)=>{ rse...
    程式設計 發佈於2024-11-06
  • 嵌套括號可以在沒有遞歸或平衡組的情況下匹配嗎?
    嵌套括號可以在沒有遞歸或平衡組的情況下匹配嗎?
    在沒有遞歸或平衡組的情況下匹配嵌套括號使用正則表達式匹配嵌套括號可能具有挑戰性,特別是在像Java 這樣的語言中,其中遞歸且不支援平衡組。幸運的是,使用前向引用確實可以克服此限制。 匹配外部組以下正則表達式[1] 匹配外部組括號而不對深度施加限制:(?=\()(?:(?=.*?\((?!.*?\1)...
    程式設計 發佈於2024-11-06
  • 使用 TDD 方法論和 PostgreSQL 使用 Django 建立完整部落格應用程式的指南(部分安全使用者身份驗證)
    使用 TDD 方法論和 PostgreSQL 使用 Django 建立完整部落格應用程式的指南(部分安全使用者身份驗證)
    Welcome back, everyone! In the previous part, we established a secure user registration process for our Django blog application. However, after succes...
    程式設計 發佈於2024-11-06
  • 如何寫出更好的 CSS
    如何寫出更好的 CSS
    為了為網站樣式編寫更好的CSS,您必須先學習三件事,即響應式設計,您的程式碼可維護和可擴展,並且具有執行性。 響應式設計就是確保您的網站在每種可能的螢幕尺寸上都具有完美的外觀和行為。隨著螢幕尺寸的不斷增加,響應式設計是每個前端開發人員必須學習和掌握的基本概念。 您編寫的程式碼必須以其他開發人員也...
    程式設計 發佈於2024-11-06
  • 解鎖 JavaScript 的超能力:變數的魔力
    解鎖 JavaScript 的超能力:變數的魔力
    從今天開始,我們將發現一個編程的世界。 你擁有超能力的世界。是的,你沒看錯,超能力。如果不是超能力,那又是什麼?使用 JavaScript,您可以讓物體飛行、移動、消失、改變顏色,並在數英里之外看到您的朋友,而這只是可能的一小部分。是的,一切都在你的螢幕上,但仍然非常令人興奮。 像任何超級英雄一樣...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3