• Как вылезти из "грязи"?

    DDDsa
    @DDDsa
    Вот вам ещё одно мнение: отложите пока книги и теорию. Чтение всего подряд "про запас" — это трата времени на вашем этапе. Начните какой-нибудь проект, который пригодится лично вам. Какой-нибудь каталогизатор, планировщик, менеджер расходов. Если уже более или менее знакомы с языком, можно сразу попробовать создать собственный блог на джанго. Берёте туториал из официальной доки и повторяете за ними. Потом меняете его под свои нужды.

    Как только встречаете трудности — решаете эти конкретные трудности. Нужно как-то по-особому преобразовать список? Берёте книжку Лутца и читаете раздел про списки. Нужно организовать хранение данных в БД? Читаете раздел про БД и туториал по sqlite. Какая-то проблема, связанная с джанго? Открываете документацию джанго и ищете нам нужный раздел. Всё равно не понятно? Идёте в гугл и вбиваете ваш вопрос. Так, пока не решите проблему, затем двигаетесь дальше.

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

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

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

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

    В общем, практикуйтесь и не бойтесь трудностей : )
    Ответ написан
    Комментировать
  • Что с переводом идентификаторов?

    DDDsa
    @DDDsa
    Возможно, это профессиональное, но по мне транслит в названиях сущностей выглядит отвратительно колхозно. Советую пожалеть коллег и взять нормальные переводы. Даже если это не совсем точный перевод, Freezer куда лучше, чем KholodilnayaSistema.

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

    За переводами советую идти не в гугл-транслейт (он всё-таки пытается подсунуть один самый популярный, по его мнению, вариант, а у вас специфические термины), а, например, в мультитран, его наполняют пользователи, в их числе профессиональные переводчики. И хотя из-за этого там много мусора, но куда больше вариантов. И это, пожалуй, единственное место, где можно найти перевод редких терминов.
    Ответ написан
    2 комментария
  • Программное решение для упорядочивания жизни?

    DDDsa
    @DDDsa
    Можно вести всё это в гит-репозитории в plain-text файлах, используя простой язык разметки вроде Markdown или RST. В них есть всё, что нужно: выделение, картинки, ссылки, даже блоки кода с подсветкой синтаксиса.

    В гит-репозитории вы свободны структурировать информацию как угодно: разносить по папкам, разбивать по файлам. Это самый удобный способ вести исходники любой документации.

    Затем сверху можно прикрутить какой-нибудь статический сайт, который будет собираться из ваших исходников, или подключить пандок, чтобы собирались пдфки. Хотите заморочиться — разверните сервер где-нибудь в локальной сети и настройте с помощью CI гитлаба, гитхаба или битбакета пересборку сайта при каждом пуше в master-ветку репозитория.

    Хорошие статические генераторы сайтов из Markdown:



    Ещё есть Foliant, который из единых Markdown-исходников может собирать PDF, docx, тот же MkDocs-сайт и т д.

    Ну и так далее, тут плюс в том, что вариантов очень много и если надоест один сайт, можно взять те же ваши накопленные годами md- или rst-исходники и собрать из них что-то другое. А теперь представьте, что вас перестал устраивать EverNote, что тут делать? : )
    Ответ написан
    5 комментариев
  • Книги по js какие выбрать?

    DDDsa
    @DDDsa
    Привет!
    Я не javascript-программист, но пока что тут только флудят и шутят, предложу свой универсальный способ.
    Вы правильно определили проблему — много разрозненных видео-уроков, по которым фундаментально ничего не выучишь, и правильно выбрали направление — искать не видео-уроки, а книги.

    Я когда ищу книгу по какому-либо языку программирования или фреймворку обычно сначала ищу, что выпускали в проверенных издательствах: например, O'Reilly или Apress. Среди них ищу книгу посвежее. Остановитесь на каком-нибудь варианте и начните спокойно изучать, не отвлекаясь на новомодные курсы и видеоуроки.

    Также можно поискать, например, здесь, по тостеру, похожие вопросы. Таких было довольно много, вы не один : )

    Вот совсем свежая от Apress.
    А эту от O'Reilly я сам читал в своё время, хорошая.
    Ответ написан
    5 комментариев
  • Как выучить "программистский" английский?

    DDDsa
    @DDDsa
    Вы не написали о своём текущем уровне.
    Все предложенные тут пока варианты предполагают, что вы уже имеете базовое понятие о языке и вам нужна только практика. Если там полный 0 или около того, то есть вы не знаете ни одного времени, не знаете, как строятся предложения, базовые правила произношения, не знаете самых простых слов, то сначала вам нужно узнать всё это.
    На этом этапе советую идти по проторенной дорожке: не ищите специальных курсов для программистов, а займитесь изучением языка с нуля вместе со всеми. Какой путь тут выбрать — решать вам: можно начать с уроков в YouTube, поискать учебников на рутрекере, нанять преподавателя, поступить на курсы.

    Как только вы сможете читать и понимать простые предложения (например, с simple.wikipedia.org), то уже можно браться за практику: читать и читать. Причём, читать именно ту литературу, которая вам нужна: книги по программированию. Вам повезло, там, как правило, довольно простой язык, так что словарь в руки, тетрадку для новых слов на стол и в вперёд.
    Ответ написан
    3 комментария
  • Как поменять версию Python на сервере PythonAnyWhere?

    DDDsa
    @DDDsa
    Заходите в ваш дашборд на сайте pythonanywhere.com.

    На вкладке Web в разделе Code есть пункт Python version. Нажмите на карандашик, чтобы изменить
    Ответ написан
    Комментировать
  • Как записать регулярное выражение в файл json и прочитать его без потери префикса r?

    DDDsa
    @DDDsa
    Подождите, префикс r — это просто синтаксический сахар, а не какой-то особый тип строки. r'abc' для интерпретатора — это не "r-строка", а просто указание заэкранировать все спец-символы и сочетания символов и вернуть результат в виде обычной строки. Которую можно сохранять в JSON, загружать из JSON'а без потерь.

    То есть, если мы пишем r'a\nb\tc' — это то же самое, если бы мы написали 'a\\nb\\tc'

    Другими словами, вам достаточно только сохранить данные в JSON с указанием префикса r. После этого их можно загружать обратно из JSON'а с полной уверенностью, что вы ничего не потеряете
    Ответ написан
    2 комментария
  • Сервис/Конструктор для создания нетехнической документации?

    DDDsa
    @DDDsa
    Берёте любой генератор статических сайтов (вот тут очень много вариантов как раз для документации) и хостите при помощи GitHub pages или GitLab pages.

    Я так сделал базу знаний для нашего английского клуба на mkdocs. Немного забавно выглядит "gitlab.io" в адресе базы знаний вообще никак не связанного с IT проекта, но главное, что всё просто и надёжно (и бесплатно).
    Ответ написан
    Комментировать
  • Как отключить подсветку в sublime text 3 python?

    DDDsa
    @DDDsa
    Вы, наверное, Anaconda поставили? Она так подсвечивает ошибки оформления по PEP. Первые три строки у вас подсвечиваются, потому что модули импортированы, но не использованы, последняя — потому что перед print нужно две пустых строки, а не одна.

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

    Но если всё-таки хотите отключить

    Preferences -> Package Settings -> Anaconda -> Settings - User

    И добавьте туда опцию

    "anaconda_linting": false,
    Ответ написан
    1 комментарий
  • CMS для создания документации?

    DDDsa
    @DDDsa
    https://www.staticgen.com/ — вот ещё пара сотен вариантов : )
    Ответ написан
    Комментировать
  • Почему не импортируется пакет?

    DDDsa
    @DDDsa
    Сообщение об ошибке, которое вы привели, говорит о том, что переменная `p` не объявлена. Судя по всему, вы забыли импортировать модуль p

    p0.py:

    import p
    
    p.func1()
    p.func2()


    Так работает?

    UPD:

    И в __init__.py у вас ошибка. Нужно указать, из каких модулей вы собираетесь импортировать функции:

    __init__.py:
    
    from p1 import func1
    from p2 import func2
    Ответ написан
    Комментировать
  • Группировать совпадения в регулярном выражении?

    DDDsa
    @DDDsa
    Отвечаю буквально на ваш вопрос. Вот такая регулярка сработает:

    [\s\W]*((?:\w*\s+)?\d+)?[\s\W]+((?:\w*\s+)?\d+)?[\s\W]*


    Или такая, более лояльная:

    [\s\W]*([\w\s\d]+)?[\s\W]+([\w\s\d]+)?[\s\W]*

    пример:

    >>> p = r'[\s\W]*((?:\w*\s+)?\d+)?[\s\W]+((?:\w*\s+)?\d+)?[\s\W]*'
    >>> source = '''апрель 2007 - март 2014
    ... март 2007 - ...
    ... март 2007 -> 2014
    ... (2007 - год 2014)
    ... (2007 - 2014)'''
    >>> for line in source.split('\n'):
    ...     print(re.findall(p, line))
    ...
    [('апрель 2007', 'март 2014')]
    [('март 2007', '')]
    [('март 2007', '2014')]
    [('2007', 'год 2014')]
    [('2007', '2014')]


    Но всё-таки я бы порекомендовал поискать другое решение. Такой код абсолютно не читаемый.
    Ответ написан
    Комментировать
  • Как и где хранить техническую документацию?

    DDDsa
    @DDDsa
    Хороший подход — docs as code.
    Мы ведём все документы в git-репозиториях, в формате Markdown. Исходники обёрнуты в Foliant, который может в любой момент из md собрать PDF, docx, сайт, гугл-док или что угодно. Например, многие проекты с документацией автоматически собираются в базу знаний при помощи GitLab-CI. При каждом пуше изменений в репозиторий сайт пересобирается и мы уверены, что там всегда свежие доки. А как только менеджер просит готовый документ — можно тут же собрать PDF, с коропоративным лого и т д.

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

    DDDsa
    @DDDsa
    Наверное, вместо

    return self.filter(is_superuser=True).order_by('pk')[0]


    надо

    return self.filter(is_superuser=True).order_by('pk').first()


    А вообще, проблема в том, что у вас, скорее всего, ещё нет ни одного суперюзера.
    Ответ написан
    9 комментариев
  • Почему вылазиет эта ошибка?

    DDDsa
    @DDDsa
    a = float(input())
    b = float(input())
    Ответ написан
    Комментировать
  • Как посмотреть значение переменных при запущенной программе в Питоне?

    DDDsa
    @DDDsa
    globals() и locals() в помощь:

    >>> a = 123
    >>> b = 'asd'
    >>> def test():
    ...     c = True
    ...     d = 55.36
    ...     print('GLOBALS:')
    ...     pprint(globals())
    ...     print('LOCALS:')
    ...     pprint(locals())
    ...
    >>> from pprint import pprint
    >>> test()
    GLOBALS:
    {'__annotations__': {},
     '__builtins__': <module 'builtins' (built-in)>,
     '__doc__': None,
     '__loader__': <class '_frozen_importlib.BuiltinImporter'>,
     '__name__': '__main__',
     '__package__': None,
     '__spec__': None,
     'a': 123,
     'b': 'asd',
     'pprint': <function pprint at 0x103ce9158>,
     'test': <function test at 0x101d62e18>}
    LOCALS:
    {'c': True, 'd': 55.36}
    >>>
    Ответ написан
    2 комментария
  • Не Запускает проект Python через консоль с ошибкой ModuleNotFoundError: No module named?

    DDDsa
    @DDDsa
    Файл, который вы запускаете должен находиться в корне проекта, иначе нет смысла в той структуре пакетов, которую вы создали. То есть, дерево должно быть такое:
    -chip8/
    -chip8/chip88/
    -chip8/chip88/interface.py
    -chip8/chip88/chip8.py
    -chip8/chip88/__init__.py
    -chip8/main.py


    Теперь у вас папка с проектом chip8, в ней основной файл main.py и один пакет chip88. Тогда в файле main.py импорт из chip8.py должен выглядеть следующим образом:

    from chip88.chip import *

    Кстати, import * — это антипаттерн, так лучше не делать. Импортируйте только то, что вы намерены использовать в этом модуле.

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

    ***
    Что почитать.
    https://chrisyeh96.github.io/2017/08/08/definitive... — про импорты. Импорты в питоне только выглядят просто, на самом деле там есть важные нюансы, в которых лучше разбираться.

    https://www.python.org/dev/peps/pep-0366/ — пеп именно по вашему случаю. Полезно, чтобы понять, почему ваш вариант не работает.

    https://www.python.org/dev/peps/pep-0008/ — Ну и пеп8. Любой уважающий себя питонист должен знать этот документ на зубок. Тут всё про правило именования в питоне и другие принятые соглашения оформления кода и не только.
    Ответ написан
    1 комментарий
  • Как скачать папку с pythonanywhere?

    DDDsa
    @DDDsa
    Там же есть консоль.

    > zip archive folder/

    и качаете архив
    Ответ написан
    Комментировать
  • Какой клавиатурный тренажер посоветуете?

    DDDsa
    @DDDsa
    Ответ написан
    Комментировать