Разработка веб-сайтов

Содержание

Рассказ о том, как я ворую номера кредиток и пароли у посетителей ваших сайтов

Перевод


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

Взлом с помощью Юникода (на примере GitHub)

Юникод исключительно сложен. Мало кто знает все хитрости: от невидимых символов и контрольных знаков до суррогатных пар и комбинированных эмодзи (когда при сложении двух знаков получается третий). Стандарт включает 216 кодовых позиций в 17-ти плоскостях. По сути, изучение Юникода можно сравнить с изучением отдельного языка программирования. Неудивительно, что веб-разработчики упускают из вида некоторые нюансы. С другой стороны, злоумышленники могут использовать особенности Юникода в своих целях, что и делают. Специалист по безопасности Джон Грейси продемонстрировал на примере GitHub баг проверки адреса электронной почты для восстановления забытого пароля. Подобные баги можно встретить и на других сайтах.

Django under microscope

Если по докладу Артёма Малышева (proofit404) будут снимать фильм, то режиссером выступит Квентин Тарантино — один фильм про Django он уже снял, снимет и второй. Все подробности из жизни внутренних механизмов Django от первого байта HTTP-запроса до последнего байта ответа. Феерия работы парсер-форм, остросюжетная компиляция SQL, спецэффекты реализации шаблонизатора для HTML. Кем и как управляется connection pool? Всё это в хронологическом порядке обработки WSGI-объектов. На всех экранах страны — расшифровка «Django under microscope».О спикере: Артём Малышев — основатель проекта Dry Python и Core-разработчик Django Channels версии 1.0. Пишет на Python 5 лет, помогал организовывать митапы «Rannts» по Python в Нижнем Новгороде. Артём может быть знаком вам под ником PROOFIT404. Презентация к докладу хранится здесь.

Аутентификация в .NET Core gRpc с помощью JWT

В этой статье я расскажу об особенностях аутентификации API в gRpc сервисах с помощью JWT. Я предполагаю, что вы знакомы с JWT и заголовками HTTP, с их использованием в .NET Core WebAPI, поэтому не буду обсуждать эти детали. Когда я пытался реализовать аутентификацию в gRpc, я столкнулся с тем, что большинство примеров написаны с использованием консольных приложений. Это слишком далеко от реальности, в которой, на мой взгляд, живут разработчики. Например, я не хочу создавать канал каждый раз, когда я хочу вызвать метод сервиса. Еще я не хочу заботиться об отправке токена и пользовательской информации с каждым запросом. Вместо этого я хочу иметь инфраструктурный уровень, который будет заботиться обо всём этом за меня. Если эта тема вам интересна, то под катом будет больше. Все примеры в статье справедливы для .NET Core 3.1.

Скрам умер. Да здравствует канбан

Перевод

Я пользовался методом управления проектами Scrum (скрам) с самого начала карьеры. Я изучал скрам в колледже. Тогда он считался лучшим методом управления разработкой программного обеспечения. Когда я начал работать, мне нравилось всё, что имеет отношение к скраму: ежедневные встречи, планирование, ретроспективные совещания, спринты и так далее. В конце концов, я пользовался на практике тем, чему меня учили. Но через несколько лет я начал кое-что замечать: в последние дни спринта все бросаются доделывать всё то, чем занимались в предыдущие две недели, стремясь избежать переноса задач на будущее

Часто те, кто так поступали, брали на себя ненужный риск. Почему? Разве какие-то задачи не могут подождать до следующей недели? Так ли важно доделать абсолютно всё до выходных? Нет, не так уж это и важно. А всё это происходит из-за того, что «Переносы задач — это плохо».

Вёрстка страниц

Вне зависимости от того, что вы выберете: фронтенд или бэкенд, вам придётся взаимодействовать с веб-страницами. Для этого надо изучить HTML и CSS.

HTML

Это язык гипертекстовой разметки. Отвечает за структуру и содержание страницы. Он состоит из тегов, а тег состоит из имени, заключённого между знаками «меньше» и «больше». Например: , и .

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

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

Веб-стандарты HTML описаны в спецификациях. Это главный источник знаний и для браузеров, и для разработчиков

Важно следить за их обновлениями

CSS

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

