Как стать автором
Обновить
697.84

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга

Проверьте, используются ли ваши репозитории GitHub и исходный код ваших проектов для обучения различных больших языковых моделей (БЯМ — LLM).

На huggingface появилась вторая версия проекта Stack. Это открытый интерфейс управления между сообществом искусственного интеллекта и сообществом открытого исходного кода.

В рамках проекта BigCode выпущен и поддерживается The Stack V2 — набор данных исходного кода объёмом 67 ТБ для более чем 600 языков программирования. Одна из целей в этом проекте — предоставить людям свободу действий в отношении их исходного кода, позволяя им решать, следует ли использовать его для разработки и оценки моделей машинного обучения, поскольку сообщество признает, что не все разработчики могут захотеть, чтобы их данные использовались для этого.

Этот инструмент позволяет проверить, является ли репозиторий под именем пользователя частью набора данных The Stack. Хотели бы вы удалить свои данные из будущих версий The Stack? Вы можете это сделать, следуя инструкциям здесь.

Примечание. Stack v2.0 создан на основе общедоступного кода GitHub, предоставленного Software Heriage Archive. Он может включать репозитории, которых больше нет на GitHub, но которые были ранее заархивированы Software Heritage. Перед обучением моделей StarCoder 1 и 2 был запущен дополнительный конвейер PII для удаления имён, адресов электронной почты, паролей и ключей API из файлов доступных репозиториев исходного кода.

Теги:
+1
Комментарии 0

Эксперт Джон Джаго назвал два проекта с открытым исходным кодом, у которых разработчиками собрана и представлена исключительная техническая документация, включая высокую детализацию кода и архитектуры. Это esbuild и Redis.

По мнению Джаго, через файлы README, журналы изменений, архитектурные документы и комментарии к коду оба эти проекта объясняют свой дизайн таким образом, чтобы даже новичок может понять в кодовой базе, где что находится, как что-то делается и почему это делается именно так. Он порекомендовал разработчик, желающим лучше документировать свой код и архитектуру программного обеспечения, брать для примера эти проекты.

Преимущества хорошей документации:

  • экономия времени на работы с кодом, особенно если работаете командно, не нужно дополнительно объяснять всю кодовую базу каждому разработчику;

  • такой проект с открытым исходным кодом с большей вероятностью получит поддержку со стороны и, следовательно, продолжит своё существование даже после того, как автор больше не сможет его поддерживать;

  • прошлые ошибки и решения, которые подвергались сомнению, записаны, что не позволяет случайно повторно привести к проблеме, которую помогло решить прошлое решение;

  • приложение или библиотеку смогут использовать больше людей, поскольку меньшему количеству из них придётся во всем разбираться самостоятельно;

  • это помогает структурировать ваше мышление и выявить недостатки. Когда вы пишете, вам необходимо чётко обдумывать и записывать то, что вы думаете, и это выявляет потенциальные проблемы.

Теги:
+2
Комментарии 0

Одна из самых серьезных проблем в разработке программных средств — их тучность, или раздутость. Программы просто становятся слишком большими. Это может быть связано с неразумным выбором функций, но чаще всего становится следствием плохой архитектуры. Популярное средство повторного использования кода — наследование, но его работа оставляет желать лучшего, поэтому вместо него зачастую применяются копирование и вставка кода. Не следует сбрасывать со счетов и чрезмерную зависимость от библиотек, платформ и пакетов, тесно связанных со многими другими библиотеками, платформами и пакетами. Раздутость может быть побочным эффектом приемов гибкой разработки. Чтобы справиться с ней, увеличивают численность команды разработчиков, но это порождает еще большую раздутость.

Лучший способ справиться с раздуванием программ — не допускать его. Приоритетом при разработке и реализации программы нужно сделать ее «худобу». Следует избегать внедрения в практику раздутых пакетов и инструментов, способствующих раздуванию. Обходитесь без классов. Нанимайте небольшие квалифицированные команды разработчиков. И активно практикуйте удаление кода. Создайте резерв из нескольких циклов разработки с целью удаления ненужного кода и избавления от проблемных пакетов. Радуйтесь, когда количество строк кода в проекте уменьшается. Придерживайтесь принципа наименьшей раздутости.

