Главная » PHP » Блог » Изучаем php-фреймворки на практике - часть 9, заключительная, "Диаспора"

Изучаем php-фреймворки на практике - часть 9, заключительная, "Диаспора"

Автор: grunged | Дата: 10 фев 2013
Изучаем php-фреймворки на практике - часть 9, заключительная,
Добрый вечер, уважаемые читатели QwertyBox.ru! Предлагаем Вашему вниманию заключительную часть цикла про веб-фрейморки. В предыдущих частях автор изложил своё видение "что есть фреймворк" и "когда он необходим". Потом мы сделали небольшой обзор множества фреймворков на самых разных языках программирования. Поговорили немного о серверной части - каким образом веб-сервер взаимодействует с кодом веб-приложения. Потом немного помучили php-фреймворк Symfony. И в прошлой части посмотрели на реальное крупное веб-приложение на Django. В заключительной части мы взглянем одним глазком на достаточно популярный фреймворк Ruby On Rails. На примере очень амбициозного проекта по созданию децентрализованной социальной сети Diaspora.

Итак, поехали. И для начала матчасть. Diaspora - это в целом уже функционирующая социальная сеть. Начать пользоваться ей проще всего через веб-сайт joindiaspora.com. После того, как Вы зарегистрируетесь там, Вас ждёт некий гибрид фейсбука и твиттера. Но главная фишка не в каком-то новом интерфейсе. А в том, что Диаспора - это сеть с прицелом на уважение личных данных пользователей и с децентрализованными амбициями. В противовес централизованным Facebook, Vk.com, Twitter и прочим.

Но что означает "централизованными"? Эти соцсети так называют, потому что все данные пользователей - сообщения, профиль, стена, фотки, видео, лайки - всё это хранится на центральных серверах соцсети. То есть - всё это в руках конкретной компании. А все пользователи - лишь клиенты этой архитектуры. А клиент - это всего лишь клиент. Пусть он и "всегда прав". Но, как ни крути, ему доступен лишь крайне ограниченный функционал.

Авторы Диаспоры видят в этом проблему. Раз пользователи отдалены от управления сетью и никак не контролируют серверы компаний, то возможны разного рода злоупотребления. К примеру, Вашу личную переписку способен прочитать сотрудник компании. Конечно, не любой сотрудник. Компании понимают, что каждый инцидент с утечкой персональных данных бьёт по репутации соцсети. Поэтому по мере сил стараются всё же защищать данные своих клиентов. Однако сама централизованная архитектура этих проектов подразумевает, что Вы так или иначе свои данные отдаёте в чужие руки. И тут на сцену выходят децентрализованные сети. В том числе, и Диаспора. Которая стремится к тому, чтобы Вы хранили все свои данные у себя. То есть Вы в идеале не просто клиент, а полноценный узел сети. Равный в правах с другими узлами. Я, конечно, сегодня "мастер" слога, но, надеюсь, понятно всё же?

Как это дело выглядит на практике? На текущий момент любой человек обладает правом запустить собственный сервер Diaspora и соединить его с другими серверами сети. Допустим, этот сервер может быть корпоративным. Либо личным для одного пользователя. Последний вариант наиболее радикален и функционален - в этом случае Вы контролируете все свои данные. Другой вопрос, нужна ли Вам такая степень контроля? Однако если бы это было никому не нужно, Диаспора не собрала бы финансирование в размере $200000 через площадку для краудфандинга Kickstarter.com.

Впрочем, чтобы использовать Диаспору всё же не обязательно запускать свой сервер - на официальном сайте проекта вывешен список уже запущенных узлов. Если желаете, создайте учётную запись на одном из них. В этом случае использование Диаспоры особо не отличается от того же Фейсбука, потому что Вы всё тот же клиент. Хотя Вам может греть душу хотя бы понимание того, что вся кухня проекта открыта для Вас в любой момент. И если кто и злоупотребляет Вашими данными - к примеру, продаёт их маркетинговым компаниям - то в этой сети это уж капитально вне закона.

А теперь про код. Диаспора написана на веб-фреймворке Ruby On Rails. Исходный код проекта открыт, лицензия допускает в том числе и коммерческие использование фреймворка. В целом, RoR - достаточно популярный сегодня фреймворк. На его базе функционирует ряд крупных интернет-проектов. К примеру, Twitter, Groupon, GitHub, Basecamp, Look At Me.

