• Стоит ли изучать Java после прекращения разработки EE?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Для начала: Java != Java EE. Прекращение разработки Java EE со стороны Oracle никак не повлияет на жизнь самого языка программирования. Есть вообще сомнения, что Oracle решится на этот шаг, т.к. у них самих большое количество проектов именно на Java EE разработано.

    Плюс стоит помнить, что Java EE - это набор спецификаций, а не конкретная реализация. Java EE состоит из кучи JSR, которые обсуждаются и принимаются JCP (Java Community Process), то есть сообществом, в котором кроме самих Oracle есть Red Hat, IBM, Spring, Apache и многие другие. Oracle может просто передать управление Java EE сообществу. И да, новые JSR выходят вне зависимости от Java EE.

    И стоит помнить, что на Java EE интерпрайз не кончается, ведь есть ещё Spring, который развивается гораздо быстрее и занимает существенную нишу на рынке.

    Так что, учитывая сказанное выше, учить однозначно стоит, если есть желание.
    Ответ написан
    Комментировать
  • В какие страны можно эмигрировать путем открытия там компании или студии?

    mahnunchik
    @mahnunchik
    https://about.me/vlasenko
    Сервисы не мои, но меня поразило обилие информации:
    • passports.io - сравнение возможностей проживания и получения гражданства в разных странах
    • incorporations.io - сравнение стран для создания компании, налоги, отчётность, легальность итд
    • bankaccounts.io - сравнение банков для открытия "международных" счетов
    • flagtheory.com - разложенные по полочкам планы как уйти в офшор
    Ответ написан
    Комментировать
  • Как заставить Django запускать Python скрипт через каждые N минут?

    sim3x
    @sim3x
    Прямо из джанги django commands
    Для запуска через промежутки cron
    Для удаления файлов старше х-дней ни джанго, ни питон не нужны
    Ответ написан
    Комментировать
  • Как вывести из mysql адреса на карту яндекс?

    Settler1
    @Settler1
    Правильно написанный вопрос - половина ответа
    По идеи так:
    var myGeocoder = ymaps.geocode("Адрес писать тут");

    Однако я бы все таки вписывал в базу данных координаты, поскольку он не всегда определяет правильно, если у вас опечатка например или адрес без указания города - может запросто не там где надо поставить маркер
    Ответ написан
    Комментировать
  • Как выбрать правильный путь в PHP(Python) фреймоврке/CMS, чтобы не закопаться?

    b0nn1e
    @b0nn1e
    Alcohol & Ruby on Rails
    Сейчас просто php программист, не кому не нужен. Востребован опыт работы с определёнными CMS/Фреймворками. Тут вам нужно выбрать какой фреймворк вам нравится(читай востребован) и набираться опыта с ним.

    Ну а в общем я бы вам порекомендовал не связываться с php.
    Набирайтесь опыта в Ruby/Python, тут минимальный уровень, когда тебя забирают с руками и ногами, на много вышет, но оно того стоит. На php вы рискуете на пару лет застрять на тягивании верстки на wp и подставлении костылей битриксу.
    Ответ написан
    5 комментариев
  • Как выбрать правильный путь в PHP(Python) фреймоврке/CMS, чтобы не закопаться?

    @SharuPoNemnogu
    не язык плохой, программисты такие...
    Если хочешь в разрабы, да в хорошую контору, то учи Symfony. На вакансиях уровня сеньора я других фреймворков не встречал. Да и освоив один фреймворк, другие освоишь без особого напряга.

    Что касается cms, если хочешь работать в какой нибудь студии, на конвейере сайтиков близнецов, то вордпресс, а лучше битрикс, то еще Г, но расплодилось, а спецов мало, т.к. мало кто хочет с ним работать. Без куска хлеба точно не останешься.
    Ответ написан
    Комментировать
  • Действительно ли новая asp.net core 1.0 быстрее в 8 раз Node.js?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    Во-первых, такие заявления как правило делаются для пиара, а в качестве доказательств предлагаются синтетические тесты, далекие от реальных приложений.
    Во-вторых, разные компиляторы конечно могут по разному оптимизировать Ваш код, кто-то это делает лучше, кто-то хуже, но все же в большей степени производительность зависит непосредственно от кода, одну и ту же задачу можно решить на одном и том же языке и версии компилятора, но разными способами и получить разницу в производительности в несколько раз (лично мне доводилось ускорять серверную часть socket.io в 6-8 раз, без потери функциональности).
    И наконец в-третьих, не ищите серебряную пулю, пишите на том, что лучше знаете
    Ответ написан
    4 комментария
  • ASP.NET MVC, лучшие практики?

    @dmitryKovalskiy
    программист средней руки
    Я конечно не гуру, но попробую озвучить свое мнение.
    1)В общем и целом - да. Но что по вашему - короткий маршрут? короткие слова или малое число слешей? Тут все же качели читабельности неподалеку.
    2)Я считаю да и причина довольно банальна - я не хочу лазить по всему проекту чтобы выяснить почему данный роут свалился в данный контроллер. Но есть исключение - регионы(Areas). У них свой RouteConfig и не исключено что он будет работать отлично от дефолтного.
    3)Это вообще не проблема. Вам никто не запретит писать Javascript-логику, которая потом по ходу дела возьмет еще данных через API и сама нарисует view. Делайте как хотите, но это должно быть читабельно, поддерживаемо и хоть немного соответствовать поставленной задаче( не надо пользовать Angular только чтобы попользовать Angular)
    4) Тут вы все в одну кучу смешали. Максимально короткими? В принципе да, но я хотел бы прочитав название точно угадать что он делает, а не узреть сюрприз в последствии. В остальном тоже соглашусь.
    5) Предположим она нужна. Во первых уберите слово JQuery - сия библиотека к валидации имеет мало отношения. Во вторых на сервере как правило хватает проверок свойств ModelState.isValid и Model.isValid. Разумеется если ваша модель помечена всеми атрибутами, ограничивающими корректные значения. Тут правда есть одна заковыка - предположим у вас меняется логика валидации(поля обновились или еще какие-то телодвижения совершены). На практике вам нужно в двух местах обновлять одну и ту же логику, что не очень правильно(потенциальное дублирование кода, потенциальные ошибки забывчивости).
    6)Может да, а может и нет. Повторюсь - клиентскую сторону можно лепить разными методами. Можно и Javascript-ом. В ASP.NET это не возбраняется. Это вообще нигде не возбраняется.
    UPD:Программировать на C# внутри View не стоит. Тащить доп.данные тоже, хотя изредка такая необходимость возникает(словарь какой-нибудь подтащить). В основном код должен содержать вспомогательные функции- например сформировать какую-нибудь фразочку или проверить состояние объекта по нескольким полям вместо того чтобы писать кучу if в разметке.
    END UPD.
    7)Если честно не понял о чем вы.
    8)Это не костыль, это транспортная система для коротких сообщений и простых типов. Использовать в качестве транспорта для модели тоже можно, но не безопасно с точки зрения приведения типов.
    9) А что вы понимаете под "голый Ajax"? XmlHttpRequest? Да, на мой взгляд лучше его не использовать. Вторую часть вопроса не смогу комментировать без ответа на первую. Вьюшки бывают разные, некоторые подтягивают дополнительные данные по ходу дела. Тут нужно немного конкретики.
    10) Не согласен и уже озвучивал ранее. Razor один из доступных инструментов. Можете использовать его - он хороший, а можете не использовать.
    Ответ написан
    4 комментария
  • Как запретить пользователю добавлять в фоловери более одного раза?

    winordie
    @winordie
    Лучшая документация -- исходники
    templatetags/follow_tags.py
    @register.simple_tag
    def in_follow(user, follower):
        return user.who_follows.filter(follower=follower).exists()

    urls.py
    url(r'^to_follow/(?P<user_id>\d+)/$', follow, name='add_to_follow'),

    template/user_page_blablabla.html
    {% load follow_tags %}
    ...
    {% if messages %}
        <ul class="messages">
            {% for message in messages %}
                <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
            {% endfor %}
        </ul>
    {% endif %}
    ...
    {% in_follow user current_user as user_in_follow %}
    {% if user_in_follow %}
      <span>{% trans "In follow" %}</span>
    {% else %}
      <a href="{% url "add_to_follow" user_id=current_user.id %}">Add to follow</a>
    {% endif %}

    views.py
    @login_required
    def follow(request,user_id):
        selected_user = User.objects.get(id=user_id)
        _, created = Followship.objects.get_or_create(following=request.user,
                                             follower=selected_user)
        if created:
            messages.success(request, 'ok')
        else:
            messages.error(request, 'User already following')
        return reverse('user_page_blablabla')

    models.py
    class Followship(models.Model):
        following = models.ForeignKey(User, related_name="who_follows")
        follower = models.ForeignKey(User, related_name="who_is_followed")
        class Meta:
            unique_together = ('following', 'follower')
    Ответ написан
    2 комментария
  • На каких IT-специалистов выше спрос за рубежом?

    trevoga_su
    @trevoga_su
    Делая первые шаги в сфере IT

    На каких IT-специалистов выше спрос за рубежом?
    не рано такие вопросы то задавать?
    Ответ написан
    Комментировать
  • Codeigniter 3 уроки?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    3 мало чем отличается от 2 версии
    Ответ написан
    Комментировать
  • Стоит ли учить flask для back-end разработки?

    @deliro
    Изучал фласку первые пару недель. Она простая, "некомбайн". Разобраться что да как работает - пойдёт (потому что вьюхи и шаблоны у них с джангой похожи).

    Дальше лучше переезжать на джангу. Фласк лучше джанги примерно в 1% всех случаев - это те, когда тебя джанга не устраивает целиком и полностью: ORM не хватает или не подходит, стоковые сессии и юзеры тебя раздражают, контекстные процессоры и мидлвари тратят слишком много ЦП, что лучше бы их на Си переписать. Короче, тогда, когда своё написать быстрее и проще, чем строить костыли поверх джанговских компонентов с сильной связью.

    Плюсом идёт просто огромная куча модулей для джанги (по сравнению с флаской) и бОльший спрос на джангу на рынке труда.
    Ответ написан
    Комментировать
  • На чём лучше вести локальную разработку?

    boramod
    @boramod
    Упрощенно.

    Вагрант — система управлением конфигурацией конкретной машины.
    Докер — запуск изолированных процессов на машине.

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

    В терминологии Докера есть Images и Containers.
    Image — образ, шаблон, на основе которого запускается Container.
    Image строится на основе какого-либо базового образа ОС.

    Container — сервис, запущенный и построенный на базе Image.

    Таким образом, вы можете построить несколько образов, например, образ для Nginx, образ для PHP, образ для MySQL. Вдобавок, вы можете построить несколько образо, для каждой желаемой версии PHP, MySQL и т.п.

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

    При всем этом, ваша базовая система остается чиста от устанавливаемых пакетов, свободна от неразберихи с библиотеками, версиями и т.п.

    Оба инструмента хороши. Но у каждого свое назначение.

    Vagrant — великолепный инструмент для конфигурации удаленных машин с нуля, VDS/VPS и т.п.
    Docker — великолепный инструмент для быстрого развертывания/переконфигурации рабочего окружения, практически без изменения системы, на которую он устанавливается.
    Ответ написан
    6 комментариев
  • CMS на базе Yii2?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    1. Перебрал все магазины на yii2 - все ужасно. Либо крайне не универсально, либо крайне медленно работает.
    2. Не стоит искать cms на yii, надо писать cms на yii
    3. Если нужен хороший магазин на базе framework - есть shop-script, на базе их же framework webasyst. Как cms - намного лучше всего написанyого на yii (имею в виду opensource cms магазинов), как framework - барахло полное. Если надо именно на yii, см. пункт2
    4. Если нужна модульная структура, то не надо искать cms, надо искать набор готовых модулей, совместив которые, получите cms. Модульная структура удобна, и в этом кроется ответ на вопрос "почему нет готовых CMS для магазинов на yii". Они есть, но в виде модулей. Отдельно RBAC, отдельно авторизация, отдельно nestedsets для категорий, отдельно яндекс касса и т.д. Просто совместите их, натяните одинаковый дизайн и все.

    PS: не буду говорить от Вашего имени, но когда я задавался этим вопросом ситуация была в том, что я знал азы yii, но не мог написать магазин. Тогда я задумался, а может взять готовый и моих азов хватит его дорабатывать и видоизменять? Путь в деградацию и гавнокод. Лечится чтением документации и глубоким разбором кода framework, а так же практикой. Теперь я смотрю на проекты типа eximuscommerce и понимаю, что быстрее напишу сам, чем заставлю правильно работать это.
    Ответ написан
    8 комментариев
  • CMS на базе Yii2?

    еще есть easyiicms.com но автор что-то давно ничего не обновлял
    Ответ написан
    1 комментарий
  • Как правильно разработать CRM-систему с нуля с архитектурной точки зрения?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1) На сколько верным было решением использовать node.js и mongo?

    Вопрос во многом холиварный. CRM это по определению много-много реляционных данных. Хранить это в любом nosql - я лично считаю очень плохой идеей. Особенно когда через полгодика пойдут change request`ы и выяснится что вещи которые в реляционке делаются за пару минут в nosql могут потребовать изменения архитектуры хранения и занять человеко-недели.

    3) Сайтов у компании - масса, большая часть которых - лэндинги на чистых html с php-скриптом на почту. Все заказы ссылаются на единый gmail-ящик. Можно ли грабить эти данные из ящика, чтобы отправлять их в облако?

    Можно. Но с учетом того что доставка email вообще говоря не гарантирована - завязывать один из ключевых бизнес процессов на это выглядит мягко говоря странно. По хорошему - сделать в вашей CRM, API наружу для формирования заказов и переписать все сайты для работы с ним.
    * Странно что Ваш программист не может ответить на этот вопрос с закрытыми глазами

    4) Какие существуют удобные облачные сервисы, которые предоставляют API для node.js?

    Я рискну предположить что ЛПР где то услышал про облака и ему понравилось. На полном серьезе отдавать весь бизнес контент во внешний сервис - это надо или полным идеалистом быть, или просто не понимать о чем речь идет. Только свои железные сервера, только физическое резервирование.

    5) Какова примерная стоимость подобного проекта в $ ?

    Смотря где вы находитесь, насколько легально все это оформляете
    В Мск приличного разработчика сейчас можно найти за 100-120 т.р. net, в регионах на 40-60 net (от региона зависит).
    Сколько их нужно - без ТЗ сказать нереально, но думаю что оценка снизу это 3-4 разработчика
    +тимлид 100% +project manager 100% +аналитик на старте +дизайнер по желанию +devops на аутсорсе итд

    PS Без обид, но ищите грамотного CTO который это все организует. Это в любом случае длинный проект, так что можно и в штат найти человека.
    Ответ написан
  • Как правильно разработать CRM-систему с нуля с архитектурной точки зрения?

    @GeraldIstar
    Frontend
    Не могу ответить на все вопросы, но на мой взгляд если используете python - берите django. Он более предназначен для крупных проектов.
    Node.js - более ориентирован на микросервисную архитектуру. Если умеете ее готовить - то ради бога, но целиком на ноде делать думаю не стоит. Монгу стоит использовать только в случае если вы действительно понимаете отличия РСУБД от mongo.
    3) Думаю это не проблема.
    4) API для облачных серверов - а там какая разница, что за язык будет? Разве что наличие уже подготовленной либы.
    5) Больше 1 миллиона точно.
    Ответ написан
    1 комментарий
  • Как разобраться с конструкторами?

    1) Box catBox;   // объявили переменную с типом Box и именем catBox (просто объявили, в ней ничего нет)
    2) new Box();     // создали новый объект типа Box (и бросили)
    3) catBox = new Box();    // создали новый объект типа Box и сказали, что с ним можно пообщаться используя 3) переменную catBox
    4) Box catBox = new Box(); // объявили переменную и сразу с ней связали объект
    Ответ написан
    Комментировать
  • Как поменять имя приложения и модель на русский в админке Django?

    zigen
    @zigen
    1. In apps.py:

    from django.apps import AppConfig
    
    class FacesetConfig(AppConfig):
        name = 'faceset'
        verbose_name = "Что-то твое на русском на родном"


    2. models.py

    class Timetables(models.Model):
        name = models.CharField(u'time', max_length=30)
    
        class Meta:
            verbose_name = 'Что-то твое на русском на родном'
            verbose_name_plural = 'Что-то твое на русском на родном'
    
        def __str__(self):
            return self.name
    Ответ написан
    2 комментария
  • Как обуздать Django messages?

    winordie
    @winordie
    Лучшая документация -- исходники
    Давайте посмотрим как работает framework messages.

    https://github.com/django/django/blob/master/djang...
    def messages(request):
        return {
            'messages': get_messages(request),
            'DEFAULT_MESSAGE_LEVELS': DEFAULT_LEVELS,
        }
    ...
    def get_messages(request):
        if hasattr(request, '_messages'):
            return request._messages
        else:
            return []

    Так messages попадают на страницу. Т.е. они берутся из request._messages. Как же они туда попадают?

    https://github.com/django/django/blob/master/djang...
    class MessageMiddleware(MiddlewareMixin):
        def process_request(self, request):
            request._messages = default_storage(request)
    ...
    def default_storage(request):
        return import_string(settings.MESSAGE_STORAGE)(request)
    ...
    MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'

    Значит в request._messages у нас лежит FallbackStorage(request)

    Перейдем к нашему коду
    messages.error(request, 'Ваш диапазон дат занят для данного объекта.')

    Что тут происходит? Посмотрим:
    https://github.com/django/django/blob/master/djang...
    def error(request, message, extra_tags='', fail_silently=False):
        add_message(request, constants.ERROR, message, extra_tags=extra_tags,
                    fail_silently=fail_silently)
    ...
    def add_message(request, level, message, extra_tags='', fail_silently=False):
        if not isinstance(request, HttpRequest):
            raise TypeError("add_message() argument must be an HttpRequest object, "
                            "not '%s'." % request.__class__.__name__)
        if hasattr(request, '_messages'):
            return request._messages.add(level, message, extra_tags)  # *** THIS ***
        if not fail_silently:
            raise MessageFailure('You cannot add messages without installing '
                        'django.contrib.messages.middleware.MessageMiddleware')

    Ага, вызывается метод add знакомого нам объекта FallbackStorage.
    Ему передается в качестве параметров:
    - level = constants.ERROR = 40
    - message = 'Ваш диапазон дат занят для данного объекта.'
    - extra_tags = ''

    Посмотрим на этот метод
    https://github.com/django/django/blob/master/djang...
    def add(self, level, message, extra_tags=''):
            if not message:
                return
            level = int(level)
            if level < self.level:
                return
            # Add the message.
            self.added_new = True
            message = Message(level, message, extra_tags=extra_tags)
            self._queued_messages.append(message)
    ...
    def _get_level(self):
            if not hasattr(self, '_level'):
                self._level = getattr(settings, 'MESSAGE_LEVEL', constants.INFO)
            return self._level

    Из этого кода можно сделать вывод что сообщение попадает в очередь сообщений если его уровень более или равен тому который задан в settings.MESSAGE_LEVEL (по умолчанию = contants.INFO = 20)

    Таким образом чтобы добавлялись только наши сообщения необходимо:
    1) в settings.py установить
    # settings.py
    ...
    MY_SUPER_ERROR = 80
    MESSAGE_LEVEL = MY_SUPER_ERROR
    ...

    2) Во вью писать
    if not available_cars:
            carstoshow = None
            messages.add_message(request, settings.MY_SUPER_ERROR, 'Ваш диапазон дат занят для данного объекта.')
            return redirect('car_detail', pk=car_used_id)
    Ответ написан
    1 комментарий