Тег отвечает за формирование текстового абзаца. Допустим, нам нужно чтобы все на странице получили одинаковые свойства. Для этого надо подключить к странице стили. Пока они не подключены никакого эффекта от них не будет. Стили можно встроить внутри HTML-кода страницы (инлайново) или подключить их как внешний файл. Чаще всего стили подключают из внешнего файла с расширением . Так разметка отделяется от стилизации, снижается вероятность ошибки, внешний файл кешируется и не загружается повторно. Для подключения из внешнего файла используется тег .

Знание основ HTML и CSS позволит создавать простые сайты с текстовым наполнением. Если хотите что-то посложнее, не обойтись без языков программирования.

Учебный курс по React, часть 22: седьмой этап работы над TODO-приложением, загрузка данных из внешних источников

  • Перевод
  • Tutorial

В сегодняшней части перевода учебного курса по React мы завершим работу над Todo-приложением и поговорим о том, как, пользуясь внутренними механизмами компонентов и стандартными возможностями JavaScript, загружать данные из внешних источников. → Часть 1: обзор курса, причины популярности React, ReactDOM и JSX → Часть 2: функциональные компоненты → Часть 3: файлы компонентов, структура проектов → Часть 4: родительские и дочерние компоненты → Часть 5: начало работы над TODO-приложением, основы стилизации → Часть 6: о некоторых особенностях курса, JSX и JavaScript → Часть 7: встроенные стили → Часть 8: продолжение работы над TODO-приложением, знакомство со свойствами компонентов → Часть 9: свойства компонентов → Часть 10: практикум по работе со свойствами компонентов и стилизации → Часть 11: динамическое формирование разметки и метод массивов map → Часть 12: практикум, третий этап работы над TODO-приложением → Часть 13: компоненты, основанные на классах → Часть 14: практикум по компонентам, основанным на классах, состояние компонентов → Часть 15: практикумы по работе с состоянием компонентов → Часть 16: четвёртый этап работы над TODO-приложением, обработка событий → Часть 17: пятый этап работы над TODO-приложением, модификация состояния компонентов → Часть 18: шестой этап работы над TODO-приложением → Часть 19: методы жизненного цикла компонентов → Часть 20: первое занятие по условному рендерингу → Часть 21: второе занятие и практикум по условному рендерингу → Часть 22: седьмой этап работы над TODO-приложением, загрузка данных из внешних источников → Часть 23: первое занятие по работе с формами → Часть 24: второе занятие по работе с формами → Часть 25: практикум по работе с формами → Часть 26: архитектура приложений, паттерн Container/Component → Часть 27: курсовой проект

Какие возможности предоставляет Spring для кастомизации своего поведения

Всем привет. На связи Владислав Родин. В настоящее время я являюсь руководителем курса «Архитектор высоких нагрузок» в OTUS, а также преподаю на курсах, посвященных архитектуре ПО.

Введение

С точки зрения читателя код приложения, использующего Spring, выглядит достаточно просто: объявляются некоторые bean’ы, классы размечаются аннотациями, а дальше bean’ы inject’ятся куда нужно, все прекрасно работает. Но у пытливого читателя возникает вопрос: «А как это работает? Что происходит?». В этой статье мы попытаемся ответить на данный вопрос, но только не ради удовлетворения праздного любопытства. Spring framework известен тем, что он является достаточно гибким и предоставляет возможности для настройки поведения framework’а. Также Spring «изобилует» рядом достаточно интересных правил на применение некоторых аннотаций (например, Transactional). Для того, чтобы понять смысл этих правил, уметь их выводить, а также понимать что и как можно настраивать в Spring’е, необходимо понять несколько принципов работы того, что находится у Spring’а под капотом. Как известно, знание нескольких принципов освобождает от знания множества фактов. Я предлагаю ознакомиться с этими принципами ниже, если вы их, конечно, еще не знаете.

Открытый код борьбы с коррупцией (и не только)

update (10.06.2014): Алексей опубликовал отчет ФБК за 2013й год, сослался на этот пост и обещал доделать систему в 2014м. И это круто. Хабр — сила.

Введение

