• Какую тему диплома выбрать (Программирование)?

    Вопросы такого рода весьма умилительны. Позволю себе высказаться и прошу заранее меня извинить за резкость.

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

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

    Итого, вы хотите, чтобы вам подсказали тему в программировании, которая лично вам интересна, притом, что вы сами не сумели её найти в течение периода обучения. Кроме того, вы не указали, как вы себя оцениваете как программиста и какие проекты вам вообще по плечу. Вы даже близко не описали, что вам вообще в жизни интересно. Какого ответа вы ждёте?

    Ну вот навскидку несколько тем, касающихся веб-программирования.
    - Сделайте красивый и удобный в использовании ORM для какой-нибудь экспериментальной СУБД (мне вот нравится OrientDB), напишите веб-приложение с его использованием и обоснуйте, чем оная СУБД лучше, а чем хуже традиционных реляционных, для использования в веб-разработке.
    - Напишите веб-приложение, которое будет аккумулировать какой-нибудь вид открытых данных (статистика выборов; бюджетов; доходов-расходов; миграции; и т.п.) по муниципальным образованиям, субъектам, странам, по этим данным прогонять какие-нибудь алгоритмы и чего-то на их основании анализировать.
    - Займитесь Semantic Web - тема широкая, можно много чего сделать. Большая часть сделанного в этой области - страшно до безобразия и к практическому использованию непригодно. Человекопонятного редактора онтологий нет.

    Пока больше ничего в голову не пришло. Но знаете, идей вокруг очень много, они просто валяются кругом, куда ни взгляни. Древнеиндийские математики имели обыкновение в качестве доказательства теорем рисовать чертежи и писать в качестве пояснения одно лишь слово: "Смотри". Вот и вы попробуйте.
    Ответ написан
    2 комментария
  • Как можно обучать программированию?

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

    - Обратите внимание на другие образовательные IT-проекты, например, acodemy.ru, codecademy.com и так далее. Можно позаимствовать опыт. Не говорю уже о монстрах - Coursera, EdX, Udacity.
    - Для организации своей системы ДО можно использовать специально предназначенные для этого движки. Acodemy.ru есть такой движок, но, видимо, он уже скорее мёртв, чем жив. Авторы то ли потеряли к нему интерес, то ли что, хотя идея - многообещающая, курсы, которые они уже успели сделать, очень неплохи. Есть ещё Stepic. Есть необычные, но перспективные встраиваемые инструменты вроде Google Oppia. Движки монстров вроде EdX тоже доступны к использованию, они в open source, но по слухам довольно сложны.
    - Не недооценивайте важность интерактивных демонстраций и постоянного закрепления теории практикой.

    Идея очень хороша сама по себе; сам тоже пытался заниматься программированием со школьниками (очно), но пока по всяким объективным причинам пришлось приостановить это дело.
    Ответ написан
    Комментировать
  • Как в Django сделать AND фильтрацию на основе M2M связи?

    Не уверен в правильности, но может быть, попробовать вот так?

    Item.objects.filter(code__zip=1).filter(code__zip=2).filter(code__zip=3).filter(code__zip=4)


    По идее, это даст эффект операции AND.

    Если не сработает, существует ещё одно решение. Если не против, разобьём его составление на шаги, мне самому так проще писать.
    1. Делаем запрос на промежуточной таблице отношения ManyToMany, которая связывает Item и Code, выбирая те пары Item - Code, для которых item__zip входит в нужное множество.
    qs = Item.code.through.objects.filter(code__zip__in=[1, 2, 3, 4])


    2. В результирующем запросе значения item_id будут повторяться. Нам нужно найти те значения, для которых число строк равняется четырём.
    from django.db.models import Count
    qs = qs.values('item_id').annotate(count=Count('id')).order_by().filter(count=4)


    Надеюсь, что больших ошибок не допустил.
    Ответ написан
    6 комментариев
  • Как перебрать дерево элементов?

    Не уверен, хорошо ли это, ну вот такое решение: jsfiddle.net/5varj2Ly - см. в консоль.

    В основе идея из stackoverflow.com/questions/7273668/split-a-long-a...
    Ответ написан
    1 комментарий
  • Хочу начать изучать Rust. С чего начать, где взять базу?

    Хорошая лекция на русском: https://tech.yandex.ru/events/meetings/java-party-... Для меня самое сложное в этом языке - указатели, работа с памятью, аннотации lifetime. Об этом и лекция. Впрочем, сам в ней некоторые моменты не понял, писал автору, но он не ответил, - видимо, вопрос уж слишком туп. :)
    Ответ написан
    Комментировать
  • Как выполнять отложенные задачи на бекенде?

    Альтернативный подход - вообще не хранить текущий статус пользователя. Вместо этого, хранить журнал изменений этого статуса и вычислять его текущее значение по требованию. Мне привычно рассуждать в терминах Django, на её ORM и будем ориентироваться. Пусть у вас есть своя собственная модель для пользователя - User в приложении my_auth. Пусть у него может быть два значения статуса: пустое (None) и premium - для тех, кто оплатил подписку на год. Журнал изменений статуса:

    from django.db import models
    from my_auth.models import User
    
    class StatusEvent(models.Model):
        EVENT_TYPES = [
            ('subscription', 'User subscribed to premium')
        ]
        user = models.ForeignKey(User, related_name='events')
        time = models.DateTimeField(auto_now_add=True)
        type = models.CharField(max_length=16, choices=EVENT_TYPES)
    
        class Meta:
            ordering = '-time'


    Функция вычисления статуса определена в модели User:

    from datetime import datetime
    from django.contrib.auth.models import User as DefaultUser
    
    class User(DefaultUser):
        @property
        def status(self):
            event = self.events.filter(type='subscription').first()
            if event and datetime.now() - event.time < self.subscription_duration:
                return 'premium'


    Здесь subscription_duration - длительность действия подписки, значение типа datetime.timedelta. Ну или relativedelta из dateutil можно использовать, оно удобней. Да, это влечёт постоянные проверки статуса, но не думаю, что это такая уж большая проблема в сравнении с тем, чтоб городить ещё один процесс крона или Celery, чрезмерно усложняя систему.
    Ответ написан
    Комментировать
  • Какие (ГОСУДАРСТВЕННЫЕ) вузы России, предоставляют возможность получения высшего образования онлайн?

    Томский университет систем управления и радиоэлектроники, факультет дистанционного обучения. fdo.tusur.ru

    Закончил его в прошлом (2013) году. Нельзя сказать, чтоб это был идеал; много проблем, как и везде. Но там есть очень хорошие люди, увлечённые. Движутся вперёд, и у них в общем-то получается.
    Ответ написан
    Комментировать
  • Django request в модели - как менять ссылку?

    Пожалуйста, опишите подробнее, зачем это вам нужно.

    Вероятно, в случае, если пользователь имеет флаг `is_stuff` установленным, он получает больше информации об объекте. Может быть, шаблон другой. И для этого для админов и для не-админов сделаны отдельные страницы с разными URL. Но зачем? Я бы сделал проще: пусть URL будет одним и тем же для всех, а уж конечная страница, точнее, её view, самостоятельно определяет на основании `request.user`, что делать, что пользователю показывать, с каким шаблоном.

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

    Сколь-нибудь хорошо изучив один императивный язык общего назначения, не так уж сложно переключиться на другой; в конечном счёте, все они полны по Тьюрингу, а всё прочее - скобочки или индентация, def или function, прототипное наследование или традиционное классовое, наборы системных API, и так далее - не так уж и большая разница. Требует лишь привыкания и практики.

    Это IMHO, конечно. Но для себя пришёл к выводу, что необходимо изучать не только те или иные технологии, какие используешь в повседневной деятельности, но и нечто более глубокое - чтобы уметь правильно писать программы на любой технологии. Пытаюсь поэтому заниматься по книжке Elements of Programming Александра Степанова, хоть и с переменным успехом. Ну и более общие дисциплины - кибернетика и теория систем. Это, конечно, не философский камень. Но рискну утверждать, что польза от них всё же есть. Помогают более эффективно и системно думать, взвешенно принимать проектные решения и, как мне кажется, программировать лучше.
    Ответ написан
    Комментировать
  • Python - как в namespace функции распаковать переменные?

    Вот здесь: stackoverflow.com/questions/8028708/dynamically-set-local-variable-in-python указывается, что locals менять нельзя. Кроме некоторых извращённых случаев, которые работают далеко не всегда.

    Как я понимаю, у Вас есть словарь, притом довольно небольшой, и Вы хотите распаковать его в локальные переменные. Но зачем? Почему бы не обращаться просто к словарю? mydict['myname'] не намного длинней, чем myname.

    В принципе, можно использовать OrderedDict для того, чтоб гарантировать порядок значений, и зная этот порядок, написать что-то вроде

    myvar1, myvar2 = mydict.values()

    Но нужно ли. Потом разбираться в случае появления багов, откуда и что взялось. Explicit is better than implicit.
    Ответ написан
    Комментировать
  • Зачем нужен CoffeeScript?

    Естественный ход эволюции. CoffeeScript транслируется в JavaScript, JavaScript транслируется в байт-код виртуальной машины (или во что там?), байт-код интерпретируется в машинные коды, а машинные коды исполняет процессор. А всё в угоду скорости написания программы.
    Ответ написан
    Комментировать
  • Как правильно сохранять инлайн модель в админке, если id модели-родителя еще не сохраненно в бд?

    Столкнулся однажды с той же проблемой. Но из лени решил последовать принципу Sorl Thumbnail, который формирует пути так:

    /your_media_folder/b1/08/b108d1217ae0ec3d38c1e6c174c032ce.jpg


    Иными словами, каждая картинка получает в качестве имени случайный UUID и раскладывается по папкам из первых его символов. Получаем равномерную раскладку по папкам, что избавляет от беспокойства о возможном торможении файловой системы при большом количестве файлов в папке. Избавляемся от необходимости нормализовать имена файлов (а если символы кириллические в имени попадутся? все ли компоненты системы отнесутся к этому благосклонно?). Взамен же теряем соответствие между структурой файловой системы и структурой моделей Django. ПМСМ, это несущественно; может быть, у Вас ситуация иная и такой способ не подойдёт.

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

    У меня опыт небольшой. Python, Django, Flask, и по большей части - на oDesk. По моему мнению, самое что ни на есть важное - это: 1) выбор адекватных заказчиков, способных точно объяснить, что им надо, и желательно - технически компетентных; 2) Грамотное общение с ними. На всякое предложение о работе подписывается много людей. Чтобы выделиться среди этой толпы, необходимо потратить определённое время и силы. Внимательно прочесть предложение, подумать над ним и сформулировать в ответном письме вкратце:

    - Ваш опыт, пусть и кратко, относительно данного проекта.

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

    - Предполагаемые сроки. Я их обычно завышаю раза в два. Это позволяет решить задачу с запасом и устранить возможные баги, глюки и т.п. Гораздо лучше, чем обнаружить потом, что времени катастрофически не хватает.

    Очень хорошо, если Вы сразу напишете ещё и некоторые рацпредложения. Вежливо и корректно, конечно.

    Короче говоря, необходимо 1) найти те проекты, в которые стоит вникать и разбираться; 2) вникнуть и разобраться так, чтобы заказчик понял: Вы - компетентный специалист, работаете на совесть, сделаете обещанное и качественно. По крайней мере, очень постараетесь. Если с самого начала тон общения построен именно так, если Вы задали уровень и поддерживаете его, то в случае возможных проблем, неувязок, нестыковок, как правило, люди относятся с пониманием.

    Ответ написан
    Комментировать
  • сервис на python

    Ну, тут несколько вариантов.

    1. Отлавливать исключения таким образом, чтоб они записывались в лог и программа продолжала работу. С моей точки зрения - наилучшее решение. 2. Написать скрипт-запускатель примерно такого рода:

    
    while True:
        # Запустить сервис
    

    3. Воспользоваться monit или другим подобным сервисом. Несколько строк в конфиг - и он перезапускает Ваш сервис при падении по любой причине.

    Ответ написан
    Комментировать
  • Книга "Python for Kids" переведена ли на русский?

    Посмотрел книжку. Раньше её не видел. Очень интересно.

    Я занимаюсь Питоном с группой старшеклассников по курсам на http://acodemy.ru. Преподаватель из меня не очень за полным отсутствием опыта. Но там очень наглядные и удобные курсы; более того, можно создавать и свои во встроенном редакторе. Таким образом, можно предлагать ученикам прямо в браузере красиво отформатированный текст пособия, питоновскую консоль, холст, на котором можно 2D графику рисовать, опросы, тесты для контроля знаний. Всё это разбито по урокам с оценками, бейджами и статистикой для преподавателя. Обращаюсь к коллективному разуму сообщества.

    Вот и моё предложение состоит в том, чтоб попробовать сделать на базе книжки, коль она уж переводится на русский, интерактивный курс. Ибо недостаток курсов по питону на русском языке ощущается явно. Конечно, вся книжка в курс не влезет; хотя бы потому, что там используется tkinter и прочие модули. Но всё же. Стоит?

    Ответ написан