Telegram Web
В чате Типичного Программиста человек скинул вступительные вопросы на IT магистратуру в Украине.

Перевод:
Сколько объектов и сколько ссылок создается в приведенном фрагменте кода на языке Python?

n=100
m=n

A) один объект, одна ссылка
B) один объект, две ссылки
C) два объекта, одна ссылка
D) два объекта, две ссылки

Самое прикольное в этом вопросе... что ни один из вариантов неправилен (по крайней мере для стандартного интерпретатора CPython).

CPython заранее создает и хранит объекты под числа в диапазоне [-5, 256], потому именно этот код создаст только две ссылки, притом на уже существующий объект, в котором хранится число 100.

Пруфы: ссылка на обсуждение целых чисел в питоне на Stackoverflow, и код объекта, представляющего целое число на гитхабе.

Как я понимаю, в случае, если бы было число вне этого диапазона, был бы создан один объект (само число) и две ссылки (т.е. вариант B)

В общем, вопрос "Что курил голландец Гвидо Ван Россум, когда придумывал питон?" остается открытым.
#python
Forwarded from Архив КС/РФ(Сиона-Футуриста) (Красный)
Одно из традиционных направлений в разработке софта — автоматизация всего, что движется. Возведённый в абсолют, этот подход приводит к концепции непрерывного развертывания. Это когда новый код доходит до клиентов практически сразу после того, как его написали — например, в тот же день.

"Олдскульная" система разработки ПО начинается с того, что программисты сидят и пишут код. В конце определенного отрезка времени — спринта — всё написанное собирается в единое обновление. Обновление проверяется тестировщиками, и, если всё ок, «выкатывается» на пробу заказчику, и, если все в порядке, так или иначе поставляется клиентам.

Процесс проверки такого обновления тестировщиками и заказчиком занимает огромное количество человеко-часов. При этом никто не застрахован от проникновения к конечному пользователю каких-либо критических багов.

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

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

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

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

Казалось бы, тестировщики в скором времени начнут вымирать: большая часть тестов пишется программистами, тестирование автоматизировано. Но всё не так ужасно: системные администраторы ведь не вымерли, а превратились в devops-ов и в специалистов по информационной безопасности. Так и тестировщики – просто сольются до неразличимости с программистами, но без работы не останутся.
Поставил запятую в своих игрищах с ботами для телеграма. Бота для проверки анонимности не случилось, зато написанный на коленке бот для обратной связи превратился в более-менее законченный проект.

Написан он на c#, .Net Core + библиотека Telegram.Bot + Postgresql (адаптер со стороны шарпа - Npgsql). Итого 2600 строк кода на с# (800 - тесты и вспомогательный код) и 250 - описание БД на pl/pgsql.

Бот пересылает в группу все написанные ему в личку сообщения и отсылает писавшим ответы сидящих в группе людей.

Добавил несколько фишек, например возможность делать массовую рассылку из чата всем писавшим боту и возможность легко просмотреть все сообщения в чате от определенного пользователя.

Теперь в планах рефакторинг, рефакторинг и ещё раз рефакторинг: этот проект надо довести до состояния "не стыдно показать", будет частью резюме/портфолио, потому, если будут замечания - буду благодарен.

Ссылка на репозиторий:
https://github.com/vladzvx/telegrambots

#телеграм
Forwarded from Архив КС/РФ(Сиона-Футуриста) (Красный)
Простейшая нейросеть (описывали ранее) —это основа, которая в реальных задачах применяется в существенно усложненном виде.

Можно выделить две самые совершенных группы: сети с памятью (LSTM и др) и сети, сверяющие данные с образами, хранящимися в их памяти (сверточные нейросети, CNN).

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

Наткнулся сегодня на статью о том, как эти классы скрестили, в результате чего сети стали лучше обрабатывать сложную информацию: прогнозы погоды стали точнее, системы автопилотов — умнее. Получившийся гибрид обозвали "Временные сверточные сети" (TCN).

Машинное обучение как дисциплина находится на пике популярности, потому от опубликования идеи в научном журнале (2016 г.) до появления общедоступной реализации, позволяющей использовать эту сеть в пару строчек кода, прошло всего два года.