Я должен был написать этот пост примерно год назад. В конце 2012го года, будучи директором Фонда Борьбы с Коррупцией, я, в числе других сотрудников фонда, организовывал второй фандрайзинг на РосПил, где мы сделали ряд обещаний касающихся разработки информационной системы Фонда, за которые давно следовало отчитаться. РосПил — это первый действительно успешный общественный проект в России, логотип которого, кстати, придумал анонимный пользователь Хабра, а сайт на руби также бесплатно сделал Павел Сенько. Суть проекта — проведение формальных юридических расследований подозрительных закупок с zakupki.gov.ru путем обращения в госорганы и придания гласности результатам. Одна из идей которую я активно продвигал в Фонде — большая прозрачность и автоматизация работы юристов. Хотелось отказаться от использования гуглдоков для публикации документов, вместо этого загружая их в специальную систему, где будет отслеживаться связь запросов и ответов на них, а также принадлежность документов одному «делу». Таким образом, не получится забыть ни о каких делах, всегда будет видно, что всё доведено до конца и не брошено. Появится место, где можно в удобном и доступном виде посмотреть на деятельность всего Фонда и каждого юриста в исторической перспективе. Именно поэтому в просьбу денег (рабочая ссылка на полную презентацию, см. слайд 25) было включено создание такой информационной системы. А также обещание раскрыть ее для других юристов и организаций. Фандрайзинг был успешен, собрали более десяти миллионов рублей и такую систему ФБК действительно разрабатывал под моим руководством в качестве директора фонда и менеджера продукта. Порядка миллиона рублей на это было потрачено и я чувствую себя обязанным официально поделиться сделаным на общественные (ваши) деньги. Весь код и дизайны лицензированы по открытой лицензии Creative Commons (Attribution-NonCommercial-ShareAlike 4.0 International), что отражено в договорах с Фондом подписанных Алексеем. Вот такой у меня есть тизер о том что получилось, чтобы вам стало интересно почитать дальше. Ниже опубликован исходный код, все дизайны, описаны основные сущности и планы развития системы. И, конечно, благодарности авторам.

Скрам умер. Да здравствует канбан


Перевод

Я пользовался методом управления проектами Scrum (скрам) с самого начала карьеры. Я изучал скрам в колледже. Тогда он считался лучшим методом управления разработкой программного обеспечения. Когда я начал работать, мне нравилось всё, что имеет отношение к скраму: ежедневные встречи, планирование, ретроспективные совещания, спринты и так далее. В конце концов, я пользовался на практике тем, чему меня учили. Но через несколько лет я начал кое-что замечать: в последние дни спринта все бросаются доделывать всё то, чем занимались в предыдущие две недели, стремясь избежать переноса задач на будущее

Часто те, кто так поступали, брали на себя ненужный риск. Почему? Разве какие-то задачи не могут подождать до следующей недели? Так ли важно доделать абсолютно всё до выходных? Нет, не так уж это и важно. А всё это происходит из-за того, что «Переносы задач — это плохо».

Большой гайд по A/B-тестированию

  • Перевод
  • Tutorial

В интернете масса информации об A/B-тестированиях, но многие до сих пор проводят их неправильно. Ошибиться действительно легко, поэтому подобные исследования требуют серьезной предварительной подготовки. В этой статье рассматриваются основные аспекты A/B-тестирования, которые необходимо учитывать для эффективного анализа веб-страниц.

Что такое A/B-тестирование?

A/B тестирование (сплит-тестирование) разделяет трафик в соотношении 50/50 между разными версиями страницы. По сути, этот метод — новое название для старой техники, известной как «контролируемый эксперимент». Для проверки эффективности новых лекарств специалисты проводят сплит-тесты. Фактически, большинство исследовательских экспериментов можно назвать A/B-тестированием. Они включают в себя гипотезу, основной объект исследования, его вариацию и результат, представленный в виде статистических данных. Вот и все. В качестве примера можно привести простое A/B-тестирование, при котором трафик в соотношении 50/50 делится между основной страницей и ее вариацией:

Aсинхронный PHP

Десять лет назад у нас был классический LAMP-стек: Linux, Apache, MySQL, и PHP, который работал в медленном режиме mod_php

Мир менялся, а с ним и важность скорости. Появился PHP-FPM, который позволил значительно увеличить производительность решений на PHP, а не срочно переписывать на чем-то побыстрее. Параллельно велась разработка библиотеки ReactPHP с применением концепции Event Loop для обработки сигналов от ОС и представления результатов для асинхронных операций

