• Как правильно формировать цену за выполнение работы?

    @iSergios
    Python-разработчик
    Для оценки, как миниум, необходимо понимать:
    - сколько стоит час работы
    - сколько примерно часов потребуется на реализацию функционала

    И если по первому пункту достаточно принять что-то вроде "1 час == 1000 рублей", то со вторым чуть сложнее.

    Как оцениваем часы работы:
    1. Фиксируем хотелки заказчика на бумаге (что лучше всего) или как-то еще. Главное в этом шаге - чтобы и вы и ваш заказчик получили полное исчерпывающее понимание того, что должно стать результатом вашей работы. Разумеется, заказчик почти никогда не напишет вам ТЗ. Но и вам его тут подробно описывать не надо. Зафиксируйте основные функциональные требования, например:
      - перечень сайтов для парсинга;
      - что конкретно парсим в каждом из сайтов;
      - перечень команд для чат-бота: исчерпывающий, с описанием, что именно по каждой команде должен бот делать;
      - порядок работы чат-бота (парсинг по команде или вы пишите сервис, который по расписанию парсит, а по команде только читает из БД и плюется этим в телегу);
      На этом же этапе надо выяснить, кто будет деплоить приложение. Если вы, то куда и как.

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

    3. Когда у нас есть утвержденный перечень хотелок, начинаем их декомпозировать: разбиваем на блоки задач, а блоки - на отдельные задачи. Не должно быть задач вида "Написать бота", "Спарсить сайт". Бьем на задачи с тем прицелом, чтобы на реализацию каждой из задач не требовалось тратить менее 1 часа и более 4 часов. Это очень важно, ибо именно тогда вы (нередко с ужасом (заказчика, разумеется)) сможете понять, сколько именно времени вам надо будет затратить. Не забывайте учесть в оценке написание тестов. И ручное тестирование, если его будете проводить вы. Вообще, вопрос декомпозиции - это отдельный очень большой и очень серьезный вопрос, не будем на нем сейчас останавливаться.

    4. Оцениваем риски. Что это такое? Да вообще все: от внезапных тупняков и борьбы с ветряными мельницами, без коей разработки не бывает, до банального сопротивления сайтами парсингу. Каждый на риски закладывает по-разному, я рекомендую начать с 25%. Т.е. если вы изначально оценили конкретную задачу на 4 часа, то пишете 5. Не нужно занижать оценку, это будет работать против вас.

    5. Если деплой приложения на вас, то его так же следует оценить. Часто про это забывают.

    6. Вспоминаем, сколько часов вы затратили на оценку и вписываем это либо отдельным пунктом, либо размазываем по задачам (оценка не должна быть за ваш счет).

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

    @iSergios
    Python-разработчик
    Если говорить про именно позицию мидла:
    - уверенное владение основами языка + не сильно глубокое, но понимание его подкапотностей (скажем, не просто знать, какие есть типы данных, но еще и как они работают и почему + сложность операций с ними);
    - системы контроля версий (git норм)
    - основные паттерны (особенно те, которые реализованы в языке нативно);
    - если хотим в веб-разработку, то, как правильно указали выше - знать, как работает интернет, что такое http, rest и пр. Не помешает самое общее понимание того же TCP/IP;
    - SQL хотябы на базовом уровне. Если мы говорим о веб-разработке, то мидлу следует понимать, во что выливаются его (и не только) ORM-конструкции;
    - для веба - понимание архитектуры веб-приложений и принципов работы веб-серверов;
    - в 2020 следует знать, хотя бы базово, что такое контейнеризация, уметь работать с docker;
    - понимание, что такое CI/CD, и как с ним жить будет несомненным плюсом (многие считают это за обязательное требование, как по мне - не горит);

    Особняком стоит то, что ТС назвал "умение писать чистый код". Это для мидла мастхев, но это полный синоним фразы "опыт работы в команде над коммерческими проектами". Писать код много можно и одному. Но научиться писать чистый понятный код в одного крайне и крайне тяжело. К сожалению.

    Совет: автор, если считаешь себя хоть сколько-нибудь готовым, не гадай: просто сходи на пару собесов на мидловую позицию. Бери тестовые, решай, получай фидбек. На собесах придет довольно хорошее понимание, что хочет реально рынок сегодня. Не бойся ходить на заведомо провальные собесы, никто в ЧС не занесет :) Многие компании прекрасно тебя "пересобесят" через полгода вне зависимости от того, насколько плохо прошло предыдущее собеседование.
    Ответ написан
    Комментировать
  • Как посмотреть список файлов коммита?

    @iSergios
    Python-разработчик
    Не знаю, как я сюда попал, побуду некропостером:
    git diff-tree --no-commit-id --name-only -r d0161fd0911
    Ответ написан
    2 комментария
  • Какую сферу должности выбрать с моими знаниями?

    @iSergios
    Python-разработчик
    хочу какую то сферу выбрать, где ограничен рост, надо определенный объем знаний выучить и его применять

    Ну... можно на завод пойти каким-нибудь столяром-станочником. Там станки с 60-х годов, наверняка стоят, и еще столько же простоят. У дворников, вот, надо будет выучить как мести улицу и где инвентарь складывать - потом только применять полученные знания. Пекарем тоже можно, но не факт, там время от времени всякие новые штуки типа улучшителей муки могут пробовать - придется разбираться. Вахтером еще могу посоветовать. В IT в современном мире так не бывает. Либо вы учитесь все время, либо за бортом.
    Ответ написан
    Комментировать
  • Почему не видит файлы .json в папке c .ipynb?

    @iSergios
    Python-разработчик
    что гуглить?

    Как определяется путь к директории, из которой запущен скрипт?
    Тот же вопрос, но при наличии в директории __init__.py?
    Ответ написан
  • Как из скрипта запустить другие скрипты поочередно и ждать их выполнения?

    @iSergios
    Python-разработчик
    А в чем, собственно, проблема? Оформляем в каждом скрипте, который хотим запустить, функцию main, например, которая и будет отвечать за запуск всей логики и что-то там возвращать. Потом импортируем все эти модули и запускаем поочередно с ожидаем возврата из каждой функции.
    Ответ написан
    Комментировать
  • Ошибка "vk" is not defined,что делать?

    @iSergios
    Python-разработчик
    У Вас объявление переменной vk закомментировано на 4 строке.
    Ответ написан
    Комментировать
  • Какой выбрать Python фреймворк для системы парсинга сайтов?

    @iSergios
    Python-разработчик
    Мне кажется, Вы не разобрались в теме, начните сначала.
    Ключевые особенности системы, которые усложняют выбор фреймворка

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

    Любой скраппинг-фреймворк, это удочка. Рыбака Вам самому писать. И не удочка должна решать, как часто и с какой периодичностью запускаться, где хранить наскрапленное и все остальное. Для целей скраппинга у Вас должен быть всего один вопрос: надо парсить JS или нет. Если нет - Ваш выбор BeautifulSoup, ибо очень быстрый. Если да - посмотрите в сторону Selenium.
    Ответ написан
    4 комментария
  • Это заказчики такие скупые пошли или я чего-то не понимаю?

    @iSergios
    Python-разработчик
    Все-таки, мне кажется, у Вас какая-то нишевая проблема. В моей нише такого не наблюдается. Ну и сам иногда по таким мелким fixed price отписываюсь, но поднимаю bid до двух-трех раз. Разумеется, с описанием основания такого бюджета. Не всегда, но прокатывает.

    Ну и давайте не забывать, что цене соответствует качество. С год назад у меня был заказчик, которому в свое время за $10 пакистанец наваял простенькую CRM'ку. Ничего сложного: морда и sqlite. Наваял в самых лучших традициях своего народа - когда число записей перевалило за тыщи три, все это дико тормозило в каждом шаге. Моя работа по переписыванию всего с нуля и миграции тогда обошлась ему в значительно дороже) Но и результат был другим) И сейчас очень часто можно видеть контракты типа "переписать", "улучшить", "оптимизировать", где заказчики уже не ведутся на дешевых работников и вполне серьезно рассматривают биды с превышением заявленного бюджета.
    Ответ написан
    Комментировать
  • Могут ли быть проблемы от незакрытых контрактов?

    @iSergios
    Python-разработчик
    Самому закрывать не надо. Неизвестно, как отреагирует заказчик. У меня были контракты по 1,5 года висевшие без движения. Ничего, на jss не влияло.
    Ответ написан
    Комментировать
  • Может ли нотариус подтвердить отношение вот этого счета к вот этой компании?

    @iSergios
    Python-разработчик
    Нет. Нотариус может лишь заверить, что на такой-то странице такого-то сайта в такое-то время была такая-то информация. Это ни в коем случае не будет являться прямым доказательством принадлежности счета.
    Ответ написан
    Комментировать
  • Анонимный фриланс - такое возможно?

    @iSergios
    Python-разработчик
    Ну черношляпные хакеры по такой схеме и работают) Но если у Вас не пропиаренный в определенных кругах ник, или Вы не состоите в соответствующей группе, так работать вряд ли выйдет :)

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

    @iSergios
    Python-разработчик
    Смотря какой язык текста. Если в языке падежи не влияют на словообразование (английский), то можно даже простым перебором, если тексты не сложные. Если же влияют (русский) - регулярными выражениями.
    Ответ написан
    Комментировать
  • Как решить проблему с концентрацией?

    @iSergios
    Python-разработчик
    Я, наверное, дам самый оригинальный совет. Сделайте. Это. Своим. Оружием.

    Была такая проблема. Наверное, и сейчас есть, но я просто научился ее обходить. Сразу скажу, это не лечится. Если у Вас так скачет внимание, то зубрилой, способным сутками напролет что-то монотонно делать, Вы никогда не станете. Но это не ущербность, а особенность в самом лучшем смысле этого слова. Такие как мы с Вами идеально приспособлены для рваного ритма и графика типа "сегодня густо, завтра пусто". Когда Вы ставите перед собой цель, скажем, прочесть книгу/главу... Ваш мозг будет сопротивляться этому и стараться переключиться. Давайте это использовать с другой стороны: ставим краткосрочную цель - скажем, какую-то часть работы - и тут же определяем, на что будем переключаться. Из интересного. Можно заранее найти статью, которую прям хочется прочесть. Или прям держать в фоне какой-то свой пет-проект, который мучить приятнее текущей работы. Ну или даже игрушка (но тут важно не переборщить). Все. Вы удивитесь, но Ваш мозг, зная, что еще чуть-чуть, и он переключится на что-то другое, будет работать совсем иначе. Кстати, нае@@ь его не выйдет. Переключаться надо полноценно и обязательно с пользой. Вы обязательно должны чувствовать прогресс в обоих направлениях. Иначе будет не очень. И да... Выдается время отдохнуть - отдыхайте.
    Если будете делать все правильно, производительность вырастет в разы. Благодаря переключениям Вы будете значительно меньше уставать эмоционально, а это неплохо влияет на мотивацию и общее состояние.

    Метод не работает или работает плохо при истощении. Последнее лечится сном не менее 8 часов с ранним просыпанием и, возможно, самыми безобидными препаратами типа экстракта Гинкго билоба.
    Ответ написан
    1 комментарий
  • Потоки в python?

    @iSergios
    Python-разработчик
    Копайте в сторону threading. Для запуска функции в потоке в самом простейшем варианте можно использовать декоратор. Например:
    import threading
    
    def thread(func):  # Собственно, декоратор
     def wrapper(*args, **kwargs):
      current_thread = threading.Thread(target=func, args=args, kwargs=kwargs)
      current_thread.start()
     return wrapper
        
    @thread  # Оборачиваем
    def function():
     '''
     И вот тут код функции, которая всякий раз при вызове 
     будет запускаться в отдельном потоке.
     '''


    Но помните главное. При попытке обратиться к sqlite-базе из потока, отличного от того, в котором был создан коннект с ней, она будет ругаться и бросать exception.
    Ответ написан
    Комментировать
  • Как создать программу ставящую пароль на папку?

    @iSergios
    Python-разработчик
    Единственный способ закрывать через питон папку, это играть с правами доступа, причем Ваша программа должна работать от имени администратора. Интегрированного рабочего решения при этом не получится. Как, в прочем, и кроссплатформенного.
    Ответ написан
    Комментировать
  • Как поделить строку в переменные?

    @iSergios
    Python-разработчик
    string = 'send abcde 0.2'
    splitted_string = string.split()
    send1 = splitted_string[1]
    send2 = splitted_string[2]
    Ответ написан
    Комментировать
  • Заморозили аккаунт на upwork после видео-верификации. Что делать?

    @iSergios
    Python-разработчик
    Тоже недавно прошел верификацию. Девочка явно не хотела, чтобы ее видели - свое видео отключила. Очень чистый и очень быстрый английский у нее был. Явно native speaker. Судя по звукам, сидела где-то в фойе, из-за синалов постоянно приезжавшего лифта то я ее не слышал, то она меня. Спросила, где живу, где работаю, что такое область в РФ (в смысле регион). Свалила не попрощавшись, по-английски.))) Верификацию прошел, получил приятный бонус - похоже, мне подтвердили разговорный английский.
    Ответ написан
    1 комментарий