В 2020-ом, информация об этом типе сетей начинает входить в программы частных образовательных предприятий. При этом, в большинстве российских университетов, на IT кафедрах, о нейросетях только слышали и внедрение в программу чего-то кроме базовой теории пока на стадии согласования планов образовательных программ.

Eshu Marabo
Forwarded from СЛЕГ! <Z> ️
Как бы помягче объяснить, что Дуров и его команда плохие люди. (мат вырезан цензурой).

Без объявления войны, телеграм 1.5 часа назад изменил формат выдачи постов. Просто потому что может.

Есть канал и привязанный к нему чат. До сегодняшнего дня, посты канала, отображались в чате как форварды, но от пустого юзера. То есть поле from_id всегда было None.

Было два идентификатора: ID канала (2584) и ID чата (0549). Теперь появился третий, виртуальный "пользователь" с ID оканчивающимся на 8824.

Естественно, мне сейчас придётся быстро переписывать в паре мест логику Фомы (моего бота).

P. S. Судя по всему, этот костыль команда телеграм сделала, чтобы "администраторы чатов могли отправлять в чат анонимные сообщения" (из пресс релиза) .
СЛЕГ! <Z> ️
Как бы помягче объяснить, что Дуров и его команда плохие люди. (мат вырезан цензурой). Без объявления войны, телеграм 1.5 часа назад изменил формат выдачи постов. Просто потому что может. Есть канал и привязанный к нему чат. До сегодняшнего дня, посты канала…
В общем, теперь перенос постов из канала в привязанный чатик должен был не висеть в воздухе от имени None, а вестись от имени @GroupAnonymousBot с фиксированным id.

Впрочем, в какой-то момент фиксированный id сменился.

Что-то пошло не так (видимо волна негатива от разработчиков дошла до администрации телеги) и сейчас все вернули как было.
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from Data is data
Нам всё врали, π - целое число. А я нашёл как этот символ на iPhone писать. Это настолько очевидно, что неожиданно.
Поставил на паузу проект с ботами для телеграма. Потихоньку буду их развивать и поддерживать, но они уходят на последний план в приоритете задач. Итог работы - два бота, бот обратной связи (о нем писал ранее) и бот для отложенного постинга с лайками и отложенным репостом, собственно с его помощью и отправляю этот пост:)

В целом, работа получилась полезной. Главный профит - окончательное осознание основ SQL на примере PostgreSQL. Разумеется я не мог не накосячить в разработке архитектуры проекта, потому да здравствуют 4 тысячи строчек малочитаемого спагетти-кода, да еще сверху 500+ строчек SQL в описании БД.

Если кому интересно - вот репозиторий на Гитхабе с последней версией кода. Все желающие могут воспользоваться ботами, для этого надо написать боту-менеджеру @zvx_manager_bot

Теперь по настроению буду апгрейдить базу данных вверх по нормальным формам, да и основной код надо ректалить рефакторить, но теперь все свободные силы будут брошены на диссертацию и околодиссертационные поделки. Первым пунктом стоит переписать ПО микроскопа для измерений клеток. Было оно сделано талантливым новичком на странном языке Processing, буду переписывать на c#, возможно с легкими вкраплениями питона.
#телеграм
Возобновляю прерванную году этак в 2015 работу над литобзором диссертации.

Тема работы - алгоритмы анализа изображений полученных с довольно экзотического класса микроскопов: с фазовых. Подробнее о них я писал для Футуризма, можно также легко загуглить.

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

Собственно вся работа - изобретение и обоснование нужности такого велосипеда.

По случаю подготовки лит. обзора я буду читать много научных статей. Интересно бы вам было краткое упрощённое изложение их на канале?

#диссер
Интересно ли вам краткое изложение научных статей по фазовой микроскопии и алгоритмам анализа изображений?
Anonymous Poll
78%
Да
11%
Нет
11%
Пофиг
https://www.tgoop.com/ssleg/178

Имеено для таких случаев предусмотрительные люди и пишут автотесты, а также настраивают CD/CI