Дуглас Крокфорд, программист, автор формата JSON и книги "How JavaScript Works"

Теги:
+1
Комментарии 7

Разработчик под ником punkx представил список игр, пазлов и головоломок, чтобы научить своего ребенка программированию.

В список вошли (по ссылкам есть pdf с карточками игр для свободной печати, а также описание правил и игровые видео):

Теги:
+2
Комментарии 0

Оплачиваемая стажировка Cloud.ru для AppSec-инженеров — набор до 6 апреля 📢

Присоединяйтесь к AppSecCamp — оплачиваемой стажерской программе, которая поможет начинающим IT-специалистам прокачаться в одной из самых востребованных областей на стыке разработки ПО и информационной безопасности. 

За три месяца вы:

  • прокачаете навыки безопасной разработки приложений; 

  • научитесь определять уязвимости в коде на языках Go, Python, JavaScript, TypeScript и других; 

  • получите опыт работы с SAST-, DAST- и SCA-инструментами;

  • научитесь проводить моделирование угроз и security code review. 

Прием заявок на AppSecCamp открыт до 6 апреля включительно, а для прошедших этапы отбора стажировка начнется 13 мая. Пройти стажировку можно очно — в офисе Cloud.ru в Москве, а также удаленно из любой точки РФ.

А в статье можно почитать о результатах и впечатлениях участников стажировок Cloud.ru в 2023 году. Используйте шанс погрузиться в реальные проекты, обучиться актуальным технологиям и продолжить работу в крутой компании. 

📬 Подать заявку на AppSecCamp

Еще полезное в блоге:

Теги:
0
Комментарии 0

Как разработчики решали одну маленькую, но NP‑полную проблему — поделимся на конференции GoCloud про облака 📝

Что общего между загрузкой транспортных контейнеров на судно и грамотным формированием портфеля ценных бумаг? Все это задачи комбинаторной оптимизации, которые можно свести к спиновой модели. Квантового компьютера под рукой не оказалось, зато были две Tesla V100 с кучей памяти и тензорных ядер, методы линейной алгебры, альфа-бета отсечение и фортрановские библиотеки. Не то чтобы все это было необходимо, но хотелось найти точное решение, которым ведущий разработчик Cloud.ru Александр Мальцев поделится на конференции GoCloud.

📌 Тема: Кейс: как решить одну маленькую, но NP‑полную проблему

📅 Когда: 21 марта в 15:30 мск

👉 Зарегистрироваться

Что еще интересного будет на GoCloud, смотрите в программе конференции

Полезное в блоге:

Теги:
0
Комментарии 0

«Много ядер» не имеет смысла

Нашумевший в конце прошлого года своим выходом мощный процессор AMD Threadripper Pro 7995, оказывается, не оправдывает себя в реальной жизни. Здесь понимаем под этим обычные условия использования, т. е. нет специального навороченного охлаждения, обычный корпус, память в пределах разумного и т. д.

AMD Threadripper 7000
AMD Threadripper 7000

Вот тут описывается опыт использования в разных конфигурациях. Вкратце: из‑за поставленного ограничения на тепловыделение в 350 Вт процессор не использует всю имеющуюся у него мощь, так что работа всего на 16 ядрах оказывается равносильна работе на всех 96. Процессор просто сбрасывал скорость при достижении предельного тепловыделения. Нагрузка была в виде сборки всего проекта Хромиум. Плюс ко всему, потребовалось значительно больше памяти, для того, чтобы сборка в принципе работала на таком большом количестве ядер. Для использования всей мощности автору пришлось делать специальную конфигурацию машины.

В общем чип оправдывает себя только при использовании в специальных условиях.

