Multimedialne kursy językowe na railsach, czy ma to sens?

Witam kolegów i koleżanki,

Zacznę od tego, że to mój pierwszy post tutaj i piszę ponieważ zdecydowałem się dać szansę RoR. Przeczytałem mnóstwo porównań opinii począwszy od Django, poprzez jsnode oraz języki python vs ruby vs javascript itd.

Piszę dlatego, że ponieważ jestem fascynatem SCRUM i agile dotychczas głównie do zarządzania, to RoR pomimo napierających trendów wzrostowych javascript chciałbym na stałe wykorzystać do naszych celów. Na razie mam tylko wiedzę ogólną i szybko nadrobię braki.

Ostatnie lata zajmowałem się zarządzaniem i projektami, wiele lat temu po studiach byłem programistą Pascal, C. C++, Lingo, potem przez wiele lat tylko kierowałem grupami, tworzyłem projekty, algorytmy. Obecnie chcę wrócić do projektowania prototypów (kodowania), a może końcowych wersji. Potem jeśli uznam, że to ma sens bedę potrzebował doświadczonych koderów. Może niektórych z was.

Chcemy odkopać stare produkty na płytach CD i je zmodernizować.

Główny nacisk kładziony będzie na edukację, czyli przygotowanie zaawansowanych kursów językowych z technologiami Text To Speech i Voice Recognition.

Mamy zrobione ponad 30 gotowych dość zaawansowanych produktów do nauki języków oraz dla dzieci na desktopy i chcemy “przełożyć” oprogramowanie na sieciowe (oraz potem na urządzenia mobilne) do nauki języków obcych przeznaczone dla szkół jak i indywidualnych użytkowników. Naturalnie i dość łatwo byłoby z javascript, ale ja chciałbym to robić efektywniej wykorzystując techniki Agile, wielu znajomych z branży jako alternatywę do javascript podało RoR. Priorytetem jest jednak oprogramowanie aplikacji webowych, mobilne to opcja.

Moje pytanie i tak będzie zbyt ogólne, ale liczę na czyjeś doświadczenie i czy RoR do animowanych multimediów, czy kursów językowych to właściwa droga?

A konkretnie pytanie kieruję do zaawansowanych koderów, czy tworzenie systemów manipulujących na plikach dźwiekowych, graficznych animacjach oraz interaktywnych animowanych quizów, systemów elernigowych z efektami wizualnymi sprawdzi się na RoR?

Jeśli to jeszcze zbyt ogólne, to może konkretne zadania, takie dla dzieci, będzie łatwiej zrozumieć :slight_smile:

Wyobraźmy sobie:

 -  czytaną bajkę przez myszkę na ekranie synchronizowaną z tekstem tak, aby podświetlały się słowa podczas czytania 
 - zsynchronizowany ruch ustami podczas czytania
- można zwolnić lub przyspieszyć czytanie

widać ruch ustami. 

