Задать вопрос
  • Нужно ли при разработке библиотеки следовать принципу одной ответственности?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Да можно. Это называется фасадом. Ограничение в single responsibility обычно относится к ООП и к классам.

    Вообще если ты фрилансер и делаешь просто заказ чтоб отдать его с концами - то тебе безразлично что будет внутри. Главное чтоб ты понимал. А соглашения по декомпозиции кода на части появляются только как результат
    коллективной работы над кодом. Тоесть ты должен спрашивать не qna, а свою команду как вам удобнее
    разрабатывать код.
    Ответ написан
    Комментировать
  • Почему данные записываются не корректно в MySQL?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    2147483647 = 231 - 1
    Это максимальное 32-битное целое число со знаком.
    Если вам нужно что-то большее, то используйте не число, а строку.
    Ответ написан
    1 комментарий
  • Как импортировать данные из csv в Postgres?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    create temp table import_data (...);
    copy import_data from '/path/to/file' (format csv, ...);
    insert into tablename (...) select .. from import_data where not exists (select from tablename where tablename.phone = import_data.phone) on conflict do nothing;
    Ответ написан
    Комментировать
  • Почему возникает ошибка "Name 'j' can be undefined"?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Потому что переменная цикла может быть не определена за пределами цикла. Либо используйте её в пределах тела цикла, либо определяйте за его пределами.
    Ответ написан
    4 комментария
  • Как не дать права на SELECT?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это называется "доступ по API".
    Вместо прямого соединения с БД, "скрипт" отправляет запросы на удаленный веб-сервер, причем не SQL запрос, а какой-нибудь JSON. А уже приложение на веб-сервере соединяется с БД и отправляет запрошенные данные назад.
    Это приложение будет и ключ проверять, и права доступа - какому пользователю какие данные можно отдавать.
    Именно по такой схеме например работают мобильные приложения в вашем телефоне.
    Ответ написан
    Комментировать
  • Как сделать регулярное выражение на проверку телефона и замену первой цифры на 7?

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

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Случай, когда у вас динамически добавляются новые строки, но все они фиксированной длины - редок. Да и в этом случае можно завести vector из array'ов. Ничего городить нового, тем более в стандартах, не надо.

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

    Но, да, итерация как бы медленнее будет. Но не на много. В одном случае у вас лишняя адресация, а в другом - умножение. И там и там есть обращение к памяти лишнее, но в векторе векторов - читаются данные из массива указателей, а в плоской структуре - одна и та же длина строк. Ну и данные не так локально в векторе лежат. В целом не стоит эта проблема особого внимания.
    Ответ написан
    4 комментария
  • Почему не могу подключиться к Postgres в pycharm?

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

    Не важно какой год. Не важно, на сколько игра знаменитая.
    Хотя если автор музыки умер 70 лет назад - музыка перейдёт в общественное достояние.

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

    1. Саундтрек в играх не всегда оригинальный - в таком случае права на музыку будут принадлежать даже не издателю/разработчику игры, а какому-то музыкальному лейблу.

    2. Даже если ты хочешь использовать именно оригинальный саундтрек, а не лицензированный, и компания уже давно обанкротилась - ты не спеши, скорее всего все права на игру и музыку были куплены другой компанией.
    Ответ написан
    2 комментария
  • Для чего нужен lock в python? Как работает данный пример кода?

    Vindicar
    @Vindicar
    RTFM!
    Это объясняется тем, что в базовом питоне потоки не вполне честные - они конкурируют за global interpreter lock, так что код выполняется всё равно поочерёдно. Так что многопоточность в питоне полезна с точки зрения распараллеливания, но не ускорения. ЕМНИП, есть реализации питона, в которых нет этой GIL problem.
    Но нужно иметь ввиду, что этот GIL блокирует только элементарные операции (как в твоём примере), тогда как явное использование lock может накрывать целые блоки кода, состоящие из нескольких операций с защищаемым ресурсом.

    Вот тебе пример:
    import threading
    import time
    
    class Data:
        def __init__(self):
            self.x: int = 0
            self.y: int = 0
    
    
    do_sleep = False
    run = True
    
    
    def reader(d: Data):
        while run:
            x, y = d.x, d.y
            # по идее это условие не должно выполниться никогда
            if (x != 0) != (y != 0):  
                print(f'Got x={x} and y={y}')
            else:
                print(f'OK {x}', end='\x08\x08\x08\x08')
    
    
    def writer(d: Data):
        while run:
            if d.x == 0:
                d.x = 1
                if do_sleep: pass
                d.y = 1
            else:
                d.x = 0
                if do_sleep: pass
                d.y = 0
    
    
    do_sleep = False
    instance = Data()
    reader_thread = threading.Thread(target=reader, args=(instance,), daemon=True)
    writer_thread = threading.Thread(target=writer, args=(instance,), daemon=True)
    reader_thread.start()
    writer_thread.start()
    try:
        input()
    finally:
        run = False
        reader_thread.join()
        writer_thread.join()


    На моей машине, если if do_sleep: pass закомментировать, то в консоли высвечивается только OK - иными словами, присваивание двух полей выполняется достаточно быстро, чтобы поток не успел переключиться в промежутке. Как следствие, reader() всегда видит либо x=0 y=0, либо x=1 y=1.
    Но если if do_sleep: pass оставить, то выполнение тела цикла замедляется достаточно, чтобы поток успел переключиться - и, как следствие, reader() начинает видеть структуру данных Data в неконсистентном состоянии, когда x=0 y=1 или когда x=1 y=0.
    И вот чтобы не гадать "успеет - не успеет", нужно в таких случаях защищать связные серии обращений к структуре с помощью мьютекса, ну или в питоновских терминах - Lock.
    Ответ написан
    Комментировать
  • Возможно ли обучение нейросети на обработанных статическим алгоритмом изображения?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Во первых непонятно что такое статический алгоритм? Ну я знаю статические переменные класса например. Алгоритм... это что-то новое.

    Во вторых ты являешся постановщиком задачи. И у тебя на выходе есть критерий качества. Не знаю. Ну например confusion matrix. И производные. Precision. Recall e.t.c. Или какие-то коэффициенты удачного распознавания. Вот сделай два эксперимента - и будет самый исчерпывающе-правильный ответ. И безо всяких советов отсюда.

    В третьих. Я не знаю как в графике. А в машинном обучении для big-data всегда есть фаза предварительной обработки данных человеком. Data Preparation. И там прямо протокол: фильтрация выбросов, заполнение gaps, нормализация, фиксация неконсистентных данных. Вот. В случае обучения с учителем - теггирование данных.
    Вобщем идея такая что нельзя мусор толкать на вход нейросети. Вот. И глубину твоего участия в фильтрации ты сам определяешь.
    Ответ написан
    Комментировать
  • Аномально поднялась посещаемость сайта, что делать?

    vpetrov
    @vpetrov
    частный SEO-специалист
    Вы позиции-то мониторите? Характер трафика? Запросы, посадки?
    Яндекс мог подкинуть вас в топы по каким-то ключам на время. На вас мог литься траф, связанный с нагулом ботов. Много чего могло быть, данных вы не предоставили для выводов.
    Ответ написан
    2 комментария
  • Почему не отображается фоновое изображение в 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 комментарий