В основу RoR заложена архитектурная модель Model-View-Controller. С ней мы более-менее поработали в предыдущих частях нашего цикла. Также для фреймворка Ruby on Rails написано большое количество готовых модулей самого разного функционала - на местном диалекте, "гемов". Которые решают задачи от быстрого создания административной панели управления сайтом до развёртывания интернет-магазина. Всё это для того, чтобы максимально использовать уже не раз написанный программистами код вторично, третично и так далее. И не изобретать каждый раз велосипед.

Сами же "Рельсы" написаны на достаточно молодом языке Ruby. Его придумал японский программист Юкихиро Мацумото. Первая реализация появилась в 1995 году. Руби вобрал в себя черты таких языков, как Perl, Python, Lisp, С++ и некоторых других. Вот как описывает идею языка сам автор (взято из Википедии):

"Ruby родился 23 февраля 1993 года. В тот день я беседовал со своим коллегой о возможности существования объектно-ориентированного сценарного языка. Я знал Perl (Perl4, а не Perl5), но он мне не нравился — был в нём некий привкус игрушечного языка (да и поныне есть). А объектно-ориентированный интерпретируемый язык казался многообещающим. В то время я знал Python. Но он мне не нравился потому, что я не считал его настоящим объектно-ориентированным языком. Его объектно-ориентированные свойства казались надстройкой над языком. Мне, как языковому маньяку и фанату объектно-ориентированного программирования с пятнадцатилетним стажем, очень, очень хотелось, чтобы был истинно объектно-ориентированный, простой в использовании язык. Я пытался найти такой язык, но его не было. Тогда я решил его создать. Прошло несколько месяцев, прежде чем интерпретатор заработал. Я добавил в мой язык то, что мне хотелось — итераторы, обработку исключений, автоматическую сборку мусора. Затем я переорганизовал свойства Perl и реализовал их как библиотеку классов. В декабре 1995 года я опубликовал Ruby 0.95 в японских новостных группах. С тех пор появились сайты, списки рассылок. В списках рассылок идут жаркие обсуждения. Самый старый список сейчас содержит 14 789 писем."

А вот Hello World на Руби:

# hello-world.rb

puts 'Hello world'

И теперь запускаем из командной строки

$ ruby hello-world.rb

Протестировать язык очень просто через на http://tryruby.org/levels/1/challenges/0. Там же авторы сайта предлагают короткий 15 минутный курс. Кстати, обратите внимание на милый интерфейс портала. Вся вот эта красота так или иначе связан с Ruby. И в таком "нежном" стиле, принято что ли, оформлять всё, что относится к этому языку. Приятно, не так ли? А для "Рельс" есть прикольный онлайн-курс Rails For Zombies:)) http://railsforzombies.org

Но что с Диаспорой? А что с Диаспорой? Код проекта по адресу - https://github.com/diaspora/diaspora
Вики проекта - http://wiki.diaspora-project.org/wiki/Main_Page
Там, в целом, достаточно документации по основам проекта. А также инструкции по развёртыванию собственного узла Диаспоры.

В завершение статьи - и, слава администратору гипервизора, нашего нескончаемого цикла про веб-фреймворки;) - предлагаем Вашему внимание короткое интервью, которое автор записал в официальном irc-чате для разработчиков Диаспоры. Сам чат находится по адресу - http://webchat.freenode.net/?channels=diaspora-dev.

Участники чата MrZYX и flaburgan любезно согласились ответить на несколько вопросов о проекте. А также дали отличных советов, какой язык и фреймворк выбрать для своего проекта. И о "самом главном".

Интервью публикуем без перевода. Если Вы на английской не бум-бум, используйте онлайн-переводчик. Тот же translate.google.com. Итак, поехали.