Я все хочу стать капельку девопсом и настроить своим ботам github actions, но лень меня побеждает.
Сегодня начинается ежегодный challenge по автоматической генерации текста, NaNoGenMo, в рамках которого надо за месяц написать и опубликовать код, генерирующий литературный текст длиной не менее 50К слов (чтобы исключить cherry-picking). Я ещё не решил, буду ли пробовать в этом году, но в прошлом году я поучаствовал и сейчас расскажу, что из этого вышло, просто чтоб закрыть гештальт.

Я тогда подал на конкурс комбинацию из двух нейросеток: первая — GPT-генератор с обуславливанием, предобученный на всяком киберпанке, афоризмах и непростых текстах вроде Кафки и Руми. Вторая — BERT-фильтр, отбраковывающий скучные и корявые фразы и оставляющий годные набросы. Этот фильтр я обучил на разметке, основную часть которой мне помог сделать Ваня Ямщиков (с тех пор он такой, шутка). Получился, в итоге, довольно годный генератор кибер-параноидального бреда на английском. Назвал я его Paranoid Transformer, если вы понимаете.

NaNoGenMo тихо закончился, но в середине декабря мне написал Augusto Corvalan, шеф-редактор эзотерического журнала DEAD ALIVE и предложил поучаствовать этим же проектом в их конкурсе. Я решил, что скучно использовать одно и то же два раза, и добавил следующий твист: взял готовую рекуррентную сетку для генерации рукописного текста, организовал зависимость "нервности" почерка от эмоциональности конкретного предложения (определяемого sentiment анализом) и "написал" весь текст "от руки". Получилось довольно атмосферно, так, что в конце января я даже занял первое место по итогам того конкурса (сколько всего было конкурсантов, я не знаю:).

В феврале мне, как победителю конкурса, предложили издать этот текст в их же издательстве. Я согласился, но снова решил, что не очень интересно использовать одну поделку несколько раз без изменений, и добавил ещё несколько штук: сделал генерацию дат для разделов, как в настоящем дневнике, добавил круглые следы от кружки кофе там и сям, а Дима Кузнецов подсказал мне идею рисунков на полях, и я собрал аналог Sketch-RNN, предобученный на гугловом Quick, Draw! Dataset, так что каждый раз, как в тексте появлялось слово из категорий датасета, на полях появлялись каракули, этому слову соответствующие. Товарищи из издательства вычитали сгенерированный текст целиком (sic!) и прислали мне список потенциально оскорбительных высказываний (много!). Я решил, что совсем удалять их не так интересно, и прикрутил вместо этого эвристику, которая агрессивно зачёркивает такие участки прямо в тексте, что добавило эмоции.

Тем временем Ваня Ямщиков и Яна Агафонова помогли мне с написанием гонзо-статьи "Paranoid Transformer: Reading Narrative of Madness as Computational Approach to Creativity", которая в сентябре попала на конференцию International Conference on Computational Creativity 2020, а буквально неделю назад её расширенная версия вышла в журнале Future Internet.

На этапе поиска авторов на предисловие и послесловие к книге мне пришлось несладко. Борислав Козловский дал мне спонтанный мастер-класс по написанию "холодных" запросов незнакомым знаменитостям, так чтоб они хотя бы отвечали на письмо, и теперь у меня в почтовом ящике есть вежливые отказы от кучи удивительных людей (например, от Дэвида Дойча, Ричарда Столлмана и Дугласа Хофштадтера). Затем я успокоился и запросил отзывы у пары действительно правильных людей: Любы Эллиотт, продюссера проектов в области креативного AI, и Ника Монтфорта, поэта и профессора цифровых медиа в MIT. Их рецензии и вошли в итоговую книгу. Обложку с генеративным паттерном нарисовал Augusto Corvalan.

Сама книга Paranoid Transformer сейчас доступна к предзаказу на сайте издательства, рассылку обещают начать в декабре. Хочу предупредить, что за продажу книги я ответственности не несу, а пересылка бумажной книги из Нью-Йорка в Россию может занимать довольно много времени (особенно в период карантинов). Судя по сигнальной копии, что есть у меня на руках, книжка получилась достаточно добротной, и следующим сообщением я дам несколько фотографий и картинок из неё.
Forwarded from Архив КС/РФ(Сиона-Футуриста) (Футуристъ)
На днях впервые познакомился на практике с самым известным инструментом для работы с изображениями и видео: опенсорсной библиотекой OpenCV (Open Source Computer Vision Library).