Potem tryb zabawy i quizów:

 - można klikać na słowa i zostaną odczytanie przez TTS (gadający lew(
 - można zaznaczyć fragment i lew przeczyta

Tryb quizu

 - ukryte słowa podczas czytania
 - dyktando, użytkownik musi wpisać słowo
 - punkty za poprawne
 - pochwały/nagrody obrazkowe z animacjami
itp.
  • Zapamiętywanie punktów / osiągnięć i powrót do źle wykonanych quizów
    i zaawansowany system przypomnień
  • Przypominacze na facebooka, maila o nieskończonych zadaniach
  • Wiele różnych udogodnień dla użytkowników

HTML5/Javascript wydaje się być odpowiedni, ale czy RoR do takich zastosowań jak opisałem mógłby być przydatniejszy?

Pozdrawiam

RoR nie zastąpi Ci HTML+JS. Ror może Ci wygenerować HTML + JS, ale nie zastąpi Ci tego po stronie przeglądarki. Jeżeli chcesz zaawansowaną interakcję w przeglądarce to bez JS w takiej czy innej postaci się nie obejdzie.

JS musi być na bank, sądziłem, że RoR pomoże w backendzie do wielu innych rzeczy jak zarządzanie kursami, użytkownikami, generowaniem losowym lub poprzez algorytm zadań dla uczniów, testów, rankingi uczniów, oceny, zapamiętywanie, analiza danych i sugestie co do nauki, wyniki komunikacja z fb, tw, g+.

Same wodotryski i animacje to frontend, ale większa część roboty to jednak backend, aby system był dobrze skalowalny. Sam html+JS nie wystarczy. Od biedy można to zrobić nawet na Wordpressie, ale mam ogromną niechęć do PHP.

Zadałeś poniższe pytanie:

Więc wydawało mi się, że po prostu nie za bardzo się orientujesz co to jest JavaScript a co to jest Ruby on Rails.

Czy RoR nada się do backendu? Jasne że tak. Czy będzie lepszy od Django itd.? To chyba raczej kwestia gustu.

Jeżeli chcesz w Rubym zajmować się zaawansowaną obróbką dźwięku i animacji to nie wiem, czy istnieją gotowe wygodne rozwiązania, wiem, że na pewno w Pythonie nie ma z tym raczej problemów. Ale ja większość tego co napisałem, to napisałem w Pythonie, a Rubiego znam raczej tylko od strony RoR i nie wiele poza tym.

@sztosz dzięki za odpowiedź

Napisałem chyba zbyt skrótowo, ale zależało mi, aby jakoś szybko przedstawić problem.

W zasadzie, to jak napisałem na początku nodejs załatwiłoby sprawę, jednak mam znajomych kierujących zespołami między innym RoR i zasugerowali, abym się nim zainteresował i czy nie byłby lepszy przy projektowaniu. Dlaczego, ponieważ tak jak z remontem nie za bardzo można oszacować prac i problemów.

Mamy stare kody napisane np, w C++ i Lingo oraz JS częściowo na PC, trzeba to przenieść na inne platformy. Tu w oparciu o SCRUMa RoR mógłby być pomocny. Ale mamy właśnie tę stronę frontendową z “wodotryskami” HTML/JS, która też swoje waży, stąd zastanawiam się czy ROR+JS byłby lepszy niż nodejs.

W backendzie chcemy zainstalować np. moduł TTS i Voice Recognition, podobnie jak to robi google. Czekamy na odpowiedź jakie bliblioteki otrzymamy od producentów i potem jak je zintegrować w systemie.

Zbieram na razie dane i pytam w różnych miejscach i muszę do przyszłego tygodnia podjąć decyzję, co robimy.
Z RoR nie miałem dotąd do czynienia, gdybym robił czysty kurs elearnigowy z różnymi quizami i złożoną logiką, to RoR byłby naszym priorytetem.

Częściowo można wykorzystać stare kody, ale w większości przypadków lepiej będzie od nowa napisać wszystko.
To spore przedsięwzięcie i wyzwanie dla programisty. Cały system będzie w końcowej fazie dość złożony i mam obawy, że może nawet nie zostać skończony przy tradycyjnym podejściu. RoR z tego co mi mówili deweloperzy będzie świetny do prototypów i szybkich zmian, po zapoznaniu się wstępnie, RoR też mnie to przekonało.

Pythona używam do operacji na plikach tekstowych, gdy potrzebuję jakiś konwersji lub filtracji. W wielu miejscach jest doskonały. Wykluczyłem go z zastosowań jakie planujemy. Podobnie Wordpress, który też mógłby się nadawać, ale trzeba napisać własne pluginy w PHP i tego nie chcemy.

W tej chwili to mam dwie opcje albo nodejs albo RoR, chyba, że coś innego się pojawi na celowniku.
Szukam za i przeciw.

A co sprawiło, że wykluczyliście Pythona? Pytam z czystej zawodowej ciekawości, nie próbuję ani przekonywać, ani oceniać.

Mieliśmy najpierw wybór albo django albo nodejs, po róznych analizach trendów, wiedzy, umiejętności i to, że tu są zaawansowane multimedia, poza tym jest szansa, że kod może się uda przenieść na natywne urządzenia. Potem po rozmowach i analizie problemów do ich rozwiązania RoR zaczął się wydawać lepszą opcją niż nodejs.

Poza tym opisałem tu przykład aplikacji dla dzieci, ale mamy też produkty do nauki języków dla dorosłych i tam nie ma tylu wodotrysków. Będą więc aplikacje bardziej stonowane nadal wykorzystujące pliki dźwiękowe, obrazy, animacje i filmy. Do tego użytkownicy sami będą tworzyli content i lekcje, oceniane przez innych, wiec dobry backend to podstawa.

Ok, rozumiem, ale czy był jakiś konkretny powód dla którego Django zostało odrzucone?

Ja wiele rzeczy napisałem w Django, ostatnio staram się pisać też w RoR. Na razie widzę kilka rzeczy których mi brakuje w Railsach, a które bardzo ułatwiają życie w Django, ale z drugiej strony pare rzeczy chętnie bym przeniósł z RoR do Django. Dlatego zawsze bardzo chętnie poznaję powody dla których ktoś odrzucił jeden framework na rzecz drugiego i odwrotnie.

Jedno jest pewne, mając doświadczenie jakie mam, nie mogę nikomu z czystym sumieniem powiedzieć że jeden framework jest lepszy od drugiego :smile:

Biorąc pod uwagę wiele czynników, js i tak musi być używana do budowy interaktywnych “żywych” stron js wydaje się być tu lepszym rozwiązaniem w naszym przypadku. Wydajność szybkość też na plus. Pisałem już wcześniej bierzemy pod uwagę, że z JS możemy łatwiej przejść do natywnych mobilnych niż z pythona, którego bardzo lubię za przejrzystość. Wtedy będziemy w jednym ekosystemie. Tu mamy interaktywne programy, które musimy przekonwertować, są one różne i musza być różne podejścia w sposób elastyczny. A z elatycznościa jednak bardziej RoR mi się kojarzy, ale oczywiście django wcale nie musi być gorszy.

Dalej się nie zastanawialiśmy głębiej, jeśli nodejs dla naszych zastosowań wydaje się sensowniejszy. Ale pozostaje jedno “ale” cała operacja nie jest tak prosta. Chcemy stworzyć jakieś wspólne reguły do konwersji oprogramowania, stąd RoR wydaje się ze względów projektowych i prototypowych bardziej odpowiedni niż django. Co prawda sam nie wiem jeszcze jak dokładnie współgrałby RoR i JS frontend?

Przeczytałem większość django vs nodejs vs RoR w różnych zestawieniach, są zawsze za i przeciw. Przy czym analiza trendów pokazuje jakby małą stagnację RoR, ale zwolennicy mówią, że to kwestia dojrzałości systemu.

Ja do sprawy podchodzę analitycznie i słucham różnych głosów.

To tak:

Na tyłach RoR będzie spoko, w sumie każdy nowoczesny framework (RoR, Django, Elixir, Node) będzie spoko. Z backendu wyrzucacie filmik, json z tekstem, a potem w JS-owej bibliotece do grafiki (np. WebGL) przetwarzacie obraz. Będzie to dobre rozwiązanie.

W skrócie: API w czymkolwiek komunikujące się z JSowym frameworkiem z WebGl-em będzie spoko :slight_smile:

@Hoggie dzięki za odzew, każdy głos mi pomoże, wiem, że można zrobić na nowoczesnych i nawet by poszło na Wordpressie.

Coraz bardziej wszystko przemawia za node, większość “doradców” poleca nam obecnie JS (to ma być przyszłość, ale kto to wie?), gdy podaliśmy jako alternatywę RoR, mówią jednak node. Tu nie podaję szczegółów projektowych. Większość rzeczy na których chcemy się oprzeć to JS przykładowo rozpoznawanie mowy, które są w naszym zasięgu. Część rozwiązań będziemy musieli przetestować na prototypach.

Mój wspólnik też optuje coraz bardziej za node, ja jeszcze się waham i RoRa przynajmniej teoretycznie zgłębiam pytając znajomych we Wrocku seniorów od RoRa. Gdy dawno temu zaczynałem ze SCRUM i agile to RoR utkwił mocno mi w głowie pamiętam lata 2013-2014, ale z uwagi na inne platformy nie był brany pod uwagę.

Polegliśmy na Windows Phone, nie do końca z naszej winy, Microsoft zrobił kilka numerów. Potem utknęliśmy na iOS, kiedy rynek zdążył się nasycić nie zdążyliśmy z aplikacjami duża wtopa kasy. Teraz jesteśmy przekonani, że trzeba zacząć od aplikacji webowych. Na wordpressie udało nam się dość sporo zdziałać z kilkoma fajnymi pluginami, ale gdy doszło do szczegółów to za dużo ograniczeń i problemów z pluginami odpuściliśmy zbyt duże ryzyko.

W ciągu 5 dni podejmiemy decyzję, bo w tym wszystkim poza interaktywnymi kursami z modułami uczącymi (zawierającymi animacje, gry edukacyjne, quizy), płatnościami za kontent, rejestracją użytkowników, nadzór nad postępem nauki, bramkami płatniczymi mamy integracje z zewnętrznymi pakietami Vouice Recognition i Text To Speech oraz społecznościowe a potem natywne mobilne komunikujące się z serwerami.

Nasze oprogramowanie tworzyliśmy ponad 10 lat, teraz chcemy zrobić znacznie więcej, a jednocześnie prościej małymi kroczkami. Całość jest dość złożona gdy się przejdzie do szczegółów od strony zarządzania zasobami, które będą też tworzone przez użytkowników i stale się będzie powiększać, to zaczyna się robić bardzo skomplikowane.

RoR jest nadal w kręgu moich zainteresowań, czekam na opinie z różnych źródeł.

Brakuje mi przykładów stron, trudno do nich dotrzeć z realizacjami opartymi na RoR i intensywnym wykorzystaniem JS/HTML5. Może ktoś coś porzuci, może jakieś platformy z grami online zarządzane RoR. To by pomogło.

Weź też pod uwagę sam język. Jak Node to JS. A JS dopiero niedawno stał się językiem troszeczkę bardziej bardziej obiektowym. Przed JS6 dla mnie to było piekło, teraz też nie jest wcale tak różowo. Z której strony byś nie patrzył, Ruby jest językiem w którym łatwiej się pisze i który łatwiej się czyta, a już na pewno o wiele łatwiej debuguje. Co za tym idzie, oprogramowanie w Rubym prawie na pewno powstanie szybciej.

Tak wiem, że node to JS. :smile: Niestety też mam takie małe obawy co do JS, dlatego kopię w RoR cały czas. W sumie łatwo się rozłożyć przy coraz większym skomplikowaniu.

Jednak i tak będziemy musieli mnóstwo rzeczy wykonać na frontendzie w JS/HTML5, nie uciekniemy za bardzo od JS.
Kusząca jest sprawa, że łatwiej byłoby przejść do natywnych aplikacji na Androida i iOS pisząc odpowiednio w JS.

Między innymi dokopałem się do http://macbury.ninja/2014/8/writing-game-using-phaser-js-in-ruby-on-rails co może nam dać pewne wskazówki.

Okazuje się, że elastyczność to podstawa. No i stało się node.js kompletnie wykluczyliśmy i na liście rankingowej na pierwszym miejscu jest teraz RoR, ale tu niespodzianka, miejsce nr 2 jednak Django na backendzie. Znam pythona, ale nie od strony Django, więc to inna znajomość.

Po dzisiejszych intensywnych rozmowach i po przejrzeniu zasobów do TTS i Voice Recognition jest wiele świetnych rozwiązań, których na razie nie znalazłem w RoR, część co prawda jest jak np. pocketSphinx, ale Phyton i Django wydaje się mieć tego znacznie więcej, co zrozumiałe, bo mamy tu obliczenia i analizę danych…

Spytam jeszcze w innym wątku o pewne rozwiązania związane z multimediami i porównam z Django. Mi RoR coraz bardziej odpowiada, tylko trochę mnie martwi jedna rzecz, co z wersją 5.X. Czy trzeba będzie w jakiejś niedalekiej przyszłości emigrować na wyższą wersję? Modyfikacje kodu mogą być bolesne. W Django raczej nie ma takiego problemu.

Wdawać się też nie chce w dyskusje Django vs RoR, bo cały internet jest zaśmiecony opiniami. Mnie będzie interesować jak do naszych kursów i powiedzmy nawet gier językowych który z nich będzie korzystniejszy.

Możesz też RoR użyć jedynie do prezentowania danych przez API (może wtedy coś lżejszego niż RoR?) a cięższe rzeczy typu Voice Recognition robić po stronie serwera w przyjaźniejszych środowiskach.

Co do migracji na Railsy 5.x, jeżeli nie powiążesz swojej aplikacji za mocno z Railsami to migracja nie będzie problemem. Swoją logikę powinieneś budować obok frameworka, bez mieszania go do tego.

RoR będzie na bank potrzebny do zarządzania użytkowanikmi, kursami, postępami w nauce, testami, generowaniem kursów, a tam mówionych mp3 synchronizowanych z dialogami, losowo wybueranych gier edukacyjnych, informowanie i przypominanie typu “ToDo”, zarządzanie dostepem do płatnych części Premium serwisu itd…

Sama prezentacja treści i interaktywność będzie oparta na JS/HTML5 (wystarczy nawet jquery) we frontendzie i powoli to ogarniam jeśli chodzi o RoR. W sumie tylko niektóre dane będą przekazywane na backend z gier JS/HTML. Myślimy już nad framworkami JS: Angular 2, Ember czy React.

Voice Recognition robić po stronie serwera w przyjaźniejszych środowiskach

Co do VR to jest np. https://github.com/cmusphinx/pocketsphinx-ruby i odpowiednik tego samego pod Django. Jak rozumiesz przyjaźniejsze środowisko? Czy coś poza RoR i inegrując z RoR, czy inne niż RoR?

Teraz to już na 100% wybór będzie między RoR i Django. Musimy przemyśleć co będzie dla nas do celów naszych kursów efektywniejsze i szybsze w realizacji.

Przyjaźniejsze środowisko rozumiem tak, że VR nie musicie wiązać z RoR, nawet nie powinniście, nie musicie go nawet robić w Rubym, są na pewno języki w których można to zrobić szybciej/wydajniej. Do RoR poprzez API wpadnie dźwięk i można go do obróbki przekazać dalej, oczekując już gotowych przetworzonych danych.

A tak teraz Ciebie rozumiem, oddzielenie VR, tak robi Google VR, wysyłane dane idą na serwer i zwracane są teksty.

Więc twoja sugestia jest taka, że RoR czy Django nie powinny mieć znaczenia, czyli w każdym razie RoR nie jest przeszkodą lub nie musi być, OK, zgoda.

To się muszę zgodzić, że takie rozwiązanie ma sens i nawet nie ma potrzeby szerszej integracji.
Z drugiej strony jeśli juz ktoś coś zrobił i jest jakiś gem lub dostep przez API to warto z tego “czegoś” skorzytać.

Poniżej jest przykład:

  #!/usr/bin/env ruby

require "bundler/setup"
require "pocketsphinx-ruby"

include Pocketsphinx

MAX_SAMPLES = 2048
RECORDING_INTERVAL = 0.1
RECORDING_LENGTH = 5

puts "Recording #{RECORDING_LENGTH} seconds of audio..."

microphone = Microphone.new

File.open("test_write.raw", "wb") do |file|
  microphone.record do
    FFI::MemoryPointer.new(:int16, MAX_SAMPLES) do |buffer|
      (RECORDING_LENGTH / RECORDING_INTERVAL).to_i.times do
        sample_count = microphone.read_audio(buffer, MAX_SAMPLES)

        # sample_count * 2 since this is length in bytes
        file.write buffer.get_bytes(0, sample_count * 2)

        sleep RECORDING_INTERVAL
      end
    end
  end
end

Ważne jest dla nas, aby w aplikacji według pewnej ustalonej logiki było przechwytywanie dźwięku i przesyłanie danych do serwera lub do modułu przetwarzającego.

W sumie to co podałem własnie działa w ten sposób, a wersja dla Django przewidziała szerszą perspektywę i dostęp do jednego z wielu systemów VR: CMU Sphinx, Google Speech Recognition, Wit.ai, IBM Speech to Text, and AT&T Speech to Text. To już jest gotowe i albo wykupi się API do tych lepszych, albo można na bezpłatnym polecieć jak Pocketsphinx i to właśnie zamierzamy zrobić.

Tylko wszystkie te lepsze systemy serwerowe są płatne. Co prawda możemy zrobić własny serwer na bazie PocketSphinx lub podobnie, mało jest dobrych gotowych dobrych rozwiązań. Jednak nasz plan jest taki, aby system mógł pracować też offline, ponieważ ten sam będzie służył do natywnych aplikacji mobilnych bez dostępu do internetu.

Zależy nam, abyśmy nie musieli wyważać otwartych drzwi mieć jak najwięcej rozwiązań “out of the box”.

Dobra stawiamy na RoR :smile: , więc decyzja podjęta z wątpliwościami, czy nie lepiej było jednak na Django, albo np. Meteor.js, który wydaje się być coraz lepszą alternatywą. Zaczynam od podstaw, aby wiedzieć z czym się to je, gdy zrozumiem zasady to skieruję się do profesjonalistów. Rozruch potrwa kilka tygodni, może dłużej, aby opracować plan działań.

W zasadzie to część wizualna to będzie głównie HTML5/JS.
Problemem będzie dobór właściwego dla nas frameworka JS na frontend, aby nie było pod górkę.
Nie może on “mulić”, rozważamy jquery, tylko mobilna część aplikacji trochę może ucierpieć z uwagę na objętość jquery.

Może ktoś doradzi, czym warto się zając od strony JS?

Myślicie o aplikacjach mobilnych również. Jest wiele rozwiązań, jednym z nich jest Ionic http://ionicframework.com/ używa Angulara. Ionic 2 jest w fazie beta jeszcze, ale używa Angulara 2, a w tym się naprawdę sensownie pisze, chociażby z tego powodu, że można pisać w TypeScripcie i dzięki temu korzystać z sensownego modelu obiektowego. Oczywiście Angular 2 też rozwiązuje sprawę frameworku frontendowego dla samej strony.

Nie twierdzę że to jest jedyna czy najlepsza droga. Ale jest to jedna z dróg która pozwala na dzielenie komponentów pomiędzy web i mobile.