Развитие идеи ReactPHP — AMPHP. Эта библиотека использует тот же Event Loop, но поддерживает корутины, в отличие от ReactPHP. Они позволяют писать асинхронный код, который выглядит как синхронный. Возможно, это самый актуальный фреймворк для разработки асинхронных приложений на PHP. Но скорости требуется всё больше и больше, инструментов уже не хватает, поэтому идея асинхронного программирования в PHP — одна из возможностей ускорить обработку запросов и лучше утилизировать ресурсы. Об этом и поговорит Антон Шабовта (zloyusr) — разработчик в компании Onliner. Опыт больше 10 лет: начинал с десктопных приложений на С/С++, а потом перешел в веб-разработку на PHP. «Домашние» проекты пишет на C# и Python 3, а в PHP экспериментирует с DDD, CQRS, Event Sourcing, Async Multitasking.

Что к чему?

Одна из самых распространенных ошибок у новичков — изучение всего и сразу. Самым лучшим решением будет начать изучение с одного направления. Как правило, изучив хотя бы один язык, следующие даются намного легче и быстрее. Условно все языки можно разделить на языки с высоким порогом входа и с низким. Очевидно, что изучение языка с низким порогам быстрее, но в процессе обучения вы можете столкнуться с потерей интереса. Занимайтесь изучением тех языков, которые действительно нравятся, а не тех что легче даются.

Для начала стоит определиться с целями изучения. Каждый язык, превалирует в той или иной области. Например, если вы решили заниматься бэкендом, то для этого больше подойдут такие языки как PHP, Python, Go. Если ваши предпочтения ближе к фронтовой части, то думаю, здесь лучше подойдут JS для клиентской и Web части, а также Swift и Java для разработки мобильных приложений. Если же, вы всегда мечтали написать игру которая возглавит все топовые рейтинги, то вам следует с головой погрузиться в C# / C++ и подобные им языки.

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

Чек-лист вёрстки. Что можно отдавать клиенту, а что надо переделывать

Вы PM. Как узнать – готова ли вёрстка к реальному использованию? Вы заказчик. Как убедиться, что работа выполнена качественно? Как оценить качество вёрстки? Когда я стал тим-лидом, а позже PM, передо мной стала задача проверять вёрстку наших проектов

Нужно было выработать формальные, легкопроверяемые критерии, соответствие кода которым, должно было давать некую гарантию, что не будет факапов и ни клиент, ни программеры не сказажут потом “WTF?”. Клиенту неважно насколько красив ваш код, но ему важен результат. Качественный код нужен фирме, т.к

он надёжней и в будущем его будет легче поддерживать.Требования должны были быть такие, что соблюсти их легче, создавая качественную вёрстку, а не говнокод. Я составлял такой чек-лист в течении полутора лет. За последние полгода в него не добавилось ничего. Значит самое главное учтено. Итак что же это за список?Краткая версия теперь доступна на html5checklist.com (github), где можно вносить pull-request’ы.История обновлений:

2015/08/11: Актуализировал рекомендации по оптимизации скорости загрузки. Добавил требование поддержки Retina. Дополнил «19. Мелочи» требованием что изображения должны масштабироваться в зависимости от размера окна.

2015/08/10: актуализирован список исключений для CSSLint

2015/07/29: актуализирован пункт №13 «плохо»/«хорошо»

2015/04/08: добавлено требование использования препроцессоров и рекомендация использования систем сборки

2013/04/25: добавлены анализаторами качества кода: CSSLint и JSHint, указан сайт подбора css font stack (спасибо @fliptheweb), мелкие уточнения (работу интерактивных элементов страницы, что не пропадает фон на высоких разрешениях, не должно быть пустых презентационных блоков, при проверках контента — пробовать удалять заголовки, менять местами блоки)

2013/04/24: добавил пункт об минимизации каскада (БЭМ-техники, MCSS, SMACSS), необходимости вписывания в экран моб

устройства, заменил ссылку на проверочный текст отображения стандартного html на код с normalize.css, поправил пример где в рекомендации встречался длинный каскад, упомянул про Opera на Presto и новый уровень семантики — в именах классов BEM.

2012/04/12: отсортировал пункты проверки в порядке важности, выделил главные, дополнил статью подробностями


