Pull to refresh
0
0

Пользователь

Send message
Лови. Тут здоровый кусок с расшифровкой.
Таблица Рабкина
image
Может быть, вам и многим другим непонятно из-за того, что нигде не объясняют самой сути: чтто Observable, по сути, является Iterable, вывернутым наизнанку относительно управления потоком данных: Iterable — это модель pull (сами просим данные), а Observable — push (данные летят в нас).

Мне кажется, после этого видео Эрика Мейера, создателя Rx, не должно остаться вопросов:
https://www.youtube.com/watch?v=sTSQlYX5DU0
Развиваю на работе проект на Angular, а также создал и развиваю проект на Ember. Также есть опыт Backbone.

Разница между Angular и Ember — просто небо и земля, в пользу Ember.

***

У Angular очень низкий порог вхождения, но очень высокая сложность использования. Сложность в том смысле, что крайне сложно сделать по-настоящему качественно. Выбрав Angular, вы наступите на все возможные грабли, подложите себе множество мин замедленного действия. Рефакторинг для вас будет как ремонт в советской квартире — процесс постоянный и мучительный. Нужно пройти огромный (полагаю, многолетний) путь, чтобы достичь такого уровня владения Angular, который позволит написать приложение с действительно качественной кодовой базой с первого раза.

Angular очень низкоуровневый. В нём всё делается на коленке. Радоваться такому подходу могут только те, кто никогда не пробовал добротный высокоуровневый фрэймворк и кому не приходилось поддерживать проекты, писаные несколькими сменами говнокодеров. На самом деле это полная жопа. Чтобы писать качественный, читаемый и поддерживаемый код на Angular, надо иметь строжайшие гайдлайны и соблюдать их. На деле же всё пишется как быстрее, ведь Angular так легко позволяет срезать углы.

Сообщество Angular — это как сообщество PHP. И то, и другое — это губки, которые впитывают всех дилетантов и бесталанных разработчиков. Подчеркиваю, что я не утверждаю, что толковых и талантливых разработчиков там нет. Есть, конечно, но их процентное соотношение — самое низкое среди всех фрэймворков/языков.

Angular — это не MVC-фрэймворк. Они долгое время позиционировали себя как «MV*», потом они убрали эту аббревиатуру с сайта. Ржака в том, что в Angular нет ни View, ни Model, по сути, Angular — это голый контроллер. Вместо слоя модели можно использовать что-то свое, например, JSData, полностью слизанный с Ember Data. Но в 99% поделок на Angular модель как отдельная сущность отсутствует, данные хранятся, как бы это сказать, в ладошке. Со слоем представления всё печально, так как в Angular его нет, но и взять свой нельзя. Вместо вьюх Angular использует DOM нагорячую. То есть Angular берет существующий DOM, проходится по нему и модифицирует на лету. Вам приходится вставлять Angular-разметку прямо в HTML, и вся эта разметка попадает в браузер. HTML-код Angular-приложения в инспекторе браузера выглядит закиданным яйцами и туалетной бумагой, и у подавляющего большинства Angular-приложений HTML-код невалиден.

Логика в HTML! Это просто цирк какой-то. В принципе, Angular не обязывает вас выносить логику в HTML, но вы не найдете ни одного приложения на Angular, которое этим не грешит.

Angular трудно тестировать. Angular заявляет, что написан для удобного тестирования, но на практике вы столкнетесь с трудностями и значительную часть кода оставите непокрытой тестами.

Документация Angular — это что-то с чем-то. В разделе Services приводятся примеры использования `.factory` и нет `.service`, а примеры использования `.service` приводятся на странице Providers. Оглавлений у простыней страниц нет, найти что-то сложно. Если не верите на слово, попробуйте в официальной документации найти, какие аргументы принимает колбэк `link` у директивы (подсказка: все страницы с упоминанием `link` или `directive` в заголовках можете пропускать, там не найдете).

Я уже не говорю про проблемы с производительностью Angular. Это просто курам насмех. 2000 binding'ов — и canvas-анимации начинают подтормаживать. Становится видно, как Angular скрипит шестеренками даже когда пользователь ничего не делает. Чтобы снизить количество binding'ов, приходится прибегать к методам работы, применяемым в Backbone. Это крайне досадный шаг назад.

***

