• Какой алгоритм поиска по базе более быстрый и менее затратный по ресурсам для выполнения?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Попробуй GIST индекс
    Ответ написан
    Комментировать
  • Где найти ошибку в коде?

    Vindicar
    @Vindicar
    RTFM!
    Почитай про импорты в питоне, какой-нибудь толковый учебник (типа Лутца).
    Ты делаешь относительный импорт (import .something), но это можно использовать только в крупных модулях проекта, а не в корневых файлах. Импортируй как обычно, без точки.
    Ответ написан
    Комментировать
  • Нужна ли магистратура для перехода в менеджмент?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Занимал руководящие должности ещё до получения вышки. Но есть компании, в которых это невозможно.
    Ответ написан
  • Подойдет ли базовый MacBook Air M1 8/256 для web разработки?

    @Tur8008
    У меня Mac book air 8 256 m1. Занимаюсь веб разработкой. Полностью согласен с автором. 8 Гб некомфортно мало. Память закончится на открытии 2х браузеров, vscode и docker. Повёлся на хайп и советы друга. При этом говорил ему что 8 Гб мне мало, но почему то повёлся на восторженные хвалебные m1. Буду менять. Запомните 8 Гб озу для разработки в 2024 г это несерьёзно!
    Ответ написан
    Комментировать
  • Подойдет ли базовый MacBook Air M1 8/256 для web разработки?

    Не верьте хайповым видео о том, что его вам хватит для разработки. Сама машинка в плане качества и производительности просто прекрасна. Я являюсь владельцем M1 Pro 16/512. Как раз занимаюсь веб-разработкой.
    - Процессор этот смог бы ещё долго быть конкурентным. Тут проблемы нет.
    - Даже маленький размер диска совсем не проблема, потому что можно купить внешний диск, а т.к. у нас Thunderbolt, то вы практически не будете ощущать недостатка скорости. Внутренний SSD состоит из двух чипов, из-за этого диск работает быстрее, чем на M2 Air, где только один чип.
    - Самая главная проблема, которая хоронит этот компьютер для какой-либо серьезной разработки - это память... 8 Гб никуда не годится. Мне 16 впритык, куда уж там 8. Когда вы откроете браузер, IDE, запустите Docker, запустите автоматическую сборку при изменениях файлов и т.д и т.п., а потом включите Activity Monitor, то вы увидите то, что вам не покажут радостные хайпожоры, расхваливающие этот Мак именно как инструмент разработки. Увидите вы жуткий размер swap и график Memory Pressure жёлтого или красного цвета. Это означает, что памяти уже сильно не хватает.

    Поэтому, брать стоит только 16 Гб или больше. Я бы очень посоветовал не брать ноуты на Windows. Это дрянь. Автономность привязывает вас к розетке, с качеством сборки очень трудно угадать, да я бы не взял винбук из-за одного только Маковского трекпада, который является чуть ли не произведением искусства. На винбуках близко таких нет, даже на самых дорогих.

    В каких случаях можно брать M1 Air 8/256?
    Повторюсь, сам компьютер великолепен. Лучше печатной машинки за эти деньги вы не найдете. Он прекрасен. Если у вас уже есть что-то мощнее, то его можно взять именно как печатную машинку, которую везде таскать с собой.
    Но как только вы выйдете за пределы печатной машинки, нехватка памяти будет вас напрягать. Тем более, нельзя говорить ни о какой перспективе.

    PS. Почитайте каменты к моему посту. Возможно, этот вариант подойдёт.
    Ответ написан
    8 комментариев
  • Какой ноутбук выбрать для разработки мобильных приложений?

    @rPman
    Если выбор из двух - то однозначно второй.

    Больше оперативной памяти и главное - легче, потому что меньше веса даже на пару килограмм очень критично. Носить с собой что то постоянно очень нелегко... те кто носил 5-тикилограммовые гробы а потом ходили с 1.5кг тонкими подтвердят.

    Вторая железка кстати так же дискретную видеокарту содержит, хоть и слабее, но это не критично для разработчика мобильных приложений, тесты 3d приложений android на любом железе не симулируешь или это будут неправильные тесты (т.е. не выявят ряд проблем на реальном железе).

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

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

    Без нормальной мышки нормально не поработаешь. Да, можно идти по пути vim-ераторов, когда всю свою работу организуешь через клавиатуру (что чревато, см. выше), но это путь не для всех. И то, как работает мышка, очень влияет на эмоциональное состояние. Если мышь заменяется тачпадом, это становится адом... поэтому думай об этом заранее, планируй место работы так чтобы можно было взять с собой нормальную мышь.

    Монитор - почему я всем говорю, ноутбуки не для работы, только для коротких эпизодов и правок. Если монитор не 24" (именно на такой размер ориентируются подавляющее большинство сред разработки и интерфейсов различных утилит) то придется чем то жертвовать, где то лишние действия (свернуть/показать окно), где то чаще листать по коду, который не влезает в экран. Момент спорный, и многие скажут что хватает и 15" поэтому третьим пунктом поставил, это не так важно как клавиатура и мышка, но недостатки от сюда повышают нагрузку на эти пункты.
    Ответ написан
    1 комментарий
  • Оффер в слепую - нормальная практика?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Оффер в слепую — нормальная практика?

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

    Когда вас хотят на***ть конечно же.
    Можно ли требовать его подписание до принятия оффера?

    Более того, вы даже набор документов можете попросить зарение, что бы ознакомиться. Что если там как в сауспарке вы согласитесь на человеческую многоножку?

    Если с самого начала у вас возникли вот такие вопросы к компании - это не красный флаг, это прожектор с фанфарами, что ни в коем случае туда идти нельзя
    Ответ написан
    Комментировать
  • Оффер в слепую - нормальная практика?

    @Drno
    Нет конечно. а то подпишешь оффер с какой нить военной компанией в африке...
    Ответ написан
    9 комментариев
  • Как использовать sqlite python в многопоточности?

    @antares4045
    Коннект надо поднять ОДИН раз в главном потоке а курсоров из него уже можете понаделать на все потоки (вроде). Если не поможет: то только открывать-закрывать подключение для каждой операции, например так: https://qna.habr.com/q/1062578#answer_2040432.

    Но как и в том ответе, отдельно подчеркну, что лучше всеравно поднять отдельный сервер нормальной бд и работать с ним в нормальном многопоточном режиме. Это довольно нишевая уловка (примерно так хранят историю браузеры).

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

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

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

    Sqlite это просто файл у вас на диске, и еcли бы не та защита которая вам не даёт создать многопоточную программу, то вам бы казалось, что она вообще не работает: каждый поток видит в базе только то, что сделал в базе он сам, а после перезапуска вы вообще видите в лучшем случае версию базы от потока, закрывшего соединение последним (а то и вообще битый файл).
    Для того, чтобы всякие профессионалы не писали, что "этим вашим sqlite не возможно пользоваться", была встроена защита (куда более адекватный аналог которой есть на всех файлах microsoft office) если хоть кто-то сейчас работает с файлом, то его открывать нельзя и, если не оговорено обратное, падает с ошибкой.

    Проблеме столько же лет, сколько люди пытаются одновременно менять что-то в одном предмете. К сожалению, этот случай, когда приходящий сходу в голову достаточно затратный подход единственно работоспособен в общем случае (в конкретно вашем случае может можно придумать какое-то более простое правило, но изложенное дальше будет работать всегда и везде): первый агент берёт эталон, и оставляет записку "я работаю, ждите", вносит свои изменения и не оставляет эталон у себя, за время его работы у записки уже собралась уже недовольная очередь, которой тоже работать надо -- когда эталон освобождается, первый в очереди забирает его себе оставив уже свою записку. и так далее.

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

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

    cursor.execute(clause, props)
    result = cursor.fetchall()

    или что там у вас было пишем

    with sqlite3.connect(`Ваши параметры подключения`, timeout=`Какое-то зверски большое число секунд, которое мы готовы "стоять в очереди"`) as connect: 
      # создаём подключение к базе которое существует только в рамках блока with 
      # то что мы здесь напишем должно отработать максимально быстро
      cursor = connect.cursor()
      cursor.execute(clause, props)
      result = cursor.fetchall()

    В идеале вообще вынесите это в отдельную функцию

    p.s. если вы зашли сюда в поисках истины, то мы продолжили общение тут и в итоге победили.
    Ответ написан
    9 комментариев
  • Что делает этот код на Python?

    NeiroNx
    @NeiroNx
    Программист
    Плохой код. marshal очень зависит от версии.
    Ответ написан
    4 комментария
  • Что делает этот код на Python?

    Steel_Balls
    @Steel_Balls
    0L3QsNGH0LjQvdCw0Lsg0YEgQkFTSUMg0L3QsCDQo9Ca0J3Qpi
    Это зловред
    Ответ написан
    Комментировать
  • Где взять задачки для пошаговой прокачки навыков Gitlab-CI?

    @vitaly_il1
    DevOps Consulting
    Советую взять любой проект - реальный на вашей работе, или какой-нибудь open source из github, и настроить базовый CI в Gitlab. Потом добавить какой-нибудь security scanner, static code analyze. Потом подумать как можно улучшить деплой.

    Второй вариант - попробовать использовать Gitlab-CI для автоматизации админских задач - например, человек приходит (уходит) в\из фирму - посылаем извещение в  Slack, посылаем ему док-ты, и т.п.

    См. также https://qna.habr.com/answer?answer_id=1981278
    Ответ написан
    4 комментария
  • Скомпилированный в GCC exe файл вылетает досрочно?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Звучит в точности как симптомы Undefined Behavior. На самом деле программа вылетает из-за, например, доступа к неправильным указателям. Но во время отладки звезды выстраиваются так, что это некорректное действие не приводит к падению программы.

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

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

    Возможно, там где-то выход за границы массива, Попробуйте еще, например, увеличить все выделенные строчки и массивы в коде раз в 10. Если после этого программа отработает, ищите, где у вас ошибка в логике - почему массивов не хватает.
    Ответ написан
    32 комментария
  • Как в БД проверять есть ли такое значение?

    fenrir1121
    @fenrir1121
    Начни с документации
    INSERT ... ON CONFLICT DO NOTHING
    Ответ написан
    Комментировать
  • Как получить первую дату в этом году в гугл таблицах?

    @ivan-kis86
    =date(year(today());1;1) покажет 01.01.2023
    вот такую формулу можно использовать. только если наступить 2024 год т уже дата будет 01.01.2024
    Ответ написан
    1 комментарий
  • Какую систему биллинга для сервисов на Python или NODE использовать?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    все что касается денег - только с нуля, опираяся на API платежки
    подсматривать в готовое можно, но использовать не советую
    это, конечно, если потом [жопой] за код отвечать, если наваял и отдал - можно и django payments какой нибудь
    Ответ написан
    Комментировать
  • Почему aiohttp web сервер перестает отвечать на запросы?

    @Everything_is_bad
    По логам больше похоже на сетевые проблемы, а так, винда не лучшая ОС для aiohttp
    Ответ написан
    6 комментариев
  • Как удалить много строк (порядка 500.000) из csv файла в Python?

    @deliro
    Просто перепиши в соседний csv файл только те строки, которые должны остаться

    И можно ли это сделать не используя библиотеку csv?

    Так и быть, разрешаю
    Ответ написан
    Комментировать
  • Что вы делали для облагораживания разработки на php?

    p4s8x
    @p4s8x
    1) Тестовый сервер
    Очень часто бывают ситуации, когда разработчик(в частности фрилансер) находится не за своим любимым рабочим местом, а где-то в гостях, в отъезде и т.д.
    Когда появляется необходимость исправить баг или внести какие-либо изменения — разворачивать за чьим-то ноутбуком/стационарником все инструменты, ставить денвер, качать все целиком, разворачивать базу. Значительно проще поставить winscp¬epad++ и внести правки на продакшн. С увеличением частоты таких «правок» код превращается в то, что описано выше.
    Для решения таких проблем в первую очередь введен регламент — запрета вносить правки на продакшн, но! одновременно с этим допускается работа на тестовом сервере! Все правки, мелкие большие с сервера коммитятся в свн(изучить консольные команды svn для разработчика не составляет проблемы… их нужно 2-3 в такой ситуации) и уже только после этого апдейт на продакшене. Для апдейта на продакшене даже сделан www-скрипт, который позволяет делать апдейт без подключения к ssh и т.д.
    Изменения в БД все только через миграции!
    Так что делайте тестовый сервер обязательно! ИМХО необходимая вещь любому проекту.

    2) Трекер! Писать и общаться через трекер воспитывает и клиента и заказчика.
    Мы на томже тестовом развернули редмайн. Позже добавили к нему tikiwiki, в которую пишутся полезные няшечки для других разработчиков и клиента. Трекер также отображает активность разработчиков для клиента. Клиенту приятно посмотреть, что вот была такая ошибка и по её исправлению был сделан такой-то коммит и вон чето поменяли.

    3) Проведение рефакторинга. Очень сложно клиенту объяснить, что это такое и зачем он нужен. Почему он должен платить за «переписывание» кода? Пишите сразу правильно, скажет он. Практика показывает, что всетаки можно доказать клиенту необходимость этого действия.

    4) Автоматические тесты.
    На тестовом сервере далеко не всегда можно увидеть все проблемы- не поломался ли чужой код.
    Использование фреймворков позволяют не разводить тотальную быдлятину и обложить код тестами.
    Ответ написан
    3 комментария