По своему опыту могу сказать: на старенькой машинке Атлон II x4 (2009г) Хромиум собрался за ~40 часов.

Теги:
+3
Комментарии 14

Как превратить блочное хранилище в объектное — тема доклада на IT-конференции GoCloud про облака 📝

Всем привет! Продолжаем знакомить с программой конференции GoCloud про облака.

📌 Тема: Cloud.ru Evolution Object Storage: как превратить блочное хранилище в объектное

📅 Когда: 21 марта в 14:40 мск

Если вам интересны вопросы масштабирования, версионирования и консистентности в понимании протокола S3 — приходите послушать доклад. Расскажем о том, как написали свое объектное хранилище, какие подходы рассматривали и с какими проблемами столкнулись.

👉 Зарегистрироваться на GoCloud

Что еще интересного есть в блоге:

Теги:
+3
Комментарии 0

Фильтры Throttling VS Debounce

Оказывается, они работают по-разному )

Еще посты об IT в ИТ БД → t.me/it_bd

Оба этих фильтра используются для того, чтобы не дублировать события.

Например, пользователь злостно и быстро кликает на кнопку «Обновить» десять раз подряд.

Но нам достаточно сделать один запрос к беку вместо десяти, чтобы получить актуальное значение.

В этом случае нужно отфильтровать лишние события, то есть пропустить лишние клики, обработав лишь 1 событие.

И тут есть два подхода:

  • Throttling  — пропускает первое событие и игнорирует остальные N миллисекунд

    Например, если установить Throttling = 500мс, то обработается первый клик, а все следующие 500мс клики будут игнорироваться.

  • Debounce  — отсчитывает N миллисекунд после последнего события и только после этого пропускает последнее событие.

    Например, если установить Debounce = 500мс, то клики будут игнорироваться, пока пользователь не сделает перерыв в 500мс. После 500мс простоя последнее событие обработается.

остальные посты

Теги:
+3
Комментарии 0

5 полезных расширений VScode для работы с документацией

  1. Draw.io Integration

    Хорошо подходит для работы со сложными диаграммами: сперва можно создать диаграмму в десктопной версии Draw.io, а потом доработать ее в VScode с помощью расширения Draw.io Integration.

Создание диаграммы Draw.io с помощью расширения Draw.io Integration (иллюстрация: Rami Krispin)
Создание диаграммы Draw.io с помощью расширения Draw.io Integration (иллюстрация: Rami Krispin)
  1. Quarto

    Quarto — крутая штука для работы с документацией под R, Python, Julia и Observable. Расширение Quarto для VScode поможет редактировать и рендерить QMD-файлы. В нем есть режим предварительного просмотра, который позволяет менять код документа и одновременно просматривать результат.

  2. Jupyter

    Jupyter — один из самых популярных фреймворков для создания заметок, особенно в Python. Кстати, Jupyter классно работает вместе с документацией Quarto для Python. Расширение VScode Jupyter интегрирует заметки Jupyter в редактор VScode и поддерживает ipynb-файлы.

  3. Markdown All in One

    С расширением Markdown All in One удобно редактировать документацию в формате Markdown. Оно располагает два окна рядом: редактор кода и тут же результат.

  4. Mermaid

    Mermaid особенно полезен, если вам нужно создать структуру кодовой базы или динамическую диаграмму. В VScode есть два расширения для работы с файлами Mermaid — Mermaid Preview и Markdown Preview Mermaid Support.

Этот топ расширений составил автор этой статьи, а ее перевод читайте у нас в блоге.

Теги:
+12
Комментарии 2