2011/12/07: дополнил согласно доклада на WSD Минск’2011.

2011/07/19: добавлено про повышение надёжности вёрстки благодаря html5-тэгам, про необходимость favicon/apple-touch-icon, отсутствие багов при ресайзе textarea

2011/06/15: добавил пояснения какие ошибки валидации допустимы, рассказал про отсутствие официальной кнопки «HTML5 Valid» и про официальное лого HTML5 на сайте.

Генерирование изображений-заглушек

Сегодня мне кинули ссылку на прикольный сервис для быстрого генерирования изображений-заглушек. Может пригодиться для html-верстки. На мой взгляд, это удобно тем, кто и так использует заглушки — экономит время при вёрстке, т.к. сами заглушки уже готовы. Можно цвета/размеры подбирать, меняя только числа/буквы в коде, не отвлекаясь на сам файл картинки — и сразу видеть эффект. И сами размеры видеть написанными, если нужно, чтоб к коду не возвращаться для проверки. Или вместо размеров можно текст добавить, чтоб всегда знать, для чего эта заглушка (типа «Бан(н)ер» или там «Лого», или «Фотография»). На сервисе не нужна регистрация — и вообще на сайт можно не заходить, чтобы его использовать. Пишете сразу у себя в коде, например: и получаете:Update. Благодаря усилиям k0rv1n, найден вариант этого сервиса, только лучше 🙂 Во-первых, там поддерживается кириллица. Во-вторых, там даны ссылки на исходники для разных языков. Автор dummyimage.com — тот же Russell Heimlich, что и у placehold.it. У placehold.it есть ещё один автор, но будем считать, что он делал дизайн (дизайн там правда круче, но видимо как раз из-за понтового шрифта Unicode и не выходил). Примеры (см. под хабракатом) я поменял с placehold.it на dummyimage.com, раз уж он функциональнее…

Confluence для публичной базы знаний: меняем дизайн и настраиваем разделение по языкам

У нас есть шесть продуктов, которые используют в России и за рубежом. Это значит, что документация к ним должна быть в одном месте, но разделена по продуктам и языкам. Раньше мы использовали MediaWiki, но со временем она устарела. От платформы мы ожидали так же хорошую вёрстку статей, гибкий поиск и внутренний редактор текстов. В качестве альтернативы выбрали Confluence. В процессе стало ясно, что возможностей этой платформы из коробки тоже недостаточно для всех наших задач. Пришлось докупить плагин Scroll Viewport и потратить некоторое время на его настройку. Вы можете посмотреть, что в итоге получилось, а я расскажу, как меняла дизайн, настраивала разделение по языкам, внутренний поиск и индексацию.

Чем занимается веб-разработчик

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

Профессия больше всего подойдёт людям, которые интересуются информатикой и информационными технологиями, а также языками программирования. Специалист по веб-разработке должен разбираться в HTML, JAVA, JAVAScript, РНР, CGI, и Perl, он должен иметь достаточный опыт работы с такими инструментами веб-программирования, как Dreamweaver, Flash и ColdFusion.

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

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

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

Особенности специальности

В основную деятельность веб-программиста входит:

  • ознакомление с техническим заданием и задачами заказчика;
  • написание кода, необходимого для корректного функционирования веб-ресурсов;
  • обслуживание веб-ресурсов, систем управления, их переработка;
  • решение рабочих вопросов, связанных со всеми перечисленными выше процессами.

Взаимодействие сайта в браузере и локально запущенной программы

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

Картинка отсюда

Первыми приходят в голову три способа решить эту задачу:

  1. Обойтись средствами браузеров, или написать плагины к ним
  2. Организовать обмен данными через backend, выступающий в роли посредника
  3. Добавить в программу HTTP-сервис, и обращаться к ней напрямую из браузера

Третий пункт выглядит хорошо, позволяет убрать авторизацию в программе, не требует вообще никакого пользовательского интерфейса. Попробуем его реализовать, написав программу на C# под .NET Framework 4. Так как речь пойдет о .NET, решение будет только для Windows (XP и новее). Веб-приложение сделаем на angular.

Yate: Яндекс.Почта перешла на новый шаблонизатор