Ember — полная противоположность Angular. Освоить его сложно. Мне потребовалось два месяца, чтобы почувствовать себя в нем комфортно. Но с этого момента пользоваться им стало очень и очень просто, удивительно удобно и продуктивно.

Прежде всего скажу, что Ember очень гибок. Его «предвзятость» ни в чем вас не ограничивает. Не верьте тем, кто говорит, что Ember вас ограничивает в написании вашего приложения (так пишут только те, кто перепробовал фрэймворки для галочки, не задержавшись в каждом дольше чем на день). Всё, буквально всё в Ember расширяется и переопределяется. Более того, фрэймворк изначально построен с расчетом на то, что вы будете его расширять и переопределять.

«Жесткость» Ember проявляется только в структуре вашего проекта. Стандартизованная структура, благодаря подходу «договоренностей вместо конфигурирования» (convention over configuration), избавляет вас от необходимости писать обслуживающий код. Изначально, Ember использует дефолтные сущности для всего, что ему требуется (вьюхи там, контроллеры, шаблоны, маршруты...). Стоит вам сохранить кастомную сущность под соответствующим именем, как Ember начинает использовать ее вместо дефолтной. Таким образом, вы пишете только бизнес-логику: описываете суть вещей, без «воды». Из всего, что я писал на JS, код на Ember получается самым компактным и наиболее экспрессивным. По мере развития вашего проекта его структура не превращается в помойку. Структура, кстати, не такая уж и жесткая: можно группировать файлы по типу сущности (models/user.js, components/user.js), а можно по названию сущности (user/model.js, user/controller.js), выбирать вам.

Ember — это полноценный MVC-фрэймворк. В числе прочего, у него самый лучший в мире роутер и на редкость грамонтный слой модели.

В Ember используется свой сборщик (на основе Broccoli, это конкурент Gulp) и готовая структура проекта. Они очень качественные, очень богаты функционально и очень активно развиваются. Но самое главное, сборщик и структура проекта — стандартны. Все проекты построены на одних и тех же конвенциях, никто не изобретает убогие велосипеды с костылями.

Ember побуждает грамотно структурировать код. В Ember нужно постараться, чтобы напортачить — в отличие от Angular, где приходится постоянно тужиться, чтобы НЕ напортачить. После короткого вводного курса по Ember новобранец способен писать приличный, читаемый и поддерживаемый код.

В Ember из коробки идет поддержка ES6, можно сразу писать современный код. BabelJS обеспечивает обратную совместимость (до IE8 включительно). Используются чистые, лаконичные ES6-модули, которые, пока браузеры не обзаведутся их поддержкой, транспилируются в AMD.

В Ember очень удобная система аддонов. Аддоны можно писать как для самого Ember, так и для сборщика. Аддоны распространяются через npm, который по ряду критериев практичнее Bower'а. Например, npm позволяет лочить версии зависимостей при помощи lock-файла (shrinkwrap), хотя до практичности Ruby Bundler им обоим как до луны.

В Ember очень удобная система классов. Оставаясь интуитивно понятной для JS-кодеров, она обладает многими преимуществами более благородных языков. Классы можно расширять динамически (причем, как инстансы, так и классы), из переопределяющего метода можно вызывать переопределяемый. Есть mixin'ы. В общем-то, значительная часть функционала вынесена в mixin'ы, плюс идет процесс рефакторинга: всё больше базового функционала Ember выносится из встроенных классов в mixin'ы, облегчая переиспользование кода. Например, для типового формирования URL'а раньше надо было require'ить сериализатор, что увеличивает связность приложения, а это не очень хорошо (tight coupling). А теперь можно в любую сущность подключить mixin с методом формироавния URL'а.

Шаблонизатор Handlebars — это просто благословение, особенно после Angular'овского засирания DOM. Возможности шаблонизатора намеренно ограничены (как в Django), чтобы не допустить вынос логики во вьюхи. Движок шаблонизации в Ember активно развивается, недавно он вышел на качественно новый уровень, позаимствовав некоторые приемы из React. Вот тут React прикрутили в качестве view layer в Ember, и можно сравнить скорость рендеринга сложной вьюхи между React и чистым Ember: github.com/ghempton/ember-react На глаз, разница примерно двукратная: где-то 0.2 и 0.4 секунды. А со следующим развития шагом Ember догонит и, возможно даже, перегонит React, см. github.com/emberjs/ember.js/pull/10501. К слову, в инспекторе браузера HTML-код Ember-приложения выглядит почти полностью чистым (добавляются айдишники), и он валиден. А для любителей indendation based синтаксиса есть целых два препроцессора: один с синтаксисом по примеру Jade/Slim, другой по примеру Haml.

