TGTGInsightтелеграм анализLIVE / telegram public index
← Такты, стеки, два колеса

TGINSIGHT SIMILAR POSTS

Намери подобно съдържание

Изходен канал @clockstackwheels · Post #721 · 26.12

Почему я люблю языки с сильной системой типов, проверяемой статическим анализом кода — хорошо написанная программа является своей собственной спецификацией и позволяет выражать через язык программирования законы существования предметной области. Когда-то давно я писал на ActionScript. Там была система типов, но вот десериализация JSON'ов по-умолчанию была в какой-то общий Object, к полям которого нужно было обращаться ["по_строковому_имени"]. В один момент мне потребовалось написать что-то на C#, который я совсем не знал, я стал гуглить, как десериализовать JSON, и с удивлением обнаружил кучу советов заранее объявить класс со всеми нужными полями и десериализовать в него. "Какой ужас!", — подумал я тогда, — "Это же дико неудобно! А если я не знаю полей JSON? А если их много? Отвратительный язык!" Теперь то я прекрасно понимаю, что JSON это контракт, и что правильная десериализация только такая и должна быть, и что в хорошем API в одном поле никогда не бывает данных принципиально разных типов, и так далее. Нет, если вы набиваете вечерами пет-проект или сидите бессонную ночь на хакатоне, нет ничего плохого в том, чтобы взять простой язык с динамическими типами вроде JavaScript или Python, не требующий описывать данные. Но вот в энтерпрайзе, особенно когда над одним проектом работает много людей (а бывает это очень часто) — хорошее использование системы типов убережёт разработчиков от огромного количества ошибок, будет бить их по рукам, когда они пытаются сделать что-то не то, и будет подсказывать, когда они не уверены в чём-то. С помощью статической типизации можно на уровне кода обозначить правила, по которым ведёт себя предметная область вашей программы в реальном мире. Разработчику не только будет сложно их нарушить, но он ещё и станет узнавать какие-то вещи, которые мог не знать раньше. Например, если мы делаем медицинскую CRM, и больница заводит новых пациентов только тогда, когда знает их группу крови, мы можем объявить тип "Пациент" (или, если точнее, "Карта пациента") и запретить создавать экземпляры этого типа, не передав в конструктор группу крови (которая, в свою очередь, тоже является типом, вероятнее всего ValueObject'ом). Если новый программист пришёл в проект, он, во-первых, не сможет записать в БД некорректную карту пациента. Понятно, мы не учитываем случаи, когда новый программист переделывает модели предметной области — это будет хорошо видно на кодревью. А, во-вторых, даже если ему никто не сказал, что пациенты должны быть с группой крови, он узнает это из кода. И уже будет понимать, что в тех процессах реальной жизни, которые он описывает кодом, карта пациента создаётся только при наличии группы крови. А, значит, нужно искать какой-то способ сначала эту группу крови получить, и только потом создавать карту. Программирование моделирует реальный процесс. В настоящей работе даже на языках с типами, конечно, без должного контроля можно написать что угодно. Нужна управленческая воля, компетентность руководства, понимание опасности техдолга, в идеале отдельные должности для архитекторов, опытные лиды и старшие разработчики. Но когда всё это есть, можно отсекать много проблем ещё на старте и проще погружать новичков. #dev

Hashtags

Резултати

Намерени 2 подобни публикации

Търсене: #filesharing

当前筛选 #filesharing清除筛选
AppPie

@AppPie · Post #2367 · 24.03.2025 г., 04:04

#Apps PairDrop: 跨平台文件的传输工具 🔗GitHub PairDrop 是一个类似于 AirDrop 的多平台解决方案,可在所有具有现代网络浏览器的设备上运行。它允许用户通过点对点连接,在同一本地网络上的设备之间发送图像、文档或文本,甚至可以通过临时公共房间在互联网上轻松传输文件。 PairDrop 的设计理念是极致简洁,专注于即时文件传输这一核心功能,确保用户体验流畅直观。这是从 Snapdrop 项目发展而来的增强版本,添加了持久配对功能和其他社区贡献的改进。 主要特点 • 跨平台支持:适用于所有带有现代浏览器的设备 • 本地网络传输:在同一网络的设备间直接传输文件 • 互联网传输:通过配对设备或临时公共房间在互联网上传输文件 • 持久配对:重新打开 PairDrop 后仍能找到已配对设备 • 多文件传输:一次传输多个文件,并显示总体进度指示器 • 自托管选项:可以使用 Docker 或 Node.js 在本地网络上托管自己的实例 • 开源免费:项目以自由软件形式提供,并欢迎社区贡献 开源许可证 GPL-3.0 license。 #GitHub#OpenSource#FileSharing#CrossPlatform#AirDrop 📮 频道 @AppPie

AppPie

@AppPie · Post #2380 · 02.04.2025 г., 04:08

#Developers Cloudreve: 支持多家云存储的云盘系统 🔗GitHub Cloudreve 是一个自托管的文件管理和分享系统,支持多种存储提供商。它提供了一个统一的用户界面,让用户可以不必关心底层的物理存储位置,轻松管理和分享文件。该项目可用于构建个人云盘、文件共享系统或适用于大小群体的公共云存储平台。 项目采用 Go 语言编写后端,提供了现代化的 Web 界面和丰富的功能集,包括多用户支持、在线预览、WebDAV 集成、离线下载等。它的设计理念是「一体化打包」,所有功能开箱即用,同时支持多种部署方式,包括二进制文件、Docker 以及从源代码构建。 主要特点 - 多存储支持:支持本地存储、远程存储、七牛云、阿里云 OSS、腾讯云 COS、又拍云、OneDrive 以及 S3 兼容的 API - 文件操作:支持拖放上传文件或文件夹,带有流式上传处理和速度限制 - 离线下载:与 Aria2 集成,支持使用多个下载节点分担负载 - 文件处理:支持压缩/解压文件,批量下载文件 - WebDAV 支持:覆盖所有存储提供商的 WebDAV 访问 - 多媒体预览:在线预览视频、图像、音频、ePub 文件;在线编辑文本、Office 文档 - 界面定制:自定义主题颜色,支持黑暗模式,PWA 应用,单页应用,国际化支持 - Pro 版本:提供移动端 APP、更多高级功能和扩展支持 部署选项 - 二进制文件:直接下载对应系统架构的二进制文件运行 - Docker:使用官方或社区提供的 Docker 镜像快速部署 - 源码构建:从 GitHub 克隆源码自行编译 开源许可证 GPL-3.0。 #GitHub#OpenSource#SelfHosted#FileSharing#CloudStorage#WebDAV#Aria2#Docker#Golang 📮 频道 @AppPie