OpenFreeMap – 开源地图托管;快速行动,放弃一切

400 阅读9分钟

OpenFreeMap – 开源地图托管[1]

  • OpenFreeMap:免费开源地图托管

OpenFreeMap 是一个平台,可让您免费在网站或应用上显示自定义地图。它是完全开源的,这意味着所有代码和设置都是公开的。您可以自行托管(只需一行简单的设置)或使用其公共实例。

  • 数据来源:OpenStreetMap

地图数据来自OpenStreetMap,这是一个提供可免费使用的地理数据的合作项目。

  • 公共实例:完全免费

使用公共实例是免费的,对地图视图或请求没有任何限制。无需注册、API 密钥或 Cookie。该项目旨在通过捐款来支付运行成本。

  • 每周完整星球下载量

对于想要自行托管的用户,OpenFreeMap 提供每周完整的星球下载(Btrfs 和 MBTiles 格式)。

  • 多种地图样式

您可以从各种地图样式中进行选择,例如 Positron、Bright、Liberty 甚至 3D 视图。

  • 项目背后:Zsolt Ero

Zsolt Ero 在为 MapHub 运营自己的地图图块基础设施九年后创建了 OpenFreeMap。他热衷于让地图变得便捷且经济实惠。

  • 赞助与支持

您可以在 GitHub 上赞助该项目以帮助支付服务器费用。Zsolt 还在考虑提供 SLA 保证的付费支持计划。

  • 动机:使地图访问民主化

OpenFreeMap 的诞生是因为传统地图图块提供商价格昂贵,小型项目或个人难以在其网站上使用地图。自托管非常复杂,需要大量技术专业知识。

  • 技术细节:
    • • 没有传统的图块服务器;只有 nginx 为带有 3 亿个硬链接文件的 Btrfs 映像提供服务。
    • • 专用服务器,没有云基础设施。
    • • 使用 Planetiler 高效生成图块(5 小时而不是 5 周)。
    • • 基于 OpenMapTiles 的地图模式。
  • 归因:

使用 OpenFreeMap 时需要。如果使用 MapLibre,则归属是自动的。否则,将“OpenFreeMap © OpenMapTiles Data from OpenStreetMap”添加到您的地图显示中。

  • 许可证: 项目本身采用 MIT 许可证;OpenStreetMap 数据有自己的许可条款。

快速行动,放弃一切[2]

“游击编程”风格:叙述者将他们的编程方法描述为“深入研究”而不是精心规划。他们快速迭代,经常多次重启项目以找到有效的解决方案。这与他们合作过的其他工程师更结构化、白板驱动的方法形成了鲜明对比。

速度和迭代: 程序员强调速度是其主要优势。他们通常可以快速制作出工作原型,从而能够识别瓶颈并通过反复迭代来优化代码。虽然这可能会导致初始复杂性,但他们最终的目标是编写干净、可维护的代码。

务实胜过完美:叙述者重视实际结果,而非理论优雅。他们举了一个例子,他们尝试过 Bloom Filter,但由于在特定用例中性能提升微不足道而放弃了它。这凸显了他们专注于寻找最有效的解决方案,而不是坚持僵化的设计模式。

团队合作与贡献:尽管风格标新立异,但这位程序员很重视成为 Apple 团队中的一员。他们认可同事的杰出才能,并努力与他们一起做出有意义的贡献。

“不断迭代”:这句口头禅概括了程序员的核心理念。它反映了他们通过实验、反馈和改进不断改进的信念。

未完成的游戏作为学习经历:叙述者在 GitHub 上发布了他们未完成的游戏项目的磁盘映像。他们认为这些是宝贵的遗物,展示了创作过程和完成项目所面临的挑战。

这位程序员的故事为软件开发提供了独特的视角,强调了快节奏、迭代方法的潜在优势,同时承认团队合作和协作的重要性。

开源研究的成功需要平衡强大的研究与可访问的软件工件,并培育一个协作的社区[3]

开源研究需要平衡:你既需要强大的研究成果,也需要精心制作的开源成果(代码、文档等)。这种平衡对于影响力至关重要。

接触多样化的用户: 不要无意中屏蔽潜在用户。目标是将“专家构建者”与“公众构建者”结合起来,前者可以推动项目的突破,后者可以分享他们的经验和见解,从而推动更广泛的采用。

建立一个蓬勃发展的社区:一个成功的开源项目需要一个活跃的社区。鼓励贡献、讨论,并创建互动空间(如 Discord 或 GitHub 论坛)。

模块化设计鼓励协作:使用模块化组件设计您的项目。这使研究人员能够“拥有”特定部分,从而加快进展和创新。示例包括在一个更大的项目中,独立团队致力于快速优化、编程抽象和强化学习。