Status #diaspora-devX
[Use #diaspora for installation/troubleshooting help  |  Mailing list: http://groups.google.com/group/diaspora-dev/  |  Tracker: https://github.com/diaspora/diaspora/issues | Loom.io group http://loom.io/groups/194]
[03:01] == qwertybox [[email protected]/web/freenode/ip.188.123.253.113] has joined #diaspora-dev
[03:01] <qwertybox> hello!
[03:01] <qwertybox> is there any russian speakers?
[03:01] <MrZYX> I fear not :)
[03:01] <qwertybox> anyway)
[03:02] <qwertybox> I'm writing an article about Diaspora for qwertybox.ru
[03:02] <qwertybox> it's portal about coding
[03:02] <flaburgan> great :)
[03:02] <qwertybox> I'd like to make a short interview with devs of Diaspora
[03:02] <qwertybox> is anyone competent here?^^
[03:03] == raven24 has changed nick to raven24^{off}
[03:03] <qwertybox> its about the basics of coding for Diaspora
[03:03] <qwertybox> cuz qwertybox is almost for newbies in coding now
[03:03] <qwertybox> and we have series of articles about frameworks you know
[03:03] <qwertybox> php and a little about django
[03:04] <qwertybox> and now about Ruby, RoR at the basis of Diaspora
[03:04] <MrZYX> hm, I guess you could just drop your questions into an etherpad (on pad.spored.de for example) and I'll answer what I know and also point other people to it :)
[03:04] == hive-mind [[email protected]/contempt] has joined #diaspora-dev
[03:04] <workSchub> imo, the diaspora codebase is way too complex to cover up in an "introduction" article ;)
[03:04] <qwertybox> yeah I know
[03:05] <qwertybox> but you jnow
[03:05] <MrZYX> well, yeah
[03:05] <qwertybox> its like
[03:05] <qwertybox> what you'd better study to write for Diaspora
[03:05] <qwertybox> if you'd like
[03:05] <workSchub> ah, I see
[03:05] <qwertybox> this is an example
[03:05] <qwertybox> http://qwertybox.ru/php/blog/
[03:05] <DeBot> [URL] Блог » Изучение языков программирования
[03:05] <qwertybox> of our articles
[03:05] <qwertybox> just use some of online transaltor
[03:06] <qwertybox> yeah
[03:06] <MrZYX> !ts ru
[03:06] <DeBot> The translation for ru has 852/879 keys done, with 24 untranslated and 1 to proofread.
[03:06] <DeBot>  Join the team at https://webtranslateit.com/en/projects/3020-Diaspora to further improve it!
[03:06] <qwertybox> nice bot^)
[03:06] <qwertybox> MrZYX
[03:06] <MrZYX> hm, not as bad as I thought, didn't see much activity recently ;)
[03:06] <qwertybox> what do you mean about etherpad
[03:06] <MrZYX> etherpad is a collaborative notepad in your browser that anyone can edit who has the link
[03:07] <MrZYX> a running instance is on http://pad.spored.de for example
[03:07] <DeBot> [URL] Etherpad Lite
[03:07] <qwertybox> so I made one
[03:07] <qwertybox> http://pad.spored.de/p/qwertybox
[03:07] <DeBot> [URL] Etherpad Lite
[03:07] <qwertybox> or maybe we could do it right here?
[03:07] == workSchub has changed nick to DenSchub
[03:08] <qwertybox> we have a verry little of time
[03:08] <qwertybox> )
[03:08] <MrZYX> why the hurry? :)
[03:08] <qwertybox> I have jut 5-6 questions
[03:08] <qwertybox> time is very very short resource
[03:08] <qwertybox> just need a lot to create artifical organs
[03:08] <qwertybox> you know
[03:08] <qwertybox> )
[03:09] <MrZYX> just put them there, I most certainly can answer them anyway
[03:09] <qwertybox> SO PEOPLE and other life forms
[03:09] <qwertybox> 1 questin
[03:09] == julakali [[email protected]] has quit [Quit: Leaving.]
[03:09] <qwertybox> what do you have to know to develop Diaspora? As 1-2-3
[03:10] <MrZYX> That depends on what part you want to work on
[03:10] <qwertybox> any part, just for start
[03:10] <qwertybox> newbie way
[03:10] <MrZYX> For the frontend we are in the process of converting all our javascript to Backbone.js
[03:10] <qwertybox> ok
[03:11] <qwertybox> what about the other?
[03:11] <qwertybox> you know, core
[03:11] <MrZYX> for the CSS part we're mostly on Blueprint, but I guess we're going to move to Bootstrap or something else, but that's no official decision yet
[03:11] <MrZYX> the CSS also is written in SCSS
[03:11] <qwertybox> one thing
[03:11] <qwertybox> qwertybox is almost C++ coders
[03:11] <qwertybox> you know, system level)
[03:12] <MrZYX> and some part in SASS, but we're going to convert that to SCSS
[03:12] <qwertybox> nice
[03:12] <qwertybox> what about core of the project, the general mechanics of Diaspora, decentralization and other stuff?
[03:12] <MrZYX> Our HTML is written on Handlebars.js on the frontend side and HAML on the server side
[03:13] <MrZYX> the Backend is written in Rails
[03:13] <qwertybox> ok
[03:13] <qwertybox> keep going
[03:13] <qwertybox> do you know Rails?
[03:13] <MrZYX> sure
[03:13] <qwertybox> what is the level of Rails skills for the Diaspora?
[03:13] <qwertybox> is it high or moderate?
[03:14] <MrZYX> The background queue system is Resque but we're most certainly moving to Sidekiq
[03:14] <MrZYX> well, we have quite some tricky code in their but not too much meta-programming
[03:15] <qwertybox> also do you have some exp with Django and Python in general?
[03:15] <MrZYX> a little bit
[03:15] <qwertybox> what about php?
[03:15] <MrZYX> So the decentralization part is a mixture of ROXML (which we hope to get rid of), plain ruby objects and modules mixed into the ActiveRecord models, and Typhoeus to ship it out over HTTP
[03:15] <qwertybox> could you please compare php (any framework), python (django for example) and ruby (Rails)
[03:16] <MrZYX> Nope, google that please, it's really your job as an author of such a site ;)
[03:16] <qwertybox> I know
[03:16] <qwertybox> I'd like to know your opinion
[03:16] <qwertybox> not general stuff
[03:17] <qwertybox> we've made already an overview of this at qwertybox
[03:17] <MrZYX> There's not much opinion, choose the tools you're good at and which let you solve your problem quickly
[03:18] <qwertybox> thank you!
[03:18] <MrZYX> so, the last part is the test suite
[03:18] <qwertybox> yes...
[03:19] <MrZYX> RSpec for tests, Cucumber+Capybara for integration tests and Jasmine for javascript tests
[03:19] <qwertybox> so could you please recommend how to start developing of Diaspora at Rails level - what is the most important for newcomers?
[03:20] <MrZYX> Well, we don't have that many newcomer tasks in that section currently, there's a lot of large refactoring needed that's nothing for somebody who never wrote a Rails app before
[03:21] <qwertybox> ok but if some person really wants to join dev of Diaspora with Rails, what he must know very good?
[03:22] <MrZYX> We're very welcome to anybody willing to learn, pick your small task and we give you any pointer on what you need to learn. This something you can't generalize though
[03:22] <qwertybox> thank you very much
[03:23] <qwertybox> could you please give us a referef to a very good docs about the developing of diaspora?
[03:24] <qwertybox> "The basis" you know
[03:24] <MrZYX> There are none. There's no basis.
[03:24] <flaburgan> qwertybox, you can find a lot of answers here : wiki.diaspora-project.org
[03:24] <qwertybox> why?
[03:24] == hive-mind [[email protected]/contempt] has quit [Ping timeout: 246 seconds]
[03:24] <MrZYX> Diaspora is one pretty monolithic system at the moment, we try to change that but it requires a lot of work
[03:25] <qwertybox> I understand
[03:25] <qwertybox> flaburgan thank you for the link
[03:25] <qwertybox> people I've asked all what I wanted
[03:25] <qwertybox> do you have something to say
[03:25] <qwertybox> some message
[03:26] <MrZYX> Take your time for the things you want to do.
[03:26] <MrZYX> Do not hurry.
[03:26] <qwertybox> Thank you very much!
[03:26] <DenSchub> if somebody offers you cake, remember it is a lie.
[03:26] <qwertybox> I appreciate this
[03:26] <flaburgan> DenSchub, ><
[03:26] <DenSchub> flaburgan: :)
[03:27] <qwertybox> so I'm going to post it in hour or two
[03:27] <flaburgan> The cake is a lie !
[03:27] <qwertybox> this is my email [email protected]
[03:27] <qwertybox> MrZYX would you like me to send you a link?
[03:27] <qwertybox> when it's done
[03:27] <qwertybox> ?
[03:27] <MrZYX> no, thank you
[03:28] <flaburgan> qwertybox, in english or russian ?
[03:28] <qwertybox> ok
[03:28] <qwertybox> russian
[03:28] <qwertybox> ok
[03:28] <qwertybox> see you later people
[03:28] <flaburgan> ( MrZYX do you think Sean would like to keep a link ?)
[03:29] <qwertybox> ??
[03:29] <flaburgan> qwertybox, you can go back and post your link here
[03:29] <qwertybox> ok, sure
[03:29] <MrZYX> flaburgan: dunno
[03:29] <flaburgan> we will see if we need it
[03:29] <qwertybox> and here^)
[03:29] <qwertybox> http://pad.spored.de/p/qwertybox
[03:29] <DeBot> [URL] Etherpad Lite
[03:29] <qwertybox> thank you for your time!


==

Итак, уважаемые читатели QwertyBox! Как советует MrZYX - "используйте своё время на то, что Вам хочется. Но без спешки". Всего доброго и удачи!
При копировании материала, ссылка на источник обязательна
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Avatar
спасибо за материал, ничего не знала про соцсети, уважающие личные данные пользователя))
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.