Вычисляемые свойства Ember позволяют писать реактивный код. За пару месяцев использования Ember в вашей голове происходит смена парадигмы с императивной на декларативную. Это очень круто и удобно. При том же объеме функионала, код становится короче и яснее. Кроме того, вычисляемые свойства ленивы: они не вычисляются до тех пор, пока не будут запрошены, а результат вычисления запоминается. Повторное вычисление происходит только при изменении свойств, от значений которых зависит значение данного вычисляемого свойства.

И никакого dirty checking, Ember использует observer'ы. Благодаря этому data binding не сказывается на производительности приложения и работают интуитивно понятно. Когда вы меняете значение свойства, Ember синхронно уведомляет все заинтересованные сущности об изменении. «Под капотом» цепочки вычислений группируются в так называемые run loops, в результате обновление DOM происходит пакетно в конце цепочки, а не на каждом шаге.

В Ember очень активное и дружелюбное сообщество. Не находясь в когтях корпорации, Ember развивается в открытую. Все планы обсуждаются сначала в RFC'ах, потом в pull-request'ах. Главные мэйнтейнеры раз в N недель слетаются на встречу, чтобы обсудить проблемы развития в реале. Все мэйнтейнеры Ember — сотрудники различных «продуктовых» компаний, использующих Ember в продакшене.

Ember развивается по принципу «стабильность без стагнации». «Стабильность» здесь означает отсутствие такой жопы, как в Angular, где новая мажорная версия фрэймворка оказывается заведомо несовместимой с предыдущей. «Без стагнации» означает отсутствие такой жопы, как в Node, где развитие проекта заморожено в угоду поддержке корпоративных клиентов и вопреки нуждам сообщества. На практике этот подход означает, что, во-первых, новые фичи вводятся по мере готовности, не откладывая до мажорного релиза. Во-вторых, breaking changes вводятся с длительным deprecation period, давая пользователям возможность без нервотрепки поддерживать кодовую базу в актуальном состоянии. Релиз мажорной версии будет означать по сути просто отключение поддержки ранее deprecate'нутых фич.