Числа, которые должен знать каждый программист в 2024 году и далее:

  • L1 cache reference = 1 ns (1 нс)

  • Branch mispredict = 3 ns (3 нс)

  • L2 cache reference = 4 ns (4 нс)

  • Send 1K bytes over 1 Gbps network = 11 ns (11 нс)

  • Mutex lock/unlock = 17 ns (17 нс)

  • Main memory reference = 100 ns (100 нс)

  • Read 1 MB sequentially from memory = 1 us (1 мкс)

  • Compress 1K bytes with Zippy = 2 us (2 мкс)

  • Read 4K randomly from SSD = 16 us (16 мкс)

  • Read 1 MB sequentially from SSD = 19 us (19 мкс)

  • Read 1 MB sequentially from disk = 474 us (474 мкс)

  • Round trip within same datacenter = 500 us (500 мкс)

  • Disk seek = 2 ms (2 мс)

  • Send packet CA->Netherlands->CA = 150 ms (150 мс)

Графическая визуализация этих и других данных (чисел, констант) для программистов.

Напишите, пожалуйста, в комментариях ваши числа для проектов в 2024 году.

Теги:
+1
Комментарии 4

Один из авторов термина Open Source и соучредитель Open Source Initiative Брюс Перенс представил первый черновой вариант новой лицензии Post-Open Zero-Cost, нацеленной на решение накопившихся проблем, связанных со взаимодействием разработчиков открытого ПО и коммерческих компаний в контексте получения справедливой обратной отдачи от коммерческого использования кода.

В новой лицензии отражена возможность наложения дополнительных условий на коммерческое использование, например, за получаемую в результате использования открытого ПО выгоду компаниям предлагается расплачиваться либо участием в разработке, либо отчислять деньги, которые будут распределяться между непосредственными разработчиками.

Ключевым отличием лицензии Post-Open от существующих открытых лицензий, таких как GPL, является введение договорной составляющей, доступной для расторжения в случае нарушения условий лицензии.

В Post-Open предусмотрено два вида договорных соглашений: бесплатный и платный. Платный договор предусматривает возможность заключения соглашения на предоставление дополнительных прав и применяется при коммерческом распространении продуктов или внесении изменений без их публичного раскрытия.

Лицензия также определяет организацию POST-OPEN ADMINISTRATION, выступающую от имени лицензиаров, являющуюся их юридическим представителем, при необходимости отстаивающую их права и занимающуюся распределением полученных средств с учётом вклада в разработку.

Источник: OpenNET.

Теги:
+4
Комментарии 0

На GitHub под лицензией Apache License 2.0 опубликован проект под названием Nuke v1.1.0. Это реализация арены памяти для Go с бенчмарками и даже реализацией параллельной арены.

Арена памяти — это метод управления памятью, при котором сразу выделяется большой блок памяти, а его части используются для удовлетворения запросов выделения от программы. В контексте языка со сборкой мусора, такого как Go, использование арен памяти может дать несколько преимуществ:

  • повышение производительности: распределяя память большими блоками, арены памяти сокращают накладные расходы, связанные с частыми вызовами системного распределителя памяти;

  • Улучшенная локальность кэша. Арены памяти также могут улучшить локальность кэша, размещая тесно связанные объекты в одном блоке памяти;

  • эффективность сборки мусора. Использование арен памяти может снизить рабочую нагрузку на сборщик мусора за счёт уменьшения количества объектов, которые необходимо отслеживать и собирать, что приводит к меньшему времени паузы и более предсказуемой производительности.

Однако, хотя арены памяти предлагают эти преимущества, они не являются панацеей и имеют свои недостатки, такие как потенциальное увеличение использования памяти из-за неиспользуемого пространства внутри выделенных блоков. Необходимо тщательное рассмотрение и профилирование, чтобы определить, полезно ли использование арены памяти для конкретного приложения.

Теги:
+1
Комментарии 0

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн

​​​​🕐 15 марта, 11:00 

📌 Бесплатный митап «1С в облаке: возможности и риски, решения и кейсы»

Совместно с Инфостарт проводим митап, посвященный 1С в облаке: разберем реальные кейсы, поговорим о бюджетах, сроках, возможностях и рисках.

Митап будет вам полезен, если вы задавались вопросами: 

  • Какие инфраструктурные решения существуют?

  • Как выбрать подходящее решение для вашего бизнеса?

  • Как распределить роли на проекте по миграции?

  • Как рассчитывать бюджет и какие затраты планировать? Как управлять рисками?

