Задать вопрос
  • Кто может дистанционно помочь с изучением программирования?

    barmaley_exe
    @barmaley_exe
    Идите делать уже!

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

    0. Бесплатно. Чтобы заинтересовать по-настоящему крутого специалиста Ваше ценовое предложение должно быть очень и очень велико по очевидным причинам. Если же он хочет помогать Вам из альтруистических соображений, но непонятно, чем Вы лучше Пети из соседнего подъезда. Именно для такого рода помощи, сюрприз-сюрприз, и существуют StackOverflow-подобные ресурсы.
    1. Усреднением мнения нескольких людей можно побороть предвзятость и незнание одного конкретного человека.
    2. Если постоянно дёргать кого-то другого, этот кто-то научится, а Вы — нет. Нужно уметь находить ответы самостоятельно, не имея возможности кого-то спросить.
    3. Можно помогать другим участникам сообщества. Один из моих преподавателей когда-то в шутку сказал "Преподаю уже 10 лет — наконец-то сам начал понимать, что читаю". Как известно, в каждой шутке есть доля шутки, так что объяснение чего-либо кому-либо помогает Вам лучше разобраться в сути дела и структурировать собственные знания.

    Я уже распинался как-то раз на эту тему.

    Если Вам нужен начальный вектор, то вот:

    1. Язык — Python. Уже сейчас используется во всех мыслимых областях, обладает огромным сообществом и сравнительно несложен. Нынче, насколько я знаю, с него начинают обучение информатике в MIT. Потом, при желании, можно будет изучить ещё несколько. Изучение нового языка в пределах одной парадигмы не составляет труда.
    2. Если программирование для Вас область новая, то я бы посоветовал не окунаться сразу с головой в написание проекта, а начать с алгоритмических основ. Порешать задач на алгоритмы, научиться отлаживать код в голове. В результате будет проще думать о происходящем в дальнейшем.
    3. Написать таки какое-нибудь приложение. Проще всего сейчас целиться на веб, т.к. у нас есть браузеры с поддержкой хитрой разметки (HTML + CSS), позволяющей отобразить чуть ли не что угодно и не надо возиться с отрисовкой всего этого счастья. Тут нужно будет ознакомиться с HTML и CSS (чтобы приложение не выглядело как привет из 90-х, можно воспользоваться модными CSS фреймворками вроде Twitter Bootstrap), найти и овладеть каким-нибудь веб-фреймворком для выбранного языка (Например, Django для Python, но их очень много). На этой стадии должно быть много гугления, а в особо тяжких случаях — вопрошания на Тостере. Но не в обратном порядке!
    4. Программы обычно работают не в изолированной среде, а взаимодействуют с другими программами. Полезно знать, как это осуществляется. Для этого на более поздних этапах рекомендуется разобраться в, как минимум, сетях и операционных системах.
    Ответ написан
    8 комментариев
  • Как много программист Ruby On Rails должен знать?

    @rsi
    software engineer
    А что должен знать водитель?
    Водить камаз или мотоцикл?
    Ремонтировать автомобиль?
    Знать объездные пути по трассе Маганд - Бобруйск?

    Может ответы на эти вопросы зависят от конкретного места работы? Профессиональный гонщик и тракторист водители, но знания разные.

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

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

    Пожалуйста просветите почему каждый день появляются однотипные вопросы. Что конкретно вас побудило его задать? Почему вы не просто не отрыли список вакансий с требованиями?
    Ответ написан
    Комментировать
  • Ruby или Python или может Java?

    @FoxInSox
    1C, конечно.
    Ответ написан
    Комментировать
  • Ajax in rails. How to do view more?

    viktorvsk
    @viktorvsk
    Запрос идет в контроллер. Его нужно обработать.
    Что бы правильно работали все эти remote: true должна быть подключена библиотека, например, с джиквери -
    //=require jquery
    //=require jquery_ujs
    Тогда появится магическое поведение всех этих аттрибутов.

    После чего, запрос попадает в тот же контроллер, что обычно, но с форматом js

    В простейшем случае, Вам нужно просто добавить вью, в вашем случае:
    views/main/index.js.erb

    И в нем написать javascript код, который будет реализовывать "показать больше". Например, вставить (append) полученные переменные (новые новости из контроллера).

    Если логика для html и js форматов будет отличаться, тогда в экшене пишете
    # news_controllerb.rb
    def index
    #common format code
    @news = News.all
    respond_to do |format|
    format.html{ #html specific code }
    format.js{ #js specific code }
    end
    end


    Но вот ваше
    (:countNews => @news.count + 9)

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

    UPD:
    Проверять запросы нужно с помощью гемов pry или byebug. Ставите точку останова в нужно месте в контроллере (где ждете запрос) и смотрите, что там где находится.

    Вместо алертов используйте console.log()

    Что происходит с запросом, смотрите в браузере во вкладке Network
    Ответ написан
    6 комментариев
  • Лучшие практики создания одностраничных сайтов?

    sabramovskikh
    @sabramovskikh
    На пользователей без JS не ориентируйся, они прошлый век.
    Что ты хочешь тянуть? У тебя будет динамически меняться контент?
    Если нет никакой динамики делай на HTML
    Ответ написан
    Комментировать
  • Возможно ли использовать Python или Ruby для создания интерактивных Web страниц?

    @throughtheether
    human after all
    Хочу научиться создавать интерактивные Web страницы, но изучать JavaScript не очень-то хочется. Возможно ли реализовать интерактивность, скажем, на Python
    Есть такая вещь, как brython. Местами тормозит, но, может быть, под вашу задачу подойдет.
    Ответ написан
    Комментировать
  • Возможно ли использовать Python или Ruby для создания интерактивных Web страниц?

    wanhelsing
    @wanhelsing
    Можно, есть компилятор Ruby в JavaScript. Такого рода компиляторы дают возможность быстрого старта за счет использования уже знакомого вам языка, но у всего есть своя цена - вы получите неудобства с процессе разработки: дебаг с помощью соурс-мап, дополнительная стадия компиляции во время сборки проекта, не очень большое коммьюнити у подобного рода компиляторов, баги в процессе перевода в JS и т.д. Это компромисс между нежеланием учить JS и желанием терпеть такие неудобства.
    Ответ написан
    Комментировать
  • Почему при вызове cap deploy затирается старая информация на сервере?

    Freika
    @Freika
    Senior Ruby on Rails developer
    Потому что каждый раз при деплое Capistrano создает новую директорию, в которую загружается свежий релиз вашего приложения. Соответственно, ваши изображения остаются в старой директории. Вам нужно настроить в файле deploy.rb симлинк с папками, в которых будут храниться изображения, сами эти папки обычно хранятся в директории shared выше по дереву относительно директории, содержащей релизы. Надеюсь, понятно объяснил :)

    И судя по тому, что информация в БД у вас затирается, вы используете SQLite3 в качестве базы данных. Локум предоставляет для каждого проекта базу данных на PostgreSQL, MySQL или какую-то еще на выбор, рекомендую перебраться в PostgreSQL. Эта БД - де-факто стандарт для приложений на Rails, хотя иной раз выбор зависит от проекта. А SQLite - это только для этапа, когда разработка на Rails только-только постигается. Раньше переберетесь - проще будет в дальнейшем.
    Ответ написан
    2 комментария
  • Насколько быстро можно изучить Ruby on Rails до уровня работы над файлообменником?

    Jeiwan
    @Jeiwan
    Пара-тройка лет. Это если на поверхностном уровне. А так, чтобы разбираться, что там за баги и как их исправить, еще больше. И тут даже не столько знания в программировании нужны, сколько опыт и знание архитектурных решений, а также умение их применять.
    Вообще, как-то все намешано: руби, пхп, питон — как это всё можно было совместить? Какой-то многомодульный проект? Если так, то идея самостоятельно всему этому научиться, а потом еще и развивать, мне кажется утопичной.
    Ответ написан
    Комментировать
  • Каким должен быть собственный проект для устройства на работу?

    Freika
    @Freika
    Senior Ruby on Rails developer
    Стоит искать работу и делать проект параллельно. Сделайте что угодно на свой вкус так, чтобы это было интересно реализовано с технической точки зрения. Работа с внешними API, собственный API с доступом по токену, уведомления на почту пользователям, решение сервисом интересной задачи. Это оценят.

    А еще ведите блог. Это тоже нередко идет в плюс.
    Ответ написан
    2 комментария
  • MVC vs MVVM за чем будущее?

    @vasIvas
    Прежде чем получить ответ, Вам нужно понять,
    что у всех людей mvc разное, точнее, разная реализация.

    Возьму для примера логику 90% и Сергей Протько в том числе.
    MVC декларирует разделение на логику представления, бизнес логику и связывающие это все контроллеры.

    Следом идем в Model-View-Controller и читаем -
    Наиболее типичная реализация отделяет вид от модели путем установления между ними протокола взаимодействия, используя аппарат событий (подписка/оповещение). При каждом изменении внутренних данных в модели она оповещает все зависящие от неё представления, и представление обновляется. Для этого используется шаблон «наблюдатель». При обработке реакции пользователя вид выбирает, в зависимости от нужной реакции, нужный контроллер, который обеспечит ту или иную связь с моделью. Для этого используется шаблон «стратегия», или вместо этого может быть модификация с использованием шаблона «команда». А для возможности однотипного обращения с подобъектами сложно-составного иерархического вида может использоваться шаблон «компоновщик». Кроме того, могут использоваться и другие шаблоны проектирования, например, «фабричный метод», который позволит задать по умолчанию тип контроллера для соответствующего вида.


    Тут ясным языком сказано, что модель посылает события, а представление их ловит и изменяется. Можно было бы предположить, что контроллер является "наблюдателем", но нет. Контроллер, это отдельная структура данных, которая
    в большинстве случаев заключает в себе некую, контрольскую логику, которая
    убивает мысль о контроллере "наблюдателе", так как один объект не может делать больше одной обязанности.
    Конечно можно эти слова натянуть к любой реализации, но чтобы до конца разобраться нужно открыть книгу GoF в которой написано -
    6f447abd4303469d86a19e53a99d6716.png

    Можно и это трактовать по разному, но дальше идет картинка и чугунно-бетонная точка -
    525645c43f4c440b94e61c4b7309e22d.png

    Ну а так же картинку с вики -
    MVC-Process.png

    Буду раз выслушать другие взгляды, но только с приведением ссылок на авторитетные источники, а не статьи смертных и тем более неправильные реализации framwork'ов.
    Ответ написан
    9 комментариев
  • НЕ http фреймворк, похожий на RoR - делать или уже есть?

    mzcoding
    @mzcoding
    Web-Разработка
    Ну если есть желание, делайте! Какая разница велосипед или нет, может ваш велосипед будет лучше и принесет пользу людям.
    Ответ написан
    1 комментарий
  • Разница между mojo и RoR?

    webus
    @webus
    Golang | Python | NodeJS | Java
    Mojo (он же Mojolicious)это фреймворк на Perl. Perl мягко скажем сейчас не самый популярный язык. Используется он все меньше и меньше.

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

    Я не знаю больших сервисов написанных на Mojo.
    Если для Perl есть cpan.org то для Ruby/Rails есть ruby-toolbox.com.

    Я бы не стал писать новый проект на Perl. Часто можно услышать мнение что Perl это write-only язык. Разработчиков на Perl очень мало и становится все меньше. Популярность языка постоянно катится вниз.

    В любом случае стоит выбирать тот инструмент, который лучше знает команда разработчиков.
    Ответ написан
    3 комментария
  • Можно ли вынести модели activerecord в отдельный гем?

    miraage
    @miraage
    Старый прогер
    Engines.

    По сути, это и есть гемы.
    Ответ написан
    Комментировать
  • Как отправлять id, а не value в форме с Select2?

    colix
    @colix Автор вопроса
    Ответ такой:
    = f.input :country, 
                   label: t("heading.country"), 
                   as: :string, 
                   input_html: { value: @post.location.country.id, 
                                        class: 'select2', 
                                        data: { allowadd: true, 
                                                   depth: 0, 
                                                   title: @post.location.country.title, 
                                                   url: search_locations_path } }


    initSelection: (element, callback) ->
          callback
            id: $(element).val(),
            title: $(element).data('title')
    Ответ написан
    Комментировать
  • На каком языке(фреймворке) лучше писать бекэнд для сервиса бронирования?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Искать надо не кодеров, а грамотного тех.дира.
    Ответ написан
    6 комментариев
  • Что представляет собой тестирование ?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вообще вики можно для начала, а потом уже углубляться в литературу. Вот вам кратенькое описание, цель которого больше предоставить ключевые слова для поиска.

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

    Сразу хочу отметить что юнит тесты это хорошо, но вот только рядовой разработчик на PHP редко пишет что-то, что стоит покрывать юнит тестами. Времени на их поддержку нужно не мало, а требования у заказчиков частенько меняются. В итоге тесты начинают комментить и толку от них становится ноль. А вот если вы пишите компонент/библиотеку, то тут юнит тесты обязательны (ну... не то что бы, но желательны). Так что я бы на вашем месте сконцентрировал внимание на первом этапе на интеграционных и приемочных тестах.

    Интеграционное тестирование - тестирование нескольких модулей в связке. То есть мы тестируем наш компонент или его самодостаточный кусок в реальных условиях. Если этот компонент для работы с файлами - разрешаем ему доступ к файлам. Если база данных - то даем реальное соединение с базой. А можем что-то и замокать. Это как говорится, зависит от задачи. Скажем обращение к сторонним апишкам стоит мокать и стабить. Главная цель этих тестов, удостовериться что модули вместе работают хорошо. Особенно важно это когда модули пишут разные люди.

    Функциональное тестирование - это тестирования всего приложения в сборе. Если это REST API, то у нас через curl дергаются реальные методы, отправляются более менее реальные запросы и валидируются ответы. Если web-страничка, то это UI тесты с силениумом/phantom.js/zombi.js или, если нам не нужно еще и js тестить, просто curl + какой виртуальный браузер на том же php. Вообще по хорошему функциональные тесты не допускают никаких моков и т.д. но опять же если очень хочется то можно (опять же обращение к сторонним сервисам, контроля за которыми у нас нету).

    Но реалии таковы, что UI тестами покрывать проект не слишком удобно. Вопервых UI может меняться, а поддерживать их так же нужно. Во вторых это скучно. В третьих тесты могут просто падать... вот взяли и упали. И потом начинается, так, тесты опять упали... что там упало? А, не страшно, можно релизить. Так же на больших проектах UI тесты отрабатывают долго, очень долго, некоторых их просто ночью гоняют. Толку от тестов при таком подходе не слишком много, ибо разработчику стоит знать о том что что-то сломалось как можно быстрее. А так он приходит, видит что тесты опять красные, чинит эти красные тесты, и запускает... ждет... проходит пол часа к примеру, и где-то в другом месте отвалилось... Короче сами понимаете.

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

    Ну и есть еще всякие термины типа пирамида тестов и т.д. Мол лучше много юнит тестов, чуть поменьше интеграционных и мало функциональных. Тогда тесты выполняются быстрее, а покрывать все и вся функциональными тестами обычно перебор.

    Ну и опять же, есть такая вещь как здравый смысл. Некоторые вещи скажем можно вообще забить и не покрывать тестами, некоторые стоит покрыть. Некоторые не полностью, некоторые с как можно большим покрытием.... Скажем тестить UI (именно как выглядит, где какой элемент) вообще бессмысленно. На это нужно куча ресурсов. Хотя может и есть проекты где это оправдано.

    Короче почитайте про TDD и ATDD (можно и BDD затронуть, но тут не только от программиста зависит, менеджеры, заказчик или продукт-оунер тоже должны быть вовлечены, по сути этот подход хорошо работает в рамках продукта какого-то, на фрилансе и в аутсорсе редко можно встретить) , Continious Integration и Continious Delivery.
    Ответ написан
    Комментировать
  • Как сделать систему уведомления для пользователей?

    FanKiLL
    @FanKiLL
    Есть такой gem - https://github.com/pokonski/public_activity
    У railscasts есть скринкаст как сделать это с нуля - railscasts.com/episodes/407-activity-feed-from-scratch но там показываются нотификации для всего и всех.

    Я же сделал так:
    миграция
    class CreateActivities < ActiveRecord::Migration
      def change
        create_table :activities do |t|
    
          t.integer :user_id # кому нотификация
          t.integer :author_id # кто сделал действие
          t.string :action # какое действие например create значит что то создалось
          t.integer :trackable_id #полиморфизм
          t.string :trackable_type #полиморфизм
          t.boolean :read, default: false
          t.timestamps
        end
    
        add_index :activities, [:trackable_id, :trackable_type]
        add_index :activities, :user_id
        add_index :activities, :author_id
        add_index :activities, :read
      end
    end


    потом в applicationController.rb есть такой метод
    def create_activity(to, author, action, trackable)
        activity = to.activities.build
        activity.author = author
        activity.action = action
        activity.trackable = trackable #полиморфизм обьект над которым произвелось действие
        activity.save
      end


    и потом в любом контролере
    например юзер отсылает сообщение другому юзеру или кто то оставляет комментарий вообщем любое действие
    create_activity(@user, current_user, 'create', @post)


    в итоге у вас потом такая лента примерно toster.ru/my/tracker как у тостера
    если взять все уведомления у юзера
    @activities = current_user.activities.includes(:author, :trackable).order(created_at: :desc)


    в view у вас всё есть, кому нотификация, действие которое было сделанно и обьект на который вы можете дать ссылку
    например вот так, но это частный случай у вас конечно будет подругому
    <%= link_to activity.author.username, user_path(activity.author) %> ответил на сообщение <%= link_to activity.trackable.conversation.title, my_conversation_path(activity.trackable.conversation) %>


    Будет написанно например
    FanKiLL ответил на сообщение название сообщения
    или
    FanKiLL написал новый пост

    Вообщем предлогаю посмотреть gem и скринкаст что я дал вначале - а там и этот код будет более понятен - если что спрашивайте.

    когда юзер заходит на страницу с нотификациями все не прочитанные сообщения помечаются как прочитанные а до этого можете где хотите выводить список не прочитанных сообщений

    current_user.activities.where(read: false).count
    Ответ написан
    3 комментария
  • Как получить больше производительности от ruby?

    viktorvsk
    @viktorvsk
    Руби быстрее не сделаешь. По крайней мере, очень много людей постоянно над этим работает, так что у нас с вами тут врядли выйдет.

    У вас рельсы или нет? Какой у вас ОРМ ? Какая база? 10000 каких записей? Что за обработка происходит? Что в базе должно произойти с этими 10000 ?

    Какие условия? Надо за 1 секунду полностью обработать первые 10000 и приступить к следующим? Или покатит очередь ? Если очередь, то с приоритетом\последовательностью ? Управлением? Какой ресурс сервера?

    Не страдайте преждевременной оптимизацией. Поставьте задачу, решите самым простым и быстрым способом. Если упретесь в числа, то уже задавайтесь вопросами.

    Обычно индексация, правильный движок таблиц и какой-нибудь https://github.com/zdennis/activerecord-import или вручную составленный запрос решают проблему. Если нет и условия не сильно жесткие, то очереди.

    Ну а дальше уже только конкретика.
    Ответ написан
    3 комментария