В последнее время Ember рекомендует подход, аналогичный React: data up, actions down с использованием односторонних data binding'ов. Это делает структуру приложения более плоской и упрощает отладку. Однако вы можете использовать двусторонние data binding'и там, где считаете уместным (например, для input'ов). Я свое первое приложение построил целиком на двусторонних, и структура приложения получилась очень простой (всё обновляется и пробрасывается само, не надо ничего делать руками), при этом я не столкнулся с проблемами ни в производительности, ни в отладке.

В Ember самый функциональный и удобный инструмент отладки в инспекторе браузера. Angular Batarang стыдливо прячется за спинами.

Ember очень легко тестировать. Полная инфраструктура тестирования идет из коробки: всё преднастроено и готово к использованию. Сборщик создает заготовки тестов для каждой сущности, которую вы используете. Покрыть юнит-тестами можно абсолютно любую сущность, будь то модель, маршрут или даже какой-нибудь initializer. 100%-ное покрытие риальне! Очень легко писать приемочные (acceptance aka integration) тесты благодаря удобным хелперам, позволяющим работать с асинхронными операциями в синхронном стиле. В комплекте идет QUnit, но есть аддон, добавляющий поддержку Mocha, хотя благодаря хелперам особой нужды в Mocha нет. Также есть аддон для Chai. Статус тестов можно смотреть не только в консоли, но и в браузере во время работы dev-сервера. В процессе разработки приложение на Ember компилируется инкрементально, благодаря чему ждать перезапуска тестов приходится не дольше пары секунд. В комплекте идет конфиг для Travis: публичный проект на Github можно бесплатно тестировать на CI-сервере.

Документация у Ember достаточно хорошая. Есть замечательный официальный Guide, способный заменить книгу. Доки по API пишутся прямо в исходниках соответствующих компонентов при помощи специальным образом сформированных комментариев. Благодаря этому документация для каждой версии Ember формируется автоматически и никогда не устаревает.

На builtwithember.io можете посмотреть примеры свободных и проприетарных приложений, выполненных на Ember. Там можно найти всё: разнообразные админкии, дэшборды, чаты, инструменты визуализации и анализа данных, CMS, CRM, соцсети, форумы, таск-менеджеры, трейдинговые площадки, средства рассылок, continuous integration, базы знаний, поисковики, платежные системы… Короче говоря, всё, что можно придумать. Из крупных проектов: Vine (100 млн уников в месяц), ZenDesk (их бэкенд обрабатывает 100 тысяч запросов в минуту), TravisCI, DockYard, Twitch (100 тысяч просмотров в минуту в пиковое время; был куплен Amazon'ом за миллиард долларов).

***

Backbone — это несерьезно. Это просто удобная обертка над jQuery и Underscore. Data-binding'ов нет, MVC нет и много чего нет. Чтобы сделать single-page applicaiton на Backbone, вам придется писать бескрайние простыни обслуживающего кода. Это очень утомительно (для программиста) и дорого (для работодателя). Сложность поддержки Backbone-приложения растет экспоненциально по отношению к размеру кодовой базы.

PS С удовольствием отвечу на вопросы по Ember. Общие вопросы задавайте здесь в комментах, конкретные вопросы по коду пишите на StackOverflow (с примером на JSBin.com) и кидайте ссылку в личку.
Вот «Империя наносит ответный удар» в 480 разных стилях.

На вскидку:

— Нормальная консоль с autocompleate. Удобство работы.
— Огромное количество типов данных на все случаи жизни и функций для манипуляций с ними. Например, можно проверить входит ли ip-адрес в сеть. Или, например, очень удобно работать с гео-данными.
— Быстрая настройка и перенастройка репликации вообще без гемороя и без локов мастер-базы.
— Тёплая перезагрузка (без сброса кэшей на диск!) — с версии 9.4
— Надёжность хранилища из коробки, без глубокого тюнинга
— Полнотекстовый поиск на нормальном движке (относительно myisam)
— Более высокий порог вхождения для админов: подкрутил несколько всем известных крутилок в базе, несколько в ОС — и имеем базу, которая выдерживает 4K writes/s с объемом данных 350ГБ на SSD и не падает просто так. У меня есть сервера, которые буквально годами не перезагружались и просто работают.
— Высокое качество кода. Я имел неприятность копаться в коде mysql — это ужас какой-то. У Постгри новый резил можно смело ставить в продакшн.

Это только что вспомнил.
Я могу быть субъективным. Но просто попробуйте.
Вот список от меня:

— Наш омнибокс называется Умной строкой не просто так: полноценно понимает русскую раскладку, подсказывает адреса впервые посещаемых сайтов, умеет отвечать на простые вопросы сразу в подсказках и прочее. Подробное сравнение с Chromium.

— Поиск по странице работает с поддержкой морфологии русского языка (подробнее).

— Наш переводчик умеет переводить не только всю страницу целиком, но и выделенные слова и фразы.

— Поддержка установки расширений не только из Chrome Web Store, но и из Opera Addons (поддержка формата nex).

— Турбо 2.0, которое умеет сжимать не только текст/картинки, но и потоковое видео.

— В отличие от Chromium умеет открывать для просмотра (причем локально) не только pdf, но и doc, docx, ppt, pptx, rtf, psd. Знаком с видео flv. Умеет открывать для чтения электронные книги ePub и fb2 (при этом запоминает страницу).

— Поддержка жестов.

— Наш Safe Browsing, который в отличие от того, что в Chromium, блокирует смс-мошенников. Добавлю к этому, что мы не просто блокируем красной заглушкой вредоносные сайты, но и по возможности даем ссылку на безопасную копию страницы.

— Быстрый звонок: кликаем по номеру телефона на десктопе, телефон предлагает сразу позвонить по нему.

— Проверка орфографии работает через наш словарь, у которого словарный запас больше и с морфологией языка получше.

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

— Ленивая загрузка вкладок: при перезапуске с большим количеством вкладок загружаем не более 10, причем последовательно. Все остальные — по клику.

— Если страница загружается в фоне (в том числе при перезапуске), то блокируем автоматическое воспроизведение видео и flash-контента. Например, перезапустите браузера с 20 роликами с YouTube. В Chromium они начнут воспроизводиться все и сразу. Мы — только активную вкладку.

— Умеет присылать уведомления о новых сообщениях во ВКонтакте и Facebook.

— Клик по вкладке возвращает к началу страницы. Второй клик возвращает обратно. Не стоит недооценивать эту фишку.

— «Антисусанин» (внутри эту штуку так называем). Работает, когда загрузка страницы привела к ошибке. Если пользователь ошибся в адресе, то подсказываем корректный. Если сама страница недоступна, то даем возможность открыть сохраненную копию.

Вполне допускаю, что мог забыть о многом.

P.S. Пожалуй, сохраню этот комментарий, чтобы в следующий раз просто скопировать.
Хорошая тема, полезная. Внесу и свои пять копеек.

Мне лично не понравилась ни стандартная Dark тема, ни те предустановленные, что шли с Visual Studio 2012 Color Theme Editor. Встроенная «Dark» была более близка к идеалу из всех. Не устраивал только слишком сильный контраст. Вот что получилось после изменений:



Архив с этой темой можно скачать здесь.

В архиве также можно найти цветовую схему редактора (как на скриншоте) и некоторые полезные расширения:

1) FunbitDark Theme (v2).reg — файл реестра для добавления новой темы для VS2012 (появится в списке в Options).
2) FunbitDark Editor Theme.vssettings — файл настроек VS2012 с цветовой схемой редактора (как на скриншоте)
3) EnhancedScrollbar2012.vsix — пока официальная версия в разработке, удалось поправить старую версию Enhanced Scrollbar из Productivity Power Tools так, чтобы она заработала в VS2012 (для тех, кто не в курсе — данное расширение заменяет Scrollbar на Minimap, как в Sublime Text). Очень серьезно увеличивает продуктивность работы, особенно при работе с JS.
4) VS2012NoFileExpandInSolutionExplorer.reg — файл реестра, отключающий разворачивание файлов для просмотра классов внутри в Solution Explorer, так как в ReSharper'е есть свой отличный диалог «File Structure».
В офисе ~15 человек, так что всё может быть гораздо менее формально =)

• Каждую пятницу обед за счёт фирмы, ресторан/кафе для заказа еды выбирается дежурным по офису на этой неделе
• Почти каждый день после 5 вечера — пиво за счёт компании
• Раз в неделю (или после сдачи проекта) после 6 вечера — текила/коньяк/самогон, иногда всё вперемешку
• За час до обеда — совместный поход в тренажёрку или пробежка по улицам
• По воскресеньям — заплыв в 6 утра в озере и полумарафонная пробежка после
• Пару раз в год — ЛАН-пати: все вместе гоняем в CoD до 4 утра. Особо ответственные притаскивают из дома свои четырёхъядерные десктопы и 7-канальные наушники с усилитилем и блоком питания
• Шахматы, фузбол — по желанию
• По вторникам — баскетбол после работы
• Фэнтэзи-футбол/баскетбол/хоккей, проигравшие делают что-то оговорённое зарание (например, признаются в фанатстве Биберу на Фейсбуке)
• Картинг — раз в год, всей командой
• Пикник — раз в год, всей командой + половинки
• Пару досок в офисе оставлены под имиджборды (только рисовать самому надо, прикрепить картинку нельзя)
• Все друг другу раздают пять сверху, когда приходят на работу и когда уходят
• Музыка в офисе иногда ставится тематически — например, лучшее из 80-х или 90-х
• Темы для обсуждения за обедом — самые разнообразные: от проектов и клиентов до лучших способах самоубийства и почему не стоит давать милостыни бомжам
www.youtube.com/watch?v=w8rrFzA5kYs

