Задать вопрос
  • Как влияет на рейтинг несоблюдение сроков на апворке?

    opium
    @opium
    Просто люблю качественно работать
    на апворке с отзывами автоматом ничего не делается, его оставляют люди
    если заказчик норм оставил норм и будет
    Ответ написан
    Комментировать
  • Стоит тратить свое личное время стартующему фрилансеру на клиента?

    apavlyut
    @apavlyut
    www.apavlyut.ru
    Все что ты делаешь для каждого заказчика обдумай в общую концепцию и сделай сначала твой план работ с клиентами и выложи это на одной странице.

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

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

    Если клиент не хочет с тобой работать а хочет "об тебя" подумать / прикинуть / получить проектировку бесплатно - лучше об этом узнать заранее.

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

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

    Продолжай, и не делай всем раскладки просто так. Успехов.
    Ответ написан
    Комментировать
  • Выбор проекта для портфолио?

    sim3x
    @sim3x
    Ответ написан
    Комментировать
  • Переход с постоянки на фриланс, стоит ли игра свеч?

    Epsiloncool
    @Epsiloncool
    Программер, веб-девелопер, гейм-девелопер
    Фриланс. Однозначно ДА. Сейчас объясню почему.

    Стабильность/офисная работа/работа с одним клиентом - прекращает твоё развитие как специалиста и как предпринимателя. Самое главное - ты не развиваешься в первую очередь как личность. За тебя кто-то несёт ответственность за весь проект, кто-то говорит тебе ЧТО делать и кто-то ищет тебе задачи в большом море, называемом "открытый рынок". В итоге все деньги получает твой начальник, а ты только $8.5 в час.

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

    У тебя есть сомнения? Смотри. Как только ты начнёшь фрилансить, можешь поставить себе часовую планку в $15 в час. Это нормальная цена для зарубежного рынка. Ты будешь некоторое время нереально впахивать по 8-10 часов в сутки, семья может быть даже тебя ненадолго потеряет. Но это всё временно. Потому что за это время ты должен научиться писать хорошие пропосаулы (а это и есть продажа себя). После того как накопишь некоторое портфолио, список положительных отзывов и научишься писать предложения - повышай планку. Ищи длинные заказы с часовой стоимостью в $20-30. Такие заказы встречаются реже, так что ты можешь потратить несколько дней в поисках, но это окупится с лихвой, т.к. ты можешь уменьшать количество времени на работу в день и вновь вернуться в нормальную жизнь. Через полгода вновь поднимай планку. $40-50 в час - совсем не предел.

    Такое случилось со мной после прочтения книжки "как работать 4 часа в неделю". Я тогда работал фрилансером на $10-15 в час и принял одно простое решение. После этого начала работать 2-4 часа в сутки и при этом моя прибыль увеличилась в 3 раза.

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

    Поэтому ещё раз - фриланс и ещё раз фриланс. Прими как лекарство.
    Ответ написан
    13 комментариев
  • Дальнейшее развитие для новичка при отсутствии вакансий в городе?

    @f9k56
    Офис от удаленки ничем не отличается. Только на удаленке затрат меньше и экономия времени, которое можно потратить на обучение. Один потерянный впустую час вашей жизни в день, это очень дорого. По факту, офис это пережиток прошлого, от которого мир будет уходить.
    Ответ написан
    Комментировать
  • Сколько времени требуется чтобы хорошо освоить Django?

    @deliro
    А теперь учти, что мы не знаем, насколько у тебя варит голова, какой бэкграунд помимо питона, не знаем, что такое "знаю почти базоый python", не знаем, сколько ты собрался уделять времени и какой процент этого времени будет потрачен эффективно.

    На вскидку, 1 год чтобы стать джуном, 2+, чтобы хорошо освоить. Это без бэкграунда.
    Ответ написан
  • Как мне постоянно не вводить service uwsgi restart?

    @deliro
    touch-reload

    uwsgi, в общем-то, может сам перезапускаться при изменении кода, но это недопустимо на продакшене, да и вообще занимает слишком много ЦП.
    Ответ написан
    6 комментариев
  • Что лучше изучить для фриланса по вечерам?

    sHinE
    @sHinE
    веб-разработчик, php/js/mysql и сопутствующее
    Я бы начал с мониторинга бирж на предмет заказов. Но не для выполнения, а для изучения. Смотрите те, где вы что-то умеете или представляете как делать. Доучиваете необходимое и делаете для себя.
    Так и наберете необходимых скиллов.
    Ответ написан
    Комментировать
  • Почему сейчас во всех вакансиях стали просить class-based view в Django?

    @deliro
    Выигрыша по производительности действительно нет, т.к. CBV превращаются в обычную вьюху.
    Выигрыш по скорости разработки есть, т.к. в generic описано достаточно много типовых вьюх (ListView, DetailView, FormView). Код в CBV более структурирован, особенно, если вьюха принимает сразу несколько методов (POST, GET, ...). Количество кода также сокращается за счёт использования самих CBV и миксинов.
    Ответ написан
    Комментировать
  • Как составить план обучения на ближайшиее время?

    aRegius
    @aRegius
    Python Enthusiast
    Добрый день, Дмитрий.

    1. В такой последовательности:
    Python
    a) Майкл Доусон - рус ... eng
    b) Марк Лутц - рус ... eng
    c) Дэвид Бизли + Лучано Рамальо
    Дальше - самостоятельный выбор, исходя из личных потребностей.
    Django
    a) Джейкоб-Каплан Мосс и Адриан Головатый - рус ... eng
    b) Django Girls Tutorial
    c) Гринфилды + Равиндран

    Параллельно читаем Django documentation

    2. HTML5 + CSS3 + JS + SQL.
    Знать на уровне, достаточном для реализации собственного проекта с нуля (скажем, свой сайт). Для этого, правда, достаточно HTML и CSS, в объеме указанных книг. Другой вопрос, что и JS, и SQL практически всегда требуются в багаже знаний при устройстве на работу (достаточно посмотреть вакансии).

    3. Нет, просто нету смысла. Актуальной качественной литературы по Python хватает. Есть некоторые исключения (некоторые из них мною упомянуты), но в целом, повторюсь, с современной литературой у Python все в полном порядке. Ищите на Amazon, сортируя по дате выхода.
    Ответ написан
    9 комментариев
  • Python. От теории к практике?

    aRegius
    @aRegius
    Python Enthusiast
    Если тянет в сторону веба - значит Django/Flask вам в руки (что касается лично меня, я работаю с Django). И оптимальный вариант своего собственного, первого, интересного, полноценного и актуального проекта - свой сайт/блог.

    Для того, чтобы нагрузить себя максимально полезно и сделать все это с нуля, более-менее презентабельно, но без готовых шаблонов а-ля Wordpress, рекомендую дополнительно изучить HTML и CSS.

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

    Книги:
    1. Django. Подробное руководство Адриан Головатый, Джейкоб Каплан-Мосс
    Да, книга реально 2009 года издания (оригинал). Но пусть вас это не смущает. Ее ценность превышает факт устаревания некоторой информации, в ней изложенной. Тем более, она написана непосредственными создателями Django - информация из первых рук.
    2. Django Girls Tutorial Django Girls non-profit organization
    Можно читать онлайн, можно скачать PDF.
    3. HTML5. Недостающее руководство Мэтью Мак-Дональд
    4. Большая книга CSS3 Дэвид Макфарланд

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

    Книга 1 познакомит вас с Django.
    Книга 2 покажет, step-by-step, как с помощью Django создать свой блог/сайт.
    Книги 3 и 4 нужны для того, чтобы привести внешний вид ресурса в более-менее благородный вид.

    Для начала вполне достаточно. В качестве оперативного справочника используйте официальное руководство (или djbook.ru - если с английским пока никак).

    P.S.
    Если ваш выбор Flask - не подскажу.
    Если вы владеете английским на уровне чтения литературы - обратите внимание на эту книгу (после первой, вместо второй).
    Ответ написан
    Комментировать
  • Легальный вывод с upwork - миф или реальность?

    @dmatora
    >И поэтому меня мучает вопрос - является ли схема с user agreement и инвойсами (хз что это) чисто белой или это полусерая схема, лишь бы хоть как-то обелить доходы перед налоговой?

    Налоговая как не интересовалась Вами пока Вы не платили налоги, так и не будет интересоваться, когда платить начнете. Особенно с 2016 по 2018 - пока действуют надзорные каникулы. Заинтересуется только когда будете закрывать ИП (если будете), и то, если последние три года вашей деятельности не будут состоять из нулевых деклараций.

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

    Реальные проблемы у Вас будут (точнее могут быть) с валютным контролем банка с которым будете работать. У основной массы банков ориентированных на предпринимателей схема работы с Upwork отлажена. У модульбанка логотип Upwork - вообще на странице валютного контроля https://ext.modulbank.ru/?cityid=f27b4452-0f6f-e41...

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

    К юристам обращаться бесполезно - даже лучшие из них в теме чаще всего плавают. Слишком редко им попадаются такие клиенты/вопросы и слишком много специфики в деятельности Upwork. Исключение - юристы специализирующиеся на внешнеэкономической электронной коммерции. Найдете такого, познакомьте меня с ним.

    Лучшие консультации Вам дадут сотрудники валютного контроля того же модульбанка или банка Точка. Чистота сделки в глазах контролирующих органов - одна из услуг которую они предоставляют.

    Если не готовы вручить свою судьбу валютному контролю банка, соберите в гугле ссылки на статьи по теме легализация oDesk|Upwork и перечитывайте по одной ссылке в день или неделю. То что раньше казалось спорным или китайской грамотой, через несколько недель или месяцев станет простым и очевидным.
    Ответ написан
    Комментировать
  • Как научится писать обработку данных, машинное обучение и куда с этим потом идти?

    kopcap_va
    @kopcap_va
    SEO Consultant
    На эту тему на хабре есть:
    https://habrahabr.ru/company/mlclass/blog/252743/
    https://habrahabr.ru/company/spbifmo/blog/276479/
    https://habrahabr.ru/post/270449/

    Буквально неделю назад на Coursera стартовал https://www.coursera.org/learn/mathematics-and-python - посмотрите лекции, возможно станет понятнее какие из разделов математики стоит подтянуть, т.к. в самом курсе информация по ним довольно сжатая.
    Ответ написан
    4 комментария
  • Почему python серипт упакованный в .exe не запускается на windows7 без sp1?

    1) берем Dependency Walker, смотрим зависимости экзешника;
    2) обращаем внимание на зависимости, которые резолвятся из системных директорий. Среди них нужно выбрать те, которые не являются обязательной частью системы (сложно перечислить конкретные, скриншот окна DepWalk не помешает);
    3) могу на 90% сказать, что это будет Студийный рантайм (msvcr*.dll/msvcp*.dll).
    4) удовлетворяем эти несистемные зависимости. Если райнтам - то желательно его нормально поставить (из redist-пакета), если не вариант - то можно просто положить dll рядом с exe.
    Ответ написан
    7 комментариев
  • Как заставить django скачать и загрузить картинку?

    @marazmiki
    Укротитель питонов
    Даже если закрыть глаза на оформление кода, постоянное дублирование, то это всё равно очень странный код с неопределённым поведением. И вот почему:
    try:
        categories = Categories.objects.get(name=line[0])    # Метка 1
          img_url = line[1]   # Метка 2
          content = urllib.request.urlopen(img_url).read()        # Метка 3
          Item(categories=categories, img=content, name=line[2], text=line[3], options=line[4]).save()
        except:
          categories = Categories(name=line[0])    # Метка 4
          img_url = line[1]
          content = urllib.request.urlopen(img_url).read()
          Item(categories=categories, img=content, name=line[2], text=line[3], options=line[4]).save()    # Метка 5
    Первым делом хочу обратить внимание на строку с комментарием "Метка 4". Вы, насколько я понял, хотите создать модель Categories, если её не нашлось в строке "Метка 1". Создать-то Вы её создали, но не сохранили! В базе такого объекта нет. Поэтому при вызове сохранения Item (см. "Метка 5") Вы можете схватить ошибку.

    А можете не схватить, потому что возможна другая ситуация, когда категория (см. "Метка 1") нашлась, но картинка для скачивания определилась неправильно, и скачивание сломалось. Или просто сеть недоступна. В этом случае вывалится urllib, а категория будет определена правильно.

    Далее: очень непонятный момент про img=content. Насколько я понял, Вы прямо берёте саму картинку (набор байт) и пишете его в БД? Если да, то это в корне неверно, ImageField работает по-другому. Во-первых, в базе данных это обычный varying charfield. Во-вторых, он хранит не сам контент картинки, а имя файла, под которым файл был сохранён при аплоаде. Сам файл хранится в другом месте (по умолчанию — в файловой системе рядышком в директории, указанной в настройке MEDIA_ROOT) Например, если в таком поле записано значение 'path/to/my/photo.jpg', то это значит, что при обращении model_name.img.url (обратите внимание, что мы обращаемся к атрибуту url поля img модели model_name) будет возвращено что-то типа /media/path/to/my/photo.jpg, где /media/ — корень хранилища загружаемых файлов (по умолчанию задаётся в настройке MEDIA_URL и имеет значение "/media/").

    Советую переписать код.
    • Во-первых, при оформлении настоятельно советую поддерживаться PEP8.
    • Во-вторых, как уже рекомендовали выше, использовать requests.
    • В-третьих, использовать шорткаты, которые предоставляются Джангой. В данном случае я говорю про функцию render вместо пары HttpResponse(render_to_string) и метод get_or_create() у менеджера модели.
    • Избавиться от дублирования кода
    • Не использовать жадные except'ы. Ловить следует только те исключения, которые могут возникнуть штатно в процессе работы.


    С учётом вышеизложенного, Ваш код может выглядеть как-то так:
    from django.shortcuts import render
    import requests
    import requests.exceptions as rex
    
    def baza(request):
        # В этом месте мы скачали страничку по адресу BAZA_URL/
        try:
            page = requests.get("BAZA_URL")
            page.raise_for_status()
    
        # Попутно обработали ситуацию, если страница по каким-то причинам
        # недоступна (например, её переместили, сервер ушёл в даун или просто
        # сеть недоступна). Все остальные возможные ошибки мы в этом месте
        # не обрабатываем.
    
        except (rex.ConnectionError, rex.HTTPError) as ex:
            return HttpResponse("Unable to open BAZA_URL")
    
        baza = page.content.split('<br>')
    
        for line in page:
            # Здесь мы просто ввели локальные переменные для упрощения
            # кода. Согласитесь, когда в поле модели name нужно подставить
            # имя, то проще написать переменную name, чем высчитывать, какой
            # же это по счёту элемент массива :)
            #
            # К тому же, если вдруг формат данных изменится, код придётся
            # править только в одном месте. так что мы заодно избавились от
            # дублирования.
            cat_name, img_url, name, text, options = line.split('--')[:4]
    
            # Воспользовались шорткатом от Джанги. Модель будет взята из базы,
            # если на существует с таким именем. Если нет, то будет создана.
            # Тоже избавление от дублирования
            categories, created = Categories.objects.get_or_create(name=cat_name)
    
            # Создание модели Item с помощью метода create у менеджера. Сразу
            # же мы решаем здесь возможную проблему с сетью. Если какой-то файл
            # окажется недоступным, мы его не будем сохранять, а перейдём к
            # следующему
    
            try:
                pic = requests.get(img_url)
                pic.raise_for_status()
    
                Item.objects.create(categories=categories,
                                    img=ContentFile(pic.content),
                                    name=name,
                                    text=text,
                                    options=options)
            except (rex.ConnectionError, rex.HTTPError) as ex:
                # Пришлось немного продублировать код, потому что здесь
                # возможны те же ошибки, что и в самом начале вьюхи.
                continue
    Некоторые вещи я намеренно опустим (например то, что для всех HTTP-запросов с помощью requests можно использовать одно соединение, не создавая новое для каждого запроса)

    И ещё один совет: операции, которые выполняются длительное время и которые могут свалиться по независящим от Вас причинам, лучше не делать в цикле запроса-ответа, а вынести в фоновую обработку. Например, воспользоваться celery
    Ответ написан
    5 комментариев
  • Простая корзина на Django?

    @KIN1991
    Python, PHP developer
    Все просто при нажатии на кнопку купить, вам следует отправлять в сессию корзины id-ик картины, когда переходите к оформлению заказа просто делаете запрос к базе с выводом необходимой вам инфы по id-ам которые у вас есть в сессии.
    <a href="#" data-id="1">Название картины</a>
    Вьюха корзины
    def cart(request,id):
        if 'cart' not in request.session:
            request.session['cart'] = list()
        request.session['cart'].append(int(id))
        ....
        return ...

    Ну и вьюха оформления
    def checkout(request):
        cart = Images.objects.filter(pk__in=request.session['cart'])
        ....

    Как то так
    Ответ написан
    4 комментария
  • С чего начать изучать BigData?

    voidnugget
    @voidnugget
    Программист-прагматик
    BigData не очень то и связана со структурами данных - в основном это разнообразные пространственные структуры, скорее больше связана с алгоритмами NLP, классификации и машинного обучения.

    В первую очередь нужно выбрать средство обработки и хранения.
    В случае с Java это HBase Cassandra
    HBase - когда пишется в базу очень много, и большинство индексов "самодельные".
    Cassandra - когда соотношение чтения / записи 4:3, так как в Cassandra уже есть средства колоночной индексации.

    В случае с реальным высоконагрузом это ScyllaDB - обладает теми же особенностями что и HBase, но С++11 и Share-nothing approach и от того в 6-7 раз шустрее.

    Для БД до 200Гб хватит банального MySQL'я c R-tree индексом и Engine Archive.
    Вот PostgreSQL при правильной настройке спокойно строит B-tree индексы для объёмов данных в 500-700Гб, что для MySQL'я непосильная задача Ну и в PostgreSQL часто приходится дописывать сишные функции агрегации и строить по ним разнообразные индексы, иногда пространственные (gin/gist).

    Вот небольшой обзор разных типов индексов.

    От себя ещё добавлю MVP-tree для поиска похожих персептивных хэшей и Fusion-tree как более съедобный вариант дерева Ван Емде Боаса.

    По поводу хипстер-культа вокруг MongoDB - скажу что PostgreSQL с индексами на хэш-таблицах и небольшими множествами документов в 1.5-3 раза шустрее, потому что "Building Index with Vodka". А нормальная репликация и партицирование напрямую зависит от принципов решения задачи Консенсуса в каждом конкретном приложении, и без понимания работы Raft / Paxos не стоит надеятся на чудеса той же MongoDB или PostgreSQL, они являются не более чем инструментами для решения этой задачи.

    MongoDB очень даже ничего для реактивных проектов на основе Meteor, а для всего остального уже GoldenHammer™.

    По индексации, надо обязательно-обязательно прочитать книги Ханны Самет
    Foundations of Multidimensional and Metric Data St... = Applications of Spatial Data Structures: Computer ... + The Design and Analysis of Spatial Data Structures

    В принципе книжки Foundations of Multidimensional and Metric Structures должно хватить с головой, но можно "дочитывать" более полное описание в более древних работах. Одним словом тётка "жжёт", и я не знаю почему это до сих пор никто не перевёл.

    Ну после того как разобрались что и где и как хранить, теперь можно думать по поводу обработки...
    Есть древняя книжка "Алгоритмы интеллектуального Интернета" и "Программируем коллективный разум" Хоть названия переведены на русский довольно странно и звучат довольно наивно - это хорошее введение в простые средства обработки и анализа данных.

    По машинному обучению можно пройти курс Эндрю Ына на курсере.

    Есть Южный DataScience-централ, там есть много чего полезного. Его можно почитывать. Есть ещё поверхностные CheetSheet'ы, видел и получше, но не нашёл.

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

    Если лезть в Java, то на примере Spotify чаще всего используются связки
    Apache Kafka -> Apache HBase -> Apache Storm -> Apache Spark (mllib) -> Apache HBase -> Apache Phoenix -> Hibernate + любой MVC фреймворк и т.п.

    Естественно об относительно высокой производительности и хорошем вертикальном масштабировании речи не идёт, если брать C++11 ScyllaDB -> Neon хорошо отпрофилировать и допилить, можно получить в 3-5 раз выше производительность и соответственно гораздо меньшие задержки, но обычно всем влом. REST API под такое обычно пытаются писать на сях (без плюсов) в виде расширений под Nginx, что является довольно породистым извратом - в большинстве случаев банального golang/netty будет достаточно.

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

    По поводу HA и Zookeeper можно увидеть много срача, особенно в Netflix'e, по этому для менеджмента высокой доступности лучше использовать именно их решения - eureka или для отказоустойчивости Hystrix. Хотя я не могу сказать что это достаточно зрелые проекты - в них тоже хватает изъянов, но они на много шустрее остальных Apache поделок.

    Нельзя делать одновременно отказоустойчивые и высокодоступные приложения - потому что CAP теорема имеет место быть.

    Ещё есть очень тонкий момент с Java в целом - нужно минимизировать время сборки мусора и лезть в offheap, стоит глянуть как реализованы буферы в netty - это arena аллокатор по типу того что используется jemalloc и различная misc.unsafe ересь. Можно ещё пробовать Hazelcast / Terracotta, но принципиально там тоже самое, только платно и "расспределённо".

    Для REST API я чаще всего использую Vert.x и ванильную Java.
    Overhead от Scala довольно таки большой, а время компиляции просто вырвиглазное.
    Для минимизации копи-пасты вполне безопасно использовать Groovy c @ Immutable и @ CompileStatic.
    Но в Vert.x'e он весь "динамичный" :|

    Я ничего не могу сказать по поводу производительности Clojure, он местами через чур invokeDynamic. Естественно что ванильная Java будет шустрее, но я без понятия на сколько.

    Желаю Вам приятного вечера.

    p.s. не везде проставил ссылки просто потому что хочу спать.
    Ответ написан
    4 комментария
  • Почему github, а не gitlab?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если уж сравнивать разные сервисы, то стоит расставить их в порядке популярности:

    1. GitHub
    2. BitBucket
    3. GitLab

    Немного подробнее:

    1. GitHub

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

    - в бесплатном акке нет приватных репо
    - аккаунт организации создается из аккаунта юзера, не совсем удобное управление

    Обновление от мая 2020: бесплатные приватные репозитории давно есть, управление командами/организациями сильно улучшилось + появился еще целый вагон фич.

    2. BitBucket

    + неограниченное количество приватных репо бесплатно
    + аккаунт компании - виртуальный, легче и удобнее управлять
    + куча сторонних интеграций тоже, но меньше чем GitHub

    + / - интеграция с продуктами Atlassian (например, Jira) - кому-то огромный плюс, кому-то минус. Битбакет популярен на западе у энтерпрайзов

    3. GitLab

    + бесплатные приватные репо
    + self-hosted версия (но это уже из другой оперы)

    - самый молодой, совсем юный, есть баги, функциональность еще бедная и не выпилена
    - мало внешних интеграций

    Обновление от мая 2020: Функциональность GitLab давно уже нельзя назвать бедной - в некоторых аспектах они и GitHub превзошли.
    Ответ написан
    2 комментария
  • Порекомендуйте ресурсы по изучению настройки веб-сервера под Django?

    @deliro
    SSH - та же консоль, только удалённая. Знать там нужно только основные команды nano cat ls ln rm cp mv mkdir и т.п.
    Обязательно прочитай мануал к virtualenv. Можно и без него, если джанго-приложение на сервере одно, но лучше с ним. Удобнее.
    С nginx'ом особо колдовать не нужно, вот тут написано, как его настроить.
    HTTP-серверов для джанго основных два: Gunicorn и uWSGI.

    На дев-сервере вообще ничего не нужно. В джанго уже есть сервер (runserver) и база SQLite, которую устанавливать тоже не нужно.

    Никаких книг тут не нужно, достаточно почитать пару Getting Started к используемым технологиям.
    Ответ написан
    5 комментариев
  • Что происходит за кулисами цикла for?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    На хабре есть отличнейший мануал "Code Like a Pythonista: Idiomatic Python". Перевод. Прочтите. Там есть ответы на многие Ваши вопросы, в том числе и на этот.

    Вот цитата из этого мануала:
    Объясню, как в действительности работает цикл for. Python смотрит на последовательность, указанную после ключевого слова in. Если это простой контейнер (как список, кортеж, словарь, множество или определенный пользователем), Python преобразует его в итератор. Если этот объект уже является итератором, Python использует непосредственно его.
    Затем Python многократно вызывает метод итератора next, связывает возвращаемое значение со счетчиком цикла (i в этом случае), и выполняет код тела цикла. Этот процесс повторяется снова и снова, пока не будет вызвано исключение StopIteration или выполнена инструкция break в теле цикла.
    Цикл for может включать условие else (иначе), код которого будет выполнен после выхода из цикла, но не после выполнения инструкции break. Эта особенность предоставляет очень изящные решения. Условие else не всегда и не часто используется с циклом for, но может нам пригодиться. Иногда else удачно выражает логику, которая вам нужна.


    UPD:
    Наткнулся на хорошую статью: Understanding Python's "for" statement
    Ответ написан
    4 комментария