• Почему не отображается фоновое изображение в Tkinter?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Измените self.root.image = PhotoImage('font.jpg') на self.root.image = PhotoImage(file='font.jpg')
    Ответ написан
    1 комментарий
  • Нужно ли хорошо разбираться в алгоритмах джуну?

    @kalapanga
    Вопрос этот о необходимости знаний алгоритмов в той или иной форме всплывает здесь часто. Напишу своё субъективное мнение.
    Начинающему программисту знание алгоритмов больше всего может пригодиться на собеседовании, если собеседователь не придумает ничего лучше, чем заставить Вас при нём писать реализацию вот такого-то алгоритма!
    А потом может оказаться так, что Вы за всю жизнь не обошли ни одного графа (не писали код для этого), а для сортировки Вам всегда хватало стандартной процедуры из любимого языка.
    По-моему, программист молодец, если он знает, например, сам факт, что методы сортировки могут иметь разную эффективность в зависимости от характера данных и при необходимости найдёт и выберет нужный. А держать все их названия и реализации в голове - надо ли? Всё, что не применяется на практике, один чёрт, забудется.
    Ещё раз повторюсь, что это моё сугубо личное мнение, и я на нём ни в коем случае не настаиваю.
    Ответ написан
    Комментировать
  • При выводе на экран список сокращается. Как сделать чтоб выводился весь список?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    pd.options.display.max_rows = 1000 перед выводом.
    Ответ написан
    3 комментария
  • Как подготовиться к Олимпиаде по криптографии?

    @dmshar
    Странный вопрос. Мне казалось, что в Олимпиадах участвуют те, кто уже занимается тем или иным предметом, имеет о нем хоть какое-то представление понимает, где искать ответы на вопросы, которые могут возникнуть. А не те, кто - как следует из вопроса - первый раз услышал о том, что такое "криптография".
    Ну, если вы даже в Google сами искать не умеете - помогу вам. Вот ссылки на подборки книг по криптографии, в основном для новичков:
    https://progerlib.ru/cryptography-encryption-books
    https://codernet.ru/articles/drugoe/knigi_po_kript...
    https://www.afisha.ru/article/5-interesnyh-i-ponya...
    https://gorky.media/books-collection/5-knig-o-tom-...
    Выберете себе 4-5 книг, прочитайте, разберитесь, потом - можно пару учебников себе отобрать:
    https://studfile.net/preview/6311470/
    https://www.mccme.ru/free-books/izdano/2013/crypto...
    https://books.ifmo.ru/file/pdf/929.pdf
    https://intuit.ru/studies/courses/691/547/info
    https://books.google.ca/books?id=vbZXDwAAQBAJ&pg=PA86

    и на Олимпиаду. Будет шанс хоть на какой-нибудь вопрос достойно ответить
    Ответ написан
    Комментировать
  • Как попасть в IT школьнику?

    @res2001
    Developer, ex-admin
    Если в твоем городе есть нормальный ВУЗ, то иди учись. Если нет, то стоит поискать куда ты можешь поехать учиться. У тебя сейчас единственная возможность в жизни получить бесплатное образование. Скорее всего такого подарка судьбы больше не будет никогда. Бывают, конечно, исключения.
    Обучение это не столько "новые технологии" программирования. Это еще и математика и прочие предметы, которые хорошо ставят мозги на место. Это то же нужно, если и не для программирования, то для собственного развития.
    Но самое главное, чему ты должен научиться в ВУЗе - учиться самостоятельно. Впрочем, похоже, это у тебя не плохо получается. Значит будешь оттачивать навык :-)
    Желаю удачи!
    Ответ написан
    5 комментариев
  • Как попасть в IT школьнику?

    xez
    @xez
    TL Junior Roo
    1. До 18ти лет, скорее всего, никуда не возьмут.
    2. В вашем возрасте обучение максимально быстрое и эффективное.

    Отсюда план:
    1. Учитесь, читайте книги, набивайте руку на пет-проектах. Читать и учиться придется на протяжении всей карьеры (спойлер, т.к. пенсии у вас не будет - всей жизни).
    2. Заканчивайте 11й класс.
    3. Постарайтесь поступить в ВУЗ (опционально).
    4. После первой сессии начинайте искать работу. К этому времени у вас должно скопиться небольшое портфолио проектов и опыт достаточный для трудоустройства на младшие позиции.
    5. Спокойно доучивайтесь в ВУЗ-е (опционально), паралельно работая.
    Ответ написан
    7 комментариев
  • Как исправить ошибку с регулярными выражениями?

    Vindicar
    @Vindicar
    RTFM!
    Ну так почитай основы.
    Во-первых, используй r-строки, чтобы не натыкаться на проблемы с символом \.
    Во-вторых, изучи зарезервированные символы регулярных выражений, а именно: ( ) [ ] ^ $ . ? * +. Если тебе нужен этот символ как просто символ, его надо экранировать! Т.е. если тебе нужно совпадение с символом ?, надо писать \?.
    В-третьих, для поиска символа из указанного набора используются квадратные скобки, т.е. [abc] совпадёт с одним символом из указанных: a, b или c. Для задания диапазона можно сделать так: [a-z]. Это зачастую короче.
    В-четвёртых, для поиска символа НЕ из указанного набора используется такой синтаксис: [^abc]
    В-пятых, есть заранее заданные наборы. Например, \w описывает словесные символы (буквы, цифры и подчёркивание), \d описывает цифры, и т.д. Аналогично, \W и \D описывают всё кроме словесных символов и цифр, соотв.
    Тогда у тебя будет два варианта
    Если подчёркивание - не проблема:
    re.sub(r'\W', '', 'test:_:test', re.I)  # даст test_test

    Если подчёркивание тоже нужно убрать:
    re.sub(r'[\W_]', '', 'test:_:test', re.I)  # даст testtest
    Ответ написан
    1 комментарий
  • Как подгрузить файл JSON в python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Есть ещё один способ загружать неформатные файлы, похожие на json.
    Дело в том, что любой json файл представляет собой валидный yaml-файл.
    Но yaml гораздо боле гибкий формат, который "проглатывает" и ключи без кавычек, и трейлинговые запятые.
    Можно много спорить по поводу безопасности и корректности использования yaml для парсинга невалидных json, но иногда просто нет выхода и нужно обрабатывать огромное количество таких уже имеющихся файлов.
    import yaml
    with open('test.json', encoding='utf-8') as f:
        data = yaml.load(f, yaml.CSafeLoader)
    Ответ написан
    Комментировать
  • Что эффективней, чтение из файла или массив?

    @dmshar
    Уважаемый mayton2019 дал в общем-то почти исчерпывающий ответ. Но раз вы задали этот вопрос "из возникшего интереса", то есть шанс, что и другим ответы данной темы будут интересы, потому попробую еще чуть-чуть дополнить упомянутый ответ.

    Возможно многие и не слышали, но тем не менее существуют т.н. In-memory database (по-русски это, кажется, называется "Резидентная база данных", но я не уверен). Применяются такие системы как правило в высоконагруженных приложениях - в системах провайдеров телекоммуникационных услуг, когда-то читал - что в системах он-лайн биржевой торговли и пр. Там где данных очень много и доступ к ним нужен очень быстро. И главное - владелец таких данных оччччеееень богатенький, что-бы позволить себе приобрести оборудование с объемом оперативной памяти сопоставимым с объемом внешней памяти для "обычных" серверов баз данных. И вот тогда, для таких задач все данные СУБД, включая все индексы и другой служебно-вспомогательной информации, загоняются в оперативную память, обеспечивая и нужную скорость доступа и удобство доступа, которое обычно присуще СУБД.
    Главнейшая проблема, которую решают разработчики таких систем - как обеспечить целостности базы данных при внезапной перезагрузке систем. Это влияет на производительность In-memory database, заставляя тратить часть вычислительных ресурсов на синхронизацию данных в ОП и резервных копий на внешней памяти.
    Список таких систем можно, кстати, найти даже в Википедии:
    https://en.wikipedia.org/wiki/List_of_in-memory_da...

    Если же "спуститься" с небес на землю и учесть финансовые возможности "нормального" пользователя, то например, в языке программирования Python есть такой модуль - Pandas. По сути он дает удобство доступа к данным, почти такое-же (а может и еще большее) как SQL, сохраняя таблицы в ОП. А скорость обработки - сопоставимую с реализацией на "голых" массивах, а для сложных поисковых запросов - и еще большую. Естественно, что объем таблиц (DataFrame в терминологии Pandas) не может быть слишком большим. И не смотря на то, что есть прямой шлюз для перехода от DataFrame к SQL-структурам СУБД и обратно, скорость работы "в памяти" на много выше, чем скорость работы с теми-же данными, выгруженными в БД. Поэтом программист может комбинировать работу DataFrame для скорости обработки и СУБД для долговременно энергонезависимого хранения, найдя приемлемый для своего приложения компромисс.
    Ответ написан
    2 комментария
  • Смотрят ли на оценки в дипломе при устройстве на работу?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Даже на наличие диплома редко смотрят, внутрь вообще никто никогда не заглядывает.
    Ответ написан
    Комментировать
  • Есть ли статьи, которые приводят наглядные примеры того, как код на rust превосходит код на других языках?

    vabka
    @vabka
    Токсичный шарпист

    Особенно там, где был использован язык Си или С++

    (если исключить memory safety и fearless concurrency)
    1. Хороших плюсовиков найти всё сложнее, ибо молодые разработчики часто хотят что-то более современное/простое/приятное.
    2. Переход с какого-нибудь более высокоуровнего языка на Rust гораздо легче, чем на C++
    3. DX у Rust на порядо лучше.
    4. Код на Rust на порядок более выразительный, чем код на Си

    За счёт этого поддержка кодовой базы на Rust заметно дешевле выходит

    Например вот что Тинькофф пишет:

    Наш Процессинговый Центр занимается разработкой финансовых систем, критичных к даунтайму и времени обработки. Изначально мы делали все свои продукты либо на чистом Си, либо на плюсах (C++14), однако пару лет назад мы переписали большой кусок нашего бэкенда на Rust, и нам настолько понравилось, что теперь все наши новые процессинговые сервисы пишутся на нём.



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

    Это можно будет определить только если ведётся статистика по багам и они классифицируются по причинам возникновения, но такую статистику ведут не все.
    В среднем статистика показывает, что багов связанных с неправильной работой с памятью в проектах на Rust на порядки меньше, чем в проектах на C++.


    ну тут все-равно unsafe

    В проектах на Rust он явный и от него можно избавиться, завернув в безопасную обёртку, которая будет гарантировать корректную работу с памятью и ffi.
    В проектах на C++ у тебя по факту всё является unsafe.

    ну, нам еще нужен подсчет ссылок

    В плюсах тоже активно пользуются подсчётом ссылок и всякими умными указателями, если по коду не очевидно, когда можно будет освободить память
    Ответ написан
    6 комментариев
  • Почему iter из пакета ElementTree не находит тэги?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    При поиске тегов вам нужно указывать пространство имен:
    import requests
    from xml.etree import ElementTree
    
    response = requests.get(
        'https://s3-ap-northeast-1.amazonaws.com/data.binance.vision?delimiter=/&prefix=data/spot/monthly/klines/BTCUSDT/1h/')
    print(response)
    archive_tree = ElementTree.fromstring(response.content)
    namespace = archive_tree.tag.split('}')[0].strip('{')
    for files in archive_tree.iter(f'{{{namespace}}}Key'):
        print(files.text)

    Output:
    <Response [200]>
    data/spot/monthly/klines/BTCUSDT/1h/BTCUSDT-1h-2017-08.zip
    data/spot/monthly/klines/BTCUSDT/1h/BTCUSDT-1h-2017-08.zip.CHECKSUM
    data/spot/monthly/klines/BTCUSDT/1h/BTCUSDT-1h-2017-09.zip
    data/spot/monthly/klines/BTCUSDT/1h/BTCUSDT-1h-2017-09.zip.CHECKSUM
    data/spot/monthly/klines/BTCUSDT/1h/BTCUSDT-1h-2017-10.zip
    data/spot/monthly/klines/BTCUSDT/1h/BTCUSDT-1h-2017-10.zip.CHECKSUM
    ...
    Ответ написан
    Комментировать
  • Что эффективней, чтение из файла или массив?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вопрос не глупый а вполне себе хороший.

    Его плавное развитие приводит к концепции баз данных. Самое главное что можно сказать тезисно это
    1) Пока памяти хватает (массив) - используй смело память
    2) Диск - больше и дешевле памяти
    3) С памятью работать легко. С диском - очень неудобно и надо обрабатывать IOExceptions почти всегда.
    Диски внезапно полны сюрпризов. Могут быть сетевыми дисками.
    4) Разные диски имеют скорость на порядки разную.
    5) Диски ведут себя очень плохо на random access. От этого даже метрика IOPS появилась.
    Ее очень любят обсуждать админы баз данных.
    6) Существуют структуры данных которые спецом создавались только для дисков (B+Tree)
    7) Диск - переживает выключение питания.
    8) Самые разумные решения - сочетают в себе и диск и память в тех частях кода где это нужно.
    9) Есть интерфейсы программирования которые виртуализирут диск как память. Этим пользуется
    SQLite например.
    10) Диск может достигать очень высокой последовательной скорости чтения или записи в файл
    при условии отсутствия конкурирующих записей в данный момент. Этим пользуются в БД
    для журналирования событий.

    В принципе если современный программист просто будет использовать только оперативную память
    то никто ему не сможет ударить по рукам или подойти с какой-то метрикой и чего-то там измерив
    сказать что он неправ. Тут уж только падения по OOM и потери информации и performance issues
    могут быть каким-то значимым аргументом.
    Ответ написан
    3 комментария
  • Что такое событие в ООП?

    Stalker_RED
    @Stalker_RED
    Возьмем к примеру сущность "пользователь". Придумаем ему несколько свойств, методов и событий.
    Свойства: имя, возраст, адрес, баланс.
    Методы: установить имя, прочитать имя, установить адрес, прочитать адрес...
    События: имя изменилось, баланс изменился, аватарка изменилась, пользователь заказал пиццу, или что там у вас за бизнес-логика.

    Вы можете придумать свои события, которые подходят под ваши процессы.
    Ответ написан
    Комментировать
  • Как отправить sql запрос к базе данных на вывод даты регистрации пользователя?

    Vindicar
    @Vindicar
    RTFM!
    SELECT user_id, join_date EXTRACT(DAY FROM date) as day FROM users VALUES (?, ?)

    SELECT запросы c условием пишутся не так.
    Ответ написан
    Комментировать
  • Не те выходные данные как починить код?

    @dmshar
    А вы точно понимаете, что и зачем вы проверяете в своем коде?
    Вот здесь
    field = [input() for _ in range(n)]
    вы задали свои данные. И пошли по циклу. Как вы думаете, условие
    field[i+dx][j+dy] == '.'
    хоть когда нибудь на ваших данных (тех, которые вы привели в условии) примет значение True? Очевидно, что в массиве field значений '.' нет. Значит эта составляющая вашего условия ВСЕГДА будет False. Объединив через оператор
    0 <= i+dx < n and 0 <= j+dy < m and field[i+dx][j+dy] == '.'

    три условия, одно из которых ВСЕГДА равно False, в результате получите разумеется снова False.
    any проверит, получилось ли хоть раз у вас True. А поскольку такого, как мы видели, ни разу не было, в свою очередь выдаст False и поместит его в переменную valid_move.
    Соответственно,
    not valid_move
    даст значение True, сработает условие оператора if, выполниться последовательность

    print('NO')
           exit()

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

    Как работает код я показал. А вот логика ваша мне непонятна вообще. Зачем выписывать условие проверки, которое заведомо никогда не выполняется. Кстати, есть и другие вопросы. Например - если i=j=2, а (например), dx=0, dy=1, то как вы себе представляете элемент массива field[i+dx][j+dy]? Чему будет равно j+dy и какому элементу оно соответствует?
    Что за такую дивную задачу вы решаете - вы не сообщаете. Наверное предполагаете, что все должны это угадать, что-бы суметь подсказать вам правильное решение. Но мне почему-то гадать абсолютно не интересно. Поэтому проблемы с вашим кодом обозначил, а с логикой разбирайтесь дальше самостоятельно.
    Ответ написан
    2 комментария
  • Нейросеть для юристов существует?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Приговор выносит судья. Человек. Потому что любое современное судо-производтсво требует живых людей и их подписей.

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

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

    Что там где-то в америке случилось - надо разбираться. Возможно это неправильно прочитанная новость. Может там речь шла о автоматической выдаче штрафа или еще что-то. Но вряд-ли это был приговор. Вообще такие новости надо читать ... делая большую скидку.
    Ответ написан
    4 комментария
  • Как перевести строку со шрифтом в обычный текст?

    Vindicar
    @Vindicar
    RTFM!
    Встроенной функции нет. И похоже, что речь идёт не столько о разных шрифтах, а сколько о гомоглифах - символах юникода из разных алфавитов, которые выглядят похоже. Например, как русское и латинское "о". Это нетривиальная задача, но пакет confusable_homoglyphs (ставится через pip) может помочь. В частности, функция is_confusable().
    from confusable_homoglyphs.confusables import is_confusable
    
    
    wtf = 'YOᑌ ᑎᗩᗰE 42'
    
    is_good = []
    result = []
    for c in wtf:
        data = is_confusable(c, preferred_aliases=[], greedy=True)
        if data:
            data = data[0]
            alias = data['alias']
            if alias in ('LATIN', 'COMMON'):
                data = False
        if data:
            is_good.append('!')
            print(data)
            result.append(data['homoglyphs'][0]['c'])
        else:
            is_good.append(' ')
            result.append(c)
        print()
    print(''.join(result))
    print(''.join(is_good))

    Работает неидеально, но настройки модуля лежат в JSON - можно кое-что поправить. Или создать issue на гитхабе проекта.

    Конечно, можно извратиться, отрендерить строку и прогнать по ней OCR, но это такая себе идея.
    Ответ написан
    1 комментарий
  • Какие есть беплатные API для Фондового рынка?

    vabka
    @vabka
    Токсичный шарпист
    Ну например можно использовать API тинькофф инвестиций:
    1. Это бесплатно
    2. В качестве источника данных - не только лишь мосбиржа.

    В качестве транспорта используется gRPC - php его поддерживает.
    Какой-то чел даже написал библиотеку для работы с инвестициями через php
    Вот: https://github.com/metaseller/tinkoff-invest-api-v2-php
    Если эта библиотека по каким-то причинам не подошла - можно сгенерировать код самостоятельно, из protobuf-файлов:
    https://github.com/Tinkoff/investAPI/
    Документация к самому API:
    https://tinkoff.github.io/investAPI/

    Вот инструкция по работе с gRPC из php:
    https://grpc.io/docs/languages/php/quickstart/
    Ответ написан
    Комментировать
  • Как написать нейронную сеть для распознавания изменений в графике?

    vabka
    @vabka
    Токсичный шарпист
    1. Нужно искать отклонения не на графике, а на ряде чисел, из которых этот график строится.
    2. Найти выбросы или отклонения от нормы можно найти при помощи классических статистических алгоритмов.
    Главное сформулировать более чётко, что ты хочешь найти, ибо
    отлонения показаний, которые выходят за пределы допустимых.

    Можно решить при помощи простого условия "если замер n выходит за пределы диапазона допустимых значений, то сделать [что-то]", даже без привлечения статистики.

    Если тебе нужно что-то более сложное, что нельзя решить при помощи классических алгоритмов - гугли anomaly detection
    Ответ написан
    2 комментария