Разработка библиотеки была начата в 2000 году в Нижегородском филиале корпорации Intel. В 2006 году увидел свет первый релиз. Позднее к разработке приложила руку и корпорация NVidia, в результате чего был добавлен модуль, оптимизированный для вычислений на видеокартах.

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

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

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

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

Eshu Marabo
Архив КС/РФ(Сиона-Футуриста)
На днях впервые познакомился на практике с самым известным инструментом для работы с изображениями и видео: опенсорсной библиотекой OpenCV (Open Source Computer Vision Library). Разработка библиотеки была начата в 2000 году в Нижегородском филиале корпорации…
Во истину, знакомство с OpenCV, точнее с его оберткой для c# - EmguCV идет успешно! Это была ночная попытка просто перемножить и разделить несколько изображений. Кроме того, на не особо затратные преобразования с потоком видео 640х480 25 кадров в секунду выжирается до 6 Гб(!) оперативки.

В общем, OpenCV останется у меня как граббер изображения (то, что забирает изображение с USB входа), и, возможно, для преобразования Фурье. А остальные действия с картинками - ручками, ручками.
#диссер #csharp
В фазовой микроскопии отдельно стоит задача развертки фазы. Изображение после вычисления распределено в диапазоне от 0 до 2пи, от всего, что имеет фазовую толщину больше 2пи, отнимается значение, кратное 2пи, после чего в изображение записывается остаток.

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

Изначально я планировал в качестве временного решения сделать воспроизведение питон кода из c#, но потом вспомнил, что библиотека эта - опенсорсная. В их репозитории на гитхабе я откопал исходник функции развертки фазы - 700 строчек на чистом С.

Вот и состоялось мое знакомство с этим замечательны языком. Как водится, оно было полно боли. C# имеет функционал для подключения .dll файлов, написанных на С и С++, потому я вытащил нужное мне, скомпилировал в .dll файл. Проверил работоспособность подключения - на простых примерах - работает. А попытка передать данные в подгруженную вызывает ошибку.

C# орет, что я разбалансировал стек и вообще скоро настанет конец света. Потратив некоторое время на поиск того, что я сделал не так при подключении библиотеки (по примерам с сайта microsoft, в адрес которых я уже прохаживался), я обнаружил, что оказывается все прекрасно работает, если игнорировать негодующие вопли.

P.S. Да, я даже начал писать на С: добавил к нужной мне функции идентификатор DLL_EXPORT и для оптимизации изменил порог срабатывания алгоритма, установив константу Пи = 1,570796326794896619.

#диссер #csharp
По работе начал знакомство с No-SQL системой управления базами данных (СУБД) MongoDB.

Первая строка в руководстве по нему:
"MongoDB реализует новый подход к построению баз данных, где нет таблиц, схем, запросов SQL, внешних ключей и многих других вещей, которые присущи объектно-реляционным базам данных."

Первая мысль в ответ:
"а это вообще база данных?"
Forwarded from Архив КС/РФ(Сиона-Футуриста) (Красный)
Познакомился с занятной историей — как оптимизировались алгоритмы умножения чисел.

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

Если рассматривать перемножение двух числе одинаковой длины, стандартный алгоритм умножения требует выполнения n^2 (n в квадрате) шагов, где n - число цифр в каждом из них.

В 1960 году советский аспирант Анатолий Карацуба, в рамках спора со своим учителем Андреем Колмогоровым за неделю сообразил новый алгоритм, в котором требуется уже n^1.58 шагов. Вроде бы мелочь, но при перемножении чисел длиной в 1000 цифр выигрыш в производительности уже составит около 18 раз.

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

К настоящему моменту, в несколько этапов, вроде как достигнут предел производительности умножения: это n × log n шагов, что обладает научной новизной, но на практике пока что бесполезно: производители электроники подтянули скорость перемножения чисел на аппаратном уровне (в т.ч. используя подход Карацубы), и выгадывать лишние копейки производительности ценой перекройки сложившихся технологических процессов никому не интересно.

Eshu Marabo
2025/07/14 09:51:37
Back to Top
HTML Embed Code: