• В чем моя причина провала тестового задания Яндекса?

    mudrick
    @mudrick
    Máximo progreso hemos alcanzado en minimo seso.
    Жесть. Посмотрел гифку на Гитхабе, там, где весь процесс наглядно показан, код даже не смотрел.

    Ну вот смотрите, ясно же, что информация о маршрутах, вот все эти текстики, типа, «Из Стокгольма на пароме до Риги, каюта 6a…», это всё должно генерироваться из данных, а не ручками в textarea писать :)

    Вам нужно было образно придумать, что за АПИ вы будете использовать и какие данные от него приходят — из этих данных создавать все записи и весь путь.

    Из {откуда} на {транспорт} до {докуда}, {тип_места: каюта, сиденье, место и т.п. в зависимости от типа транспорта} {номер_места} и прочие данные… — и еще для всего этого нужна локализация (не только же на русском тексты будут), и еще всё это нужно просклонять, если уж вообще перфекционистски делать — согласитесь, «Из Стокгольм до Рига…» звучит ужасно.

    А у вас просто всё это пишется в текстовом поле — тогда уж вообще нужно одно текстовое поле вместо всей вашей формы и кнопочек, и там оператор напишет кучу текста сам, с кучей ошибок, несистемно :)

    Вот сейчас возьмите всё, что вы сделали, и представьте, что номер рейса изменился, или номер сиденья изменился (вас поменяли с кем-то, и у вас изменилось место и у другого человека) — как вы это обрабатывать будете? Заходить в каждый маршрут и ручками править текст в textarea?

    А насчет данных и сортировки, элементарно — данные самые обычные, обычный жисончик, массив из объектов. Сортировка по левому и правому ключу, nested sets, чтобы можно было создавать маршруты любой глубины, например, не просто Рига → Стокгольм, а между ними маршруты по Риге и маршруты по Стокгольму... ну, как дерево, можно раскрыть один маршрут, а там подмаршруты.
    Ответ написан
    1 комментарий
  • Как эффективно изучать angular js?

    SternMore
    @SternMore
    Работаю над GrabDuck.com
    Не знаю на счет эффективного способа, могу поделиться своим.

    Когда мы мигрировали наш проект GrabDuck на angularjs с js+jquery, стоял такой же вопрос - как быстро понять что такое angular и начать его использовать. Совет N1, который все дают - "читаем доки" нам не подошел. Очень трудно понять какие-то детали, не понимая что такое angular в целом. Инфы очень много и в голове от всего каша. Наверное можно так выучить и даже стать реальным профессионалом, но быстро сделать это точно не получится. Вообщем метод хорош для любителей академических подходов.

    Что делали мы:
    1. пройти пару туториалов, лучше видео - получается быстрее. (как пример Egghead.io - AngularJS)
    2. начать что-то делать самому, лучше уже реальное, обращаясь к туториалам из #1, за подсказками. Тут уже вы готовы начать посматривать в сторону официальной доки
    3. Через какое-то время, вы почувствуете себя комфортно делать что-то на уровне пройденных туториалов, без использования их как подсказки. Тут уже без чтения доков, для прояснения каких-то вопросов, не обойтись. будет много рефакторинга вашего предыдущего кода, потому что к этому моменту у вас появится свое чувство стиля и вы увидите как все неправильно было сделано изначально. )
    4. Последний пункт наступает примерно через несколько месяцев работы. Внезапно вы обнаруживаете, что ваше angular приложение работает чертовски медленно и нужно с этим что-то делать. Читайте статьи о том как оптимизировать (как пример, который нашел на GrabDuck - 11 Tips to Improve AngularJS Performance). тут уж вам, хочется того или нет, прийдется понять как работает angular изнутри и стать настоящим профи в этом фреймворке.

    Надеюсь информация была полезна. :-)
    Ответ написан
    Комментировать
  • Как эффективно изучать angular js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) продолжаем учить "ванильный JS", паралельно почитывая про babel, es2015 и т.д.
    2) когда мы ищем информацию в интернетах - учитываем что сейчас актуальная версия ангуляра - 1.5, второй ангуляр в бете, так что 90% информации устарело. Я даже больше скажу - даже официальная документация устарела, обновленный вариант сможете найти на github проекта в пул реквестах.
    3) https://github.com/gdi2290/ngExam - рекомендую этот список тем того, что вам надо знать про ангуляр (ну и не только).
    4) https://github.com/AngularClass/NG6-todomvc-starter - тут я попытался собрать полезные статьи на тему что надо учить и как + пример маленького современного приложения. Так же в ишусах к NG6-starter обсуждается как лучше его готовить.
    5) https://habrahabr.ru/post/277087/ - про angular 1.5 и то как я готовлю ангуляр.

    Ну и так же не стоит пренебрежительно относиться ко всяким реактам и эмберам - идеология у всех приблизительно схожа, все крутые чуваки юзают компонентный подход (потому что это удобно и логично для проектирования интерфейсов), у всех примерно одинаковое виденье по поводу data-flow в приложениях и т.д. Так что с ними ознакомиться тоже можно, у реакта чуть больше расписано про компоненты например.

    Ну и да - обязательно прочитать документацию к ангуляру. Возможно не всю сразу но базовые понятия что бы раскрыть. И разобраться с тем что значит "декларативное представление".
    Ответ написан
    4 комментария
  • Как реализовать ajax запрос в mvc?

    modestguy
    @modestguy
    full-stack web developer
    По сути AJAX-запрос ничем не отличается от обычного запроса. Т.е. вам также надо добавить метод в контроллере (экшн), который будет обрабатывать ajax-запросы. Как правило в нём выполняется проверка, что запрос является именно ajax-запросом. Ну и возвращаемые данные как правило идут в JSON или другом формате - более приемлемом для обработки на клиентской стороне (javascript).
    Ответ написан
    Комментировать
  • Как урезать свой перфекционизм?

    Запомните для этих случаев одну великую фразу "Ладно это я потом переделаю когда время появится" :)))
    Ответ написан
    7 комментариев
  • Как урезать свой перфекционизм?

    isqua
    @isqua
    Научу HTML, CSS, JS, BEM и Git
    Чтобы перестать делать лучше то, что ещё не сделано до конца, нужно понять одну простую истину: Запущенный проект лучше, чем не запущенный.

    Давайте потренируемся:
    • Что лучше: запущенный проект с несжатыми стилями или незапущенный со сжатыми?
    • Что лучше: не запущенный проект с десятью страницами или запущенный с тремя?
    • Что лучше: запущенный проект c jQuery или не запущенный без jQuery?


    Надеюсь, вы смогли выбрать! Как узнать, что пора запустить проект? (Под запуском я имею в виду «показать людям». Например, если вы решили написать библиотеку, давайте считать «проект запущенным», если вы выложили её на гитхаб) Нужно прикинуть, сколько времени вам надо на разработку и умножить на два. Если получилось больше двух недель, то стоит разбить проект на части и прикинуть так про каждую часть. Соответственно, ставите дедлайны.

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

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

    Удачи!
    Ответ написан
    4 комментария
  • Приложения на React с использованием redux?

    art1z
    @art1z
    Программист-многостаночник в EffectiveSoft
    Вот учебник отличный, все расписано по шагам:
    teropa.info/blog/2015/09/10/full-stack-redux-tutor...
    +комплект полезных ссылок: https://github.com/xgrommx/awesome-redux
    Ответ написан
    Комментировать
  • Где найти стажировку для javascript разработчика удаленно?

    @FoxInSox
    Стажеры удаленно не нужны. Их сложно контролировать, им долго ставить задачи. В офисе все эти проблемы решаются.

    Тут от очень подробно про удаленную работу: shipilev.net/stuff/remote-work.png
    Ответ написан
    7 комментариев
  • Попросили проверить код, на что смотреть нужно?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смотря зачем)). Я когда делаю Code Review критерии следующие:

    * Безопасность:
    - Каждый аргумент метода простого типа должен проверяться на тип в случае его проксирования и на граничные значения в случае обработки. Чуть что не так - бросается исключение. Если метод с кучкой аргументов на 80% состоит из поверки из аргументов - это вполне норм))
    - Никаких trigger_error, только исключения.
    - Исключения ДОЛЖНЫ быть человеко-понятны, всякие "Something went wrong" можно отдавать пользователю, но в лог должно попасть исключение со стектрейсом и человеко-понятным описанием, что же там пошло не так.
    - Каждый аргумент (объект) метода должен быть с тайпхинтингом на этот его класс, или интерфейс.
    - За eval как правило шлю на **й.
    - @ допускается только в безвыходных ситуациях, например проверка json_last_error.
    - Перед работой с БД - обязательная проверка данных.
    - Никаких == и !=. Со swtich - единственное исключение, по ситуации.
    - Если метод возвращает не только bool, а еще что-то - жесткая проверка с ===, или !== обязательна.
    - Никаких условий с присваиваниями внутри. while($row = ...) - тоже идет лесом.
    - Магические геттеры/сеттеры разрешаются только в безвыходных ситуациях, в остальном - запрещены.
    - Конкатенации в sql - только в безвыходных ситуациях.
    - Параметры в sql - ТОЛЬКО через плейсхолдеры.
    - Никаких глобальных переменных.
    - Даты в виде строки разрешаются только в шаблонах и в БД, в пхп коде сразу преобразуется в \DateTimeImmutable (в безвыходных ситуациях разрешено \DateTime)
    - Конечно зависит от проекта, но как приавло должно быть всего две точки входа: index.php для web и console(или как-то по другому назваться) - для консоли.

    * Кодстайл PSR-2 + PSR-5 как минимум, + еще куча более жестких требований (для начала все то что в PSR помечено как SHOULD - становится MUST)
    - В PhpStorm ни одна строчка не должна подсвечиваться (исключением является typo ошибки, например словарик не знает какой-то из аббревиатур, принятых в вашем проекте). При этом разрешается использовать /** @noinspection *** */ для безвыходных ситуаций.
    - Если кто-то говорит, что пишет в другом редакторе и у него не подсвечивается, на эти отговорки кладется ВОТ ТАКЕЕЕНЫЙ мужской половой **й и отправляется на доработку)).

    * Организация кода:
    - Никаких глобальных функций.
    - Классы без неймспейса разрешаются только в исключительно безвыходных ситуациях.

    * Тестируемость (в смысле простота тестирования) кода должна быть высокая.
    - Покрытие кода обязательно для всех возможных кейсов использования каждого публичного метода с моками зависимостей.

    * Принципы MVC:
    - Никаких обработок пользовательского ввода в моделях, от слова совсем.
    - Никаких ***ть запросов в БД из шаблонов.
    - Никаких верстки/js/css/sql-ин в контроллерах.
    - В моделях НИКАКОЙ МАГИИ, только приватные свойства + геттеры с сеттерами.
    - В моделях разрешено использовать метод save(при наличии такого разумеется) только в исключительных ситуациях. Во всех остальных - либо insert, либо update.

    * Принципы SOLD:
    - Никаких божественных объектов умеющих во все.
    - Если метод для внутреннего пользования - private, никаких public.
    - Статические методы разрешаются только в случае безвыходности.

    * Принцип DRY разрешено нарушать в случаях:
    - Явного разделения обязанностей
    - В тестах (каждый тест должен быть независимым, на сколько это возможно)

    * Работа с БД:
    - Запрос в цикле должен быть РЕАЛЬНО обоснован.
    - За ORDER BY RAND() - шлю на***й.
    - Поиск не по ключам (конечно если таблица НЕ на 5 строк) запрещен.
    - Поиск без LIMIT (опять же если таблица НЕ на 5 строк) запрещен.
    - SELECT * - запрещен.
    - Денормализация БД должна быть обоснована.
    - MyISAM не используется (так уж)) )
    - Множественные операции обязательно в транзакции, с откатом если чо пошло не так.
    - БД не должна содержать бизнес логики, только данные в целостном виде.
    - Не должно быть нецелесообразного дерганья БД там, где без этого можно обойтись.

    * Кэш должен очищаться по двум условиям (не по одному из, а именно по двум):
    - Время.
    - Протухание по бизнес логике.
    Разрешается по только времени в безвыходных ситуациях, но тогда время - короткий период.
    - При расчете ключей кэша должна использоваться переменная из конфигурации приложения (на случай обновлений кэш сбрасывается кодом, а не флашем кэш-сервера). В случае использования множества серверов - это очень удобный и гибкий инструмент при диплое.

    * О людях:
    - "Я привык писать так и буду дальше" - не вопрос, ревью пройдешь только когда поменяешь свое мнение.
    - "Я пишу в vim-е и мне так удобно" - здорово, код консолью я тоже в нем пишу)) но есть требования к коду, если в них не сможешь - не пройдешь ревью.
    - "Я скопировал этот страшный метод и поменял 2 строчки" - это конечно замечательно, но по блейму автор всего этого метода ты, так что давай без говняшек, хорошо?
    - "Оно же работает!" - вот эта фраза переводится примерно так: "да, я понимаю, что пишу полную хрень, но не могу писать нормально потому, что руки из жо", я правильно тебя понял?))
    - "У меня все работает!" - рад за тебя, а как на счет продакшна?
    - "Там все просто" - не используй слово "просто", от слова "совсем". Вот тебе кусок кода (первого попавшегося с сложной бизнес логикой), где там ошибка (не важно есть она, или нет)? Ты смотришь его уже 2 минуты, в чем проблема, там же все "просто"))

    * Всякое:
    ActiveRecord (это я вам как в прошлом фанат Yii говорю) - полное говно, примите за исходную. По факту у вас бесконтрольно по проекту гуляют модельки с подключением к БД. Не раз натыкался на то, что в тех же шаблонах вызывают save, или update (за такое надо сжигать).
    То, что используется Laravel - это печально((. Что бы выполнить требования приведенные выше, приходится "воевать" с фреймворком.

    Это далеко не полный список требований, очень много зависит от проекта в целом и от принципов, заложенных в нем. Для больших мредж реквестов 200 комментариев к коду - это ок. Дерзайте.

    UPD

    Формализировал данные критерии по ссылочке: https://github.com/index0h/php-conventions
    Ответ написан
    55 комментариев
  • Трансляция аудиопотока с ПК на смартфон?

    lVlOzART
    @lVlOzART
    Т.е. комп в одной комнате, а Вы с монитором и телефоном в другой, и вы хотите управлять звуком на компе->HDMI->телевизоре с помощью телефона? Если так то либо чините вай фай на мобилке, либо ходите с длиннющим АУКСом по комнате, либо купите телефон с вайфаем (сейчас на 4.4 андроиде со всеми плюшками, удовлетворяющими Вашим требованиям, можно взять за 3-4 тыс) и в зависимости от операционки если хотите управлять аудиотекой на Винде то Foobar с Remote plugin`ом либо если nix`овые - Clementine - очень удобная вещь, сможете управлять и скачивать плейлисты и музыку с компа нажатием одной кнопки. BlueTooth мне кажется плохой вариант.
    Ответ написан
    7 комментариев
  • Локальный сервер для верстки с возможностью заходить с разных устройств?

    AMar4enko
    @AMar4enko
    и может быть разбежка с поведением на сервере,
    - неправильно.
    Если не хотите потратить лучшие годы впустую - посмотрите на современные тенденции в автоматизации фронтенд-разработки. Гуглите grunt и gulp (я рекомендую второе).
    Ответ написан
    3 комментария
  • На каких сайтах можно найти интересные штуки на JQuery/CSS3?

    @arudmin
    Клевый www.unheap.com
    Ответ написан
    Комментировать
  • Удобный компилятор LESS-файла в CSS код?

    YaPravda
    @YaPravda
    У вас не определены переменные @gridColumnWidth, @gridGutterWidth
    естественно сетка построена на переменных, и если нет входных данных — строить нечего.
    вам просто надо было их определить в шапке лесса, на пример так:
    @gridColumnWidth: 60px; @gridGutterWidth: 20px;
    Ответ написан
    Комментировать