В программе митапа круглый стол и пять докладов, с одним из которых выступит Михаил Успенский — наш менеджер продуктов 1С. 

Регистрируйтесь на митап и получите промокод на использование готового облака 1С или других услуг Selectel ➡️

Теги:
+18
Комментарии 0

Учиться программированию… в Roblox

Я обычно рекомендовал Python как первый язык программирования, плюсы очевидны — простота, популярность, гайды, широкий инструментарий.

Но недавно начал изучать платформу Roblox, и был приятно удивлён её простотой и мощностью. Код в нём пишется на языке Lua (если быть точнее, то на специальном подмножестве «Roblox Lua», но для начинающих это не имеет значения).

На мой взгляд, в обучении программированию очень важен короткий цикл обратной связи — «написал две строчки, запустил, увидел, как они что‑то поменяли, продолжаешь».

Идея Roblox крутится вокруг игровых уровней, которые создают сами участники коммьюнити — причастность к видеоиграм, вероятно, может стать дополнительной мотивацией для начинающих.

После прохождения туториала Coding Fundamentals (около 4 часов в неспешном режиме), я потратил несколько вечеров на создание демонстрации работы «пузырьковой» сортировки.

Код вышел в ~300 строчек с учетом работы с 3D примитивами, которые изображают сортируемый массив:

https://github.com/itlgrim/roblox‑demos/blob/main/sorting‑algorithms/bubble‑sort/BubbleSort.module.lua

Кому интересно, там же лежит файл с уровнем, который можно открыть в Roblox Studio:

https://github.com/itlgrim/roblox‑demos/blob/main/sorting‑algorithms/bubble‑sort/Bubble Sort Demo v1.rbxl

Саму трёхминутную демку залил на YouTube (как оказалось, я не первый, кто пишет сортировки в Roblox, но могу заверить, что эта идея родилась у меня независимо):

Теги:
+1
Комментарии 0

Что если использовать гамма-спектрометры и бета-спектрометры Atom Spectra как поисковые приборы?

В этом видеоролике поговорим о применении гамма-спектрометров Atom Spectra Nano, Atom Spectra Nano PRO и Atom Spectra Beta PRO в качестве поисковых приборов. И покажем на примере перемещающегося источника излучения модель пятнистости распределения загрязнения на грунте.

Да. Над программным обеспечением в части графика cps/МЭД ещё можно поработать. Эта часть приложения для гамма-спектрометра уступает приложению Atom Swift для счётных сцинтилляторов и гейгеров Проекта Атом. Тем не менее вполне информативно.

На территориях радиоактивно загрязненных и обозначенных на картах по цезию-137 как 4-40 кБк/кв.м никакие приборы, называемые в народе дозиметры не покажут никаких интересных средних значений. На правой части этого диапазона у спектрометра ещё есть шансы показать загрязнение по цезию-137 (линия/пик на 662кэВ) довольно быстро. А вот в левой части этого диапазона загрязнений можно попасть в ситуацию, когда время на набор статистики в качестве спектрометра окажется больше, чем возможность просто перемещая спектрометр Atom Spectra на дистанциях 10-30 метров легко обнаружить пятнистость распределения загрязнения. Пятнистость есть всегда. Это не идеальное лакокрасочное покрытие. Именно пятнистость даст бОльший разброс значений cps или мощности дозы по сравнению с зоной 2кБк/кв.м. В зоне 2кБк/кв.м никакими приборами и никакими методами загрязнение не обнаружить. Дальше только радиохимия.

Теги:
0
Комментарии 0

Что если детектор радиации должен обнаружить радиоактивный груз, двигающийся на большой скорости?

КБ Радар демонтировало свой стенд на ВДНХ 25 февраля вечером, но перед этим к нам в гости приехал соавтор приложения для спектрометров Atom Spectra - Сергей и привез с собой кучу интересных датчиков радиации  для тестирования скорости реакции датчиков на движущийся источник излучения.

