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

Резултати

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

Търсене: #unix

当前筛选 #unix清除筛选
infosecurity

@tg_infosec · Post #3773 · 17.11.2025 г., 16:31

🤔 Откуда взялся Unix? • Сегодня многие полагают, что «Unix» и «Linux» — это одно и то же. Но по состоянию на 2025 год с большинством дистрибутивов, ситуация почти так и обстоит. • В 1969 году Кен Томпсон, сотрудник-исследователь из лаборатории «Bell Labs» экспериментировал в области проектирования операционных систем. Тогда в Bell Labs имелся PDP-7, компьютер с интересной периферией: у него был очень быстрый (по тем временам) дисковый накопитель. Томпсон заинтересовался, на какую максимальную пропускную способность может выйти этот дисковод при обработке данных, поэтому написал собственную программу, служившую интерфейсом для жёсткого диска. Это была серьёзная задача: в те времена всё программировали на ассемблере, а для того, чтобы создать драйвер жёсткого диска, требовалась масса низкоуровневого кода. • В какой-то момент Томпсон осознал: в этот интерфейс уже вложено столько труда, что программу практически можно считать полноценным ядром операционной системы. Он посчитал, что ещё три недели — и он доведёт ядро до ума. Неделю на создание нового редактора, неделю на работу с ассемблером и ещё неделю, чтобы написать прототип ядра. Именно с этого прототипа и начинается история операционной системы Unix. • Этот ранний прототип и заложенные в нём идеи показались интересными, и Томпсон вместе с коллегами по Bell Labs принялся его развивать. Единственный паттерн проектирования в новой системе заключался в следующем: нужно много полезных инструментов, каждый из которых сфокусирован на решении ровно одной задачи. Брайан Керниган, ещё один исследователь из Bell Labs, предложил назвать новую систему «Unix» — как бы в противовес операционной системе «Multics», которой компания Bell Labs также занималась несколькими годами ранее. Но проект «Multics» не удался из-за того, что та операционная система получалась очень сложной. • К ноябрю 1971 года «Bell Labs» собрала программы для новой операционной системы, и так был создан «Unix, 1-я редакция». За ней последовали Unix 2nd Edition в июле 1972 года, Unix 3rd Edition в феврале 1973 года и Unix 4th Edition в ноябре 1973 года. • Эти ранние версии Unix не слишком отличались от современных систем Linux. Многие команды, на которые мы сегодня полагаемся при работе с Linux, присутствовали уже в Unix 2nd Edition. Например, команда cat для отображения файлов, команды mkdir и rmdir для управления каталогами, cp, mv и rm для управления файлами, chmod и chown для управления доступом к файлам. • Мы нечасто задумываемся о происхождении команд Linux, используемых в повседневной практике. Эти команды возникли во времена, когда компьютеры были медленными, а память исчислялась килобайтами. Инструменты приходилось делать маленькими и строгоспециализированными. • Особенно сильно от исходного Unix до современных дистрибутивов Linux изменился разброс доступных опций командной строки. Когда компьютеры стали гораздо быстрее, и памяти стало больше, каждый инструмент стал брать на себя всё больше и больше работы. Например, команда ls из версии Unix 2nd Edition поддерживала всего пять опций: -l для вывода списка в длинном формате, -t для сортировки по времени, а не по имени, -a для перечисления всех файлов, -s для показа, каков размер каждого файла и -d для перечисления имён каталогов, а не их содержимого. Современная команда ls в GNU поддерживает как эти исходные опции, так и более пятидесяти расширений для них. • Родословная всех современных Unix-подобных систем прослеживается вплоть до исходного Unix. Linux — одна из таких систем, использующих инструментарий GNU. Набор GNU основан на инструментах Unix. В 2025 Linux уже не указывается в исходной структуре Unix, и неслучайно: теперь Linux поддерживает такие архитектуры и инструменты, о которых и мечтать было нельзя на момент зарождения Unix.Но общий принцип работы с командной строкой по-прежнему сохранился во многом таким, каким его закладывали в Unix в 1970-е. В следующий раз, когда вам доведётся при помощи ls вывести список файлов из каталога — вспомните, что вы пользуетесь инструментом, которому уже больше пятидесяти лет. #Разное#Unix

infosecurity

@tg_infosec · Post #4088 · 13.03.2026 г., 11:31

• Недавно мне пришлось перечитывать гайд по использованию командной строки в Linux, и в самом конце руководства я нашел очень полезный инструмент для проверки написания Shell-скриптов, про который сейчас расскажу. • Вы наверняка знаете, что Shell-скрипты — это очень удобный инструмент, которые позволяют автоматизировать множество задач. Однако есть одно "НО". Дело в том, что при написании скриптов можно допустить массу ошибок. Многие из ошибок, носящие синтаксический характер, могут привести себя к неправильному выполнению. Последствия неправильного поведения скриптов могут быть практически любыми — от слегка неприятных до катастрофических. • Многие из проблем скриптов можно решить с помощью линтера! Вот тут и вступает в игру статический анализатор кода ShellCheck, который написан на Haskell. Эта тулза помогает в обнаружении ошибок в тексте скриптов и может вывести отчет о проведенных проверках. Это позволяет повысить производительность работы и качество кода. Кстати, ShellCheck можно интегрировать в vim или emacs, в результате, он будет проверять текст скриптов прямо в редакторе. ➡️Github; ➡️Официальный сайт; ➡️Небольшой гайд по установке и использованию ShellCheck. #Разное#Linux#Unix

FG - Freie Gedanken 🦁

@FGNews07 · Post #81933 · 22.04.2026 г., 20:55

„Viele von uns haben sich schon einmal einen Roboter vorgestellt, der alltägliche Aufgaben erledigt. Ein chinesisches Unternehmen namens UniX AI meint, dass dies vielleicht gar nicht mehr so weit entfernt ist. Sein CEO, Fred Yang, glaubt, dass dieser Markt eines Tages sogar den Smartphone-Markt übertreffen könnte.“ KI #Roboter#UniX t.me/FGNews07

#UNIX#POSIX 问题:如何正确理解 Permission denied 和 Operation not permitted 之间的区别? 答案: TL;DR: Permission denied: 老兄,你越界了,这个真不行。 Operation not premitted: 老兄,你在说什么鬼话? Permission denied 通常用于表示明确的因为权限设置导致的拒绝。 Operation not premitted 通常用于表示因为设计原因所不被允许的操作。 不过在实际的开发中,有的人似乎并不care这些,因此你也会见到因为权限策略拒绝时返回的 Operation not premitted 错误。(例如SELinux)

Hashtags

infosecurity

@tg_infosec · Post #2788 · 19.12.2024 г., 08:30

👩‍💻 Linux: перенаправление. • Если вы уже освоились с основами терминала, возможно, вы уже готовы к тому, чтобы комбинировать изученные команды. Иногда выполнения команд оболочки по одной вполне достаточно для решения определенной задачи, но в некоторых случаях вводить команду за командой слишком утомительно и нерационально. В подобной ситуации нам пригодятся некоторые особые символы, вроде угловых скобок. • Для оболочки, интерпретатора команд #Linux, эти дополнительные символы — не пустая трата места на экране. Они — мощные команды, которые могут связывать различные фрагменты информации, разделять то, что было до этого цельным, и делать ещё много всего. Одна из самых простых, и, в то же время, мощных и широко используемых возможностей оболочки — это перенаправление стандартных потоков ввода/вывода. В этой статье вы узнаете: - Три стандартных потока ввода/вывода; - Перенаправление стандартного потока вывода; - Перенаправление стандартного потока ввода; - Перенаправление стандартного потока ошибок. ➡️https://selectel.ru/blog/tutorials/linux-redirection/ • В качестве дополнения, к посту подгрузил полезную шпаргалку, которая поможет освоить данную тему. #Cron#Linux#Unix#CheatSheet

djangoproject

@djangoproject · Post #247 · 31.01.2017 г., 13:27

http://pybee.org/ #BeeWare is a collection of #projects that can be used to help develop, debug and launch #Python software. Each tool follows the #Unix philosophy of doing one thing well. Each tool can be used in isolation, or they can be chained together to provide a rich set of programming tools.

djangoproject

@djangoproject · Post #298 · 17.04.2017 г., 07:42

#AI#Artificial_Intelligence #aiohttp #API #AWS #asyncio #audio #automated_testing #automation #atexit #BeeWare #button #client #concurrency #cron #Coroutine #data_analysis #data_mining #data_processing #database #Deep_Learning #Debian #decorator #dispatch #django #dropdownbox #Docker #event #Firefox #form #freeze #functool #Generator #GeoDjango #Google #GPU #Gym #learn #Image_processing #intelligence #input #IOT #lambda #lists #machine_learning #Magenta #map #Metaprogramming #Micro_services #mind #monitoring #MongoDB #Mozilla #Multipart #multi_touch_apps #multiprocessing #Nodes #NoSQL #numeric_computation #numerical #NumPy #OAuth #object_serialization #OCR #overloading #package #parallel #pipeline #protocols #PostGIS #pyAudioAnalysis #PyInstaller #PySide #PyTorch #pytest #python #Pyvideo_archives #Qt #Redis #random #request #REST #satellite #scrapy #scikit_learn #SciPy #searching #submit #selectbox #Selenium #serialization #server #session #socket #sound #task #TensorFlow #text_boxes #text #test #telegram #Thread #transport #tuples #Universe #Unix #urllib #upload #Web

djangoproject

@djangoproject · Post #425 · 28.08.2017 г., 03:37

#AI#Artificial_Intelligence #aiohttp #AngularJS #API #AWS #asyncio #audio #automated_testing #automation #atexit #BeeWare #button #client #concurrency #Coroutine #cron #curl #data_analysis #data_mining #data_processing #database #Deep_Learning #Debian #decorator #dict #dispatch #django #django_cms #dropdownbox #Docker #event #Firefox #form #Generator #GeoDjango #git #Google #GPU #Gym #learn #Image_processing #intelligence #input #IOT #lambda #learn #lists #machine_learning #Magenta #map #Metaprogramming #Micro_services #mind #monitoring #MongoDB #Mozilla #Multipart #multi_touch_apps #multiprocessing #Nodes #NoSQL #numeric_computation #numerical #NumPy #OAuth #object_serialization #OCR #overloading #package #parallel #pipeline #protocols #PostGIS #pyAudioAnalysis #pycon #Pyflakes #PyInstaller #PySide #PyTorch #pytest #python #Pyvideo_archives #Qt #React #Redis #random #request #REST #satellite #scrapy #scikit_learn #SciPy #searching #submit #selectbox #Selenium #serialization #server #socket #task #telegram #TensorFlow #test #text_boxes #text #tuples #unicode #Universe #Unix #urllib #upload #Web

12
ПредишнаСтр. 1 от 2Следваща