И да, мы работаем =)
Я по этому ману учился githowto.com/ru/ — рекомендую.
UFO landed and left these words here
Он не совсем бесплатный. Эта версия по прошествии определенного времени попросит купить полную версию.
Вот и наступило светлое завтра, отписываюсь, как обещал.
Конечно, я имел в виду лишь самые основные ошибки, которые являются общими для русскоязычных студентов.
И еще маленькая ремарка: нижеследующие рекомендации справедливы в рамках классического южноанглийского произношения (т.н. Queen's English, оно же Received Pronunciation). Для постановки какого-нибудь новозеландского акцента они вряд ли пригодны.

Что делать нужно:
1. Аспирируйте глухие согласные (p, t, k), то есть произносите их с придыханием. Оно более выражено, когда за согласной следует длинная гласная или дифтонг (например в словах court, power) и менее выражено перед короткой гласной (cut). Никогда не аспирируются sp, st, sk (step – как в слове «Сталин»).
2. Четко разделяйте звуки [e] и [æ], например в таких словарных парах, как pet-pat, men-man и т.д. Первый звук примерно соответствует звуку «е» в слове «Ленин», чтобы правильно произнести второй — откройте рот, как будто хотите сказать «а», но скажите «э».
3. Горло должно быть активным, а не расслабленным, как в русском. Большинство гласных (как, например, в словах cat, bought, сheese, car) в английском произносятся существенно более «глубоко», чем в русском, при активной работе мышц горла. Возьмите себя за горло и произнесите звук «ы» — примерно вот так и должна работать гортань.
4. Длинные гласные необходимо делать ДЕЙСТВИТЕЛЬНО длинными – примерно в два раза длиннее коротких. Потренируйтесь на таких словарных парах, как sin — seen, slip — sleep, lip — leap и т.д.
5. Губы должны занимать нейтральную позицию – слегка растянуты, так, что вы можете видеть в зеркале и верхние и нижние зубы.

Чего делать не следует:
6. Смягчать согласные (t, d, n, s, z и особенно l) перед гласными (i, i:, e).
Наверное, это самая типичная ошибка русскоязычных студентов. Чтобы избежать смягчения согласных, кончик языка должен располагаться на альвеолярных бугорках, непосредственно за верхними зубами. В качестве стандарта звука «л» — скажите слово «лобстер».
7. «Оглушать» звонкие согласные на концах слов (например, God). В русском языке мы произносим «зуб» как «зуп» и частенько переносим эту привычку в английский.
Для четкого разделения звонких и глухих согласных звонкие согласные на концах слов нужно как бы «проглатывать» (т.е. нужно «выключить» голос до размыкания позиции, в которой произносится согласная), а глухие согласные нужно выраженно аспирировать. Потренируйтесь на словарных парах nod — not, log — lock, rag — rack, leave — leaf и т.д.
8. Округлять, напрягать губы или вытягивать их в трубочку. В английском не существует таких положений губ, как в словах «морс» или «губка». В таких словах, как bull, mood, ball, bore верхняя губа совершенно пассивна, а нижняя лишь слегка округлена.

Пока все, что пришло в голову после пролистывания институтской тетрадки по фонетике. Если кто-нибудь может добавить — вэлкам! ;)
Пользуясь случаем, рекламирую мой юзер-скрипт, который преобразует код, подсвеченный в Source Code Highloghter, в HTML, который нормально отображается в скайпе.

Теперь, если писать кому-то отрывки кода в скайпе, то его будет намного удобнее читать.

userscripts.org/scripts/review/114459

Тестировалось в Хроме.
Просто делайте чёртову работу. День за днём, раз за разом. Займитесь каким-то видом спорта, в котором результат нельзя увидеть через месяц-два. Например, та же тренажёрка. Походите в неё два месяца, потом ещё один. Посмотрите, сколько месяцев подряд вы сможете проходить, не пропуская занятий. Займитесь игрой на гитаре или другом инструменте, и занимайтесь регулярно.

Знаете, что такое дисциплина? Дисциплина — это умение делать дела не тогда, когда их приятно делать, а тогда когда их надо делать — и повторение этого раз за разом.

Я знаю, многие из вас ищут волшебной таблетки — я и сам такой. Именно поэтому вы прочитали «тысячи книг по мотивации». Мы подсознательно ждём, пока к нам в руки попадёт та книга, в которой будет то волшебное откровение, узнав которое мы изменимся навсегда. Но будьте реалистами и оглянитесь на свою жизнь — вам хоть однажды попадалась такая книга? Уверен, ни разу. Потому что изменения в жизни редко приходят в виде откровений. Не ждите откровения, не ждите волшебного совета.

Just do the f*cking job. Consistently.

Information

Rating
Does not participate
Registered
Activity