В этом видеоролике обсуждаем с Сергеем, какие детекторы и каким образом реагируют на источник излучения, двигающийся с довольно большой скоростью.

Теги:
+5
Комментарии 0

Состоялся выпуск Tcl/Tk 8.6.14, динамического языка программирования, распространяемого совместно с кроссплатформенной библиотекой базовых элементов графического интерфейса. Основное распространение Tcl получил как платформа для создания интерфейсов пользователя и как встраиваемый язык, при этом Tcl также подходит для быстрого прототипирования, веб-разработки, создания сетевых приложений, администрирования систем и тестирования.

Исходный код проекта распространяется под лицензией BSD.

Основные изменения в Tcl/Tk:

  • приведена к кроссплатформенному виду нормализация файловых путей и обработка символа "~" в путях;

  • имя пути, начинающееся с '//' не замещается через '/' в том числе в Cygwin и в QNX;

  • разрешён пустой режим в [chan create] ("[chan create {} $cmd]") для разрешения refchan версии [socket -server];

  • повышена производительность fork при использовании многопоточности с помощью vfork/spawn;

  • обеспечен вызов getsockname(2) в Tcl_MakeFileChannel(3) только тогда, когда это необходимо;

  • защита Tcl/tclsh усилена с помощью функции pledge(2) в OpenBSD или похожих механизмов;

  • tcltest адаптирован для поддержки Tcl 9 (>= tcltest 2.5.7);

  • обеспечено применение замещающего символа при декодировании неполных последовательностей Unicode;

  • из win/makefile.vc убрана опция utf16;

  • zlib обновлён до версии 1.3.1;

  • libtommath обновлён до версии 1.2.1;

  • install-sh обновлён до версии 2020-11-14.01;

  • добавлена поддержка Unicode 15.1;

  • в "[interp limit time -seconds]" решена проблема 2038 года.

Источник: OpenNET.

Теги:
+1
Комментарии 0

Копал в поисках хорошего материала — и откопал вот это чудо:

HOMS — Hardware-Oriented Microprocessor Simulator, или аппаратно-ориентированный симулятор микропроцессора. Автор этого образовательного проекта — профессор, написавший две книги в области электроники и программирования:

Github автора.

В первоисточнике о проекте утверждается, что:

  • комплектующие доступны на любом рынке электроники;

  • возможно создавать инструкции ассемблера под свои задачи;

  • HOMS не требует ПК.

Лицензия — CC BY-NC-SA 4.0 DEED.

Полное техническое описание HOMS в PDF.

Теги:
+4
Комментарии 0

Проклятие дженериков 💀

Дженерики могут показаться очень простой темой.
Например, вот так в Java выглядят классные и простые методы интерфейса List:

interface List<E> extends Collection<E> {
	boolean add(E e);
	E set(int index, E element);
}

Но у обобщений много нюансов: вложенность, вариантность, границы и т.д. Это сильно усложняет их использование.
Вот не менее классный, но совсем непростой flatMap интерфейса Stream🙈:

interface Stream<T> extends BaseStream<T, Stream<T>> {
	<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
}

Также, реализация дженериков - всегда трейдоф. Мы либо получаем большой исполняемый файл, из-за того, что приходится генерировать код для разных типов. Либо получаем дополнительную нагрузку в рантайме, из-за различных проверок.

Из-за таких сложностей, в языке Go (философия которого - простота и минимализм) дженерики появились аж через 12 лет после релиза языка. А первый коммент про то что нужны дженерики появился меньше чем через 24 часа🙃

Во многих популярных языках дженерики появились не с первой версии, но рано или поздно, разработчики были вынуждены их ввести:

  • С++ вышел в 1979, дженерики - 1986

  • Java - 1996, дженерики - 2004

  • C# - 2001, дженерики - 2005

  • Go - 2009, дженерики - 2021

Теги:
+1
Комментарии 8

Вклад авторов