Некоторое время назад мы писали, что в Яндекс.Почте появился новый интерфейс, в котором используется шаблонизация данных в браузере. Немногие крупные сервисы отваживались на это, но мы и сейчас считаем такое решение наиболее удачным. Оно не только ускорило работу интерфейса, но и позволяет экономить трафик пользователя и эффективнее расходовать процессорное время серверов. Тогда в качестве шаблонизатора мы использовали XSL, а данные передавали в формате XML. Переведя проект на новый интерфейс, мы начали искать другие способы ускорения работы интерфейса Яндекс.Почты. Недавно мы перевели всю Почту на JS-шаблонизатор и JSON-данные.

Контур.Кампус: приглашаем в бесплатный студенческий лагерь промышленной разработки под Питером

Кампус — это студенческий лагерь для начинающих программистов, где знаниями делятся разработчики Контура. Пять дней мы будем учиться писать чистый код, тестировать и проектировать. А вечерами пить чай с печеньем, играть в настольные игры и работать в команде таких же умных ребят, как ты! На Кампусе ты получишь опыт промышленной разработки и найдешь новых друзей, с которыми отлично проведешь время 🙂

15 апреля Кампус отправляется в гости в Северную столицу! Если ты из Ленинградской, Псковской, Новгородской областей или Карелии, мы ждем тебя!

А еще Кампус — это возможность прийти на стажировку и остаться работать в Контуре.

Для тебя бесплатно, проезд и проживание берем на себя. Отбор по тестовому, подробности на сайте kontur.ru/kampus.

Будем рады, если расскажете о Кампусе друзьям из Питера и ближайших регионов 🙂

Выбираем направление

Фронтенд

Это то, что пользователь видит и с чем взаимодействует на странице. Дизайн, визуальные элементы, схемы — вся лицевая сторона. Задачи фронтендера — сделать сайт, который будет решать задачи владельца, одинаково корректно работать на всех устройствах, независимо от браузера и размера экрана и при этом будет удобен пользователю. Основные инструменты: , и . Подойдёт тем, кто педантично относится к деталям и хочет сразу видеть результат своей работы.

Бэкенд

Невидимая часть сайта. Бэкенд-разработчик отвечает за то, что скрыто от глаз пользователя и работает на сервере. Например: создаёт базы данных и программы, которые будут записывать информацию в базу; шифрует пароли и ценную информацию; настраивает доступы и систему резервного копирования данных; пишет программы, обрабатывающие информацию, невидимую пользователю.

Языков программирования для бэкенда несколько: , Ruby, Python или Node.js. Для бэкенд-разработки нужны системы управления базами данных: MySQL, PostgreSQL, SQLite или MongoDB.

Подойдёт для тех, кому интересна работа с данными и решение архитектурных задач.

Google Drive как хранилище для веб-приложения

Tutorial

Предисловие

Мое веб-приложение хранит данные в . Это было удобно, пока не захотелось, чтобы пользователь, заходя на сайт с разных устройств, видел одно и то же. То есть, понадобилось удаленное хранилище. Но приложение «хостится» на GitHub Pages и не имеет серверной части. Я решил не делать сервер, а данные хранить у третьей стороны. Это дает существенные преимущества:

  1. Не нужно платить за сервер, не болит голова о его стабильности и доступности.
  2. Меньше кода, меньше ошибок.
  3. Пользователю не нужно регистрироваться в моем приложении (это многих раздражает).
  4. Приватность выше, и пользователь знает, что его данные хранятся в месте, которому он, скорее всего, доверяет больше, чем мне.

Сначала выбор пал на remoteStorage.js. Они предлагают открытый протокол обмена данными, достаточно приятное API, возможность интеграции с Google Drive и Dropbox, а также свои сервера. Но этот путь оказался тупиковым (почему — отдельная история). В итоге решил использовать Google Drive напрямую, и Google API Client Library (далее GAPI) как библиотеку для доступа к нему. К сожалению, документация Google разочаровывает, а библиотека GAPI выглядит недоработанной, к тому же имеет несколько версий, и не всегда понятно, о какой из них идет речь. Поэтому решение моих задач пришлось собирать по кусочкам из документации, вопросов и ответов на StackOverflow и случайных постов в интернете. Надеюсь, данная статья сэкономит вам время, если вы решите использовать Google Drive в вашем приложении.


С этим читают