开源促进研究:发布开源代码为新的研究问题创造了机会。您可以提前了解新出现的问题,并从社区反馈和协作中受益。

通过论文不断改进:将您的开源项目视为持续研究的平台。新论文可以探索您工作的改进、扩展和应用,进一步巩固其影响力。

Winamp Legacy 播放器源代码[4]

  • Winamp 复兴: 标志性的多媒体播放器 Winamp 以其灵活性和广泛的音频格式支持而闻名,由于其代码开源,它又回来了。这使开发人员可以为当今的用户更新和改进播放器。
  • 构建 Winamp: 您可以使用命令脚本 ( build_winampAll_2019.cmd) 或带有解决方案文件 ( winampAll_2019.sln) 的 Visual Studio IDE 构建 Winamp。这两种方法都会在调试和发布配置中创建 x86 和 x64 版本。
  • 依赖项: 构建 Winamp 需要几个外部库:
    • • **libvpx:**视频编解码器库(ShiftMediaProject 的修改版本)。
    • libmpg123: MP3 文件的音频解码库(来自 mpg123.de 的修改版本)。
    • OpenSSL: 用于安全通信,需要版本 1.0.1u 的静态构建。
    • DirectX 9 SDK: 提供图形和多媒体功能(微软 2010 年 6 月修改的版本)。
    • Microsoft ATLMFC lib 修复: 需要在 ATLTransactionManager 头文件中进行特定的代码更改才能正确编译。
    • Intel IPP 6.1.1.035: 用于优化多媒体处理的英特尔集成性能基元库(修改版本)。
  • 工具和设置: 要构建 OpenSSL,您需要在系统上安装 7-Zip、NASM(汇编程序)和 Perl。该项目提供脚本来解压和准备必要的依赖项。

可重复性是有效软件调试和问题解决的关键[5]

作者喜欢调试,因为它可以利用他们对技术的直觉和强大的沟通技巧。

他们认为,调试是一项奇怪的技能,需要对技术系统不信任,并且能够关注事实而不是情感。

调试可以异步进行,也可以通过小组讨论进行,具体取决于问题的复杂性。

调试的关键规则是始终如一地重现问题。这有助于隔离问题并了解其根本原因。

重现症状是不够的;必须复制确切的行为。如果出现多个问题,应分别进行调查以避免混淆。

日志记录在调试中起着至关重要的作用。重现过程中的实时日志监控可以揭示问题的模式和见解。

作者认为大多数问题并不是真正的“难题”,解决方案通常会在问题重现的过程中自然出现。

解决问题后,重要的是记录所采取的步骤并将解决方案传达给相关利益相关者(包括经理)。

对初级工程师的最后一条建议是记住商业中没有恩惠;始终要为自己的贡献而辩护。

SQL 技巧和窍门[6]

分组和排序:使用时GROUP BY,请记住您可以按列位置分组(例如,GROUP BY 1按第一列分组SELECT)。始终使用子句ORDER BY对结果进行排序,尤其是在处理汇总数据(如总和)时。

使用 NOT IN 处理 NULL:当您要比较的列中NOT IN可能存在值时,请谨慎使用。当涉及到时,无法可靠地确定值是否缺失。选择,因为它可以优雅地处理未知()值。NULLNOT INNULLNOT EXISTSNULL

命名计算字段:避免将计算字段命名为与现有列相同的名称。这可能会导致意外行为,尤其是窗口函数可能会对错误的字段进行操作。

显式列引用:在涉及多个连接的复杂查询中,始终明确说明列属于哪个表(例如,vc.video_id而不仅仅是video_id)。这可以提高可读性,并防止表共享列名时出现潜在的歧义或错误。

了解执行顺序:掌握 SQL 子句的执行顺序对于编写高效且准确的查询至关重要。熟悉此顺序可以优化您的代码。

注释代码: 写出清晰的注释,解释你做出某些决定的原因,而不仅仅是你如何实现它们。这样,将来你自己和别人都能理解你的代码。

全面检查文档:始终查阅您正在使用的功能和特性的完整文档。它可以揭示您可能忽略的潜在极端情况或替代解决方案,从而节省您的时间并避免挫折。

引用链接

[1] OpenFreeMap – 开源地图托管: openfreemap.org/
[2] 快速行动,放弃一切: engineersneedart.com/blog/movefa…
[3] 开源研究的成功需要平衡强大的研究与可访问的软件工件,并培育一个协作的社区: github.com/okhat/blog/…
[4] Winamp Legacy 播放器源代码: github.com/WinampDeskt…
[5] 可重复性是有效软件调试和问题解决的关键: catskull.net/thoughts-on…
[6] SQL 技巧和窍门: github.com/ben-n93/SQL…