В дополнение к предоставлению авторизационного кода OAuth 2 (полный пользовательский поток токенов) Spring OAuth2Template от Spring Social также поддерживает предоставление пароля и предоставление учетных данных клиентов.
Предоставление пароля потребует, чтобы вы получили учетные данные пользователя, но вам не пришлось бы брать их через весь поток OAuth. Обычно рекомендуется, чтобы пароль предоставлялся только для собственных приложений, где поток перенаправления был бы неудобным или невозможным. Несмотря на это, Facebook (насколько мне известно) не поддерживает предоставление пароля, поэтому параметр отключен от таблицы.
Facebook поддерживает поддержку учетных данных клиента через аутентификационный центр OAuth2Template ( ). В этом случае вы торгуете учетными данными вашего приложения (предоставленными вами через Facebook) для токена доступа. Однако имейте в виду, что полученный вами токен ограничен только для запросов, не ориентированных на пользователя.
Как правило, для большинства API Facebook требуется токен пользователя ... который вы должны получить через полный поток авторизации. Это не ограничение Spring Social ... это строгое ограничение безопасности, принятое Facebook.
Запустите с некоторой небольшой задачи, если это возможно, отладьте код вокруг своей проблемы. Продвижение через код в режиме отладки является самым легким способом изучить, как что-то работает.
Я нахожу, что просто вскакивание для кодирования может быть немного подавляющим. Попытайтесь прочитать как можно больше документации относительно дизайна. Это, надо надеяться, объяснит цель и структуру каждого компонента. Его лучшее, если существующий разработчик может взять Вас через него, но это не всегда возможно.
, После того как Вы довольны структурой высокого уровня кода, попытайтесь исправить ошибку или два. это поможет Вам справиться с фактическим кодом.
Мне нравятся все ответы, в которых говорится, что необходимо использовать инструмент как Doxygen, чтобы получить диаграмму классов и сначала попытаться понять большое изображение. Я полностью соглашаюсь с этим.
Тем не менее это в основном зависит от того, как хорошо учтенный код для начала. Если это - гигантская путаница, будет трудным учиться. Если его чистое, и организованный правильно, это не должно быть это плохо.
Можно хотеть рассмотреть рассмотрение исходный код, перепроектирующий инструменты. Существует два инструмента, о которых я знаю:
, Оба инструмента предлагают подобные наборы функций, которые включают статический анализ, который производит графики отношений между модулями в программном обеспечении.
Это главным образом состоит из благопристойности типа/класса и графов вызовов. Просмотр этой информации должен дать Вам хорошее изображение того, как части кода касаются друг друга. Используя эту информацию, можно вырыть в фактический источник для частей, что Вы больше всего интересуетесь и что необходимо понять/изменить сначала.
config.autoload_paths
в направляющих, так, чтобы это могло правильно загрузить/разгрузить файлы.
– m33lky
25 April 2012 в 11:05
Запустите путем понимания 'проблемной области' (действительно ли это - система начисления заработной платы? материально-технические ресурсы? управление в режиме реального времени или безотносительно). Если Вы не понимаете жаргон, пользователи используют, Вы никогда не будете понимать код.
Затем смотрят на объектную модель; могла бы уже быть схема, или Вам, возможно, придется перепроектировать один (или вручную или использование инструмента, как предложил Doug). На данном этапе Вы могли также исследовать базу данных (если таковые имеются), если должен следовать за объектной моделью, но она не может, и это важно знать.
Взглянули на историю изменений или базу данных ошибки, если существует область, которая подходит много, изучите тот бит сначала. Это не означает, что плохо записано, но что это - бит, который все используют.
Наконец, сохраните некоторые примечания (я предпочитаю Wiki).
Во-первых, если Вы имеете в наличии членов команды, у которых есть опыт с кодом, необходимо принять меры, чтобы они сделали обзор кода с Вами. Каждый член команды должен предоставить Вам информацию об их области знаний. Обычно ценно получить несколько человек, объясняющих вещи, потому что некоторые будут лучше в объяснении, чем другие, и у некоторых будет лучшее понимание, чем другие.
Затем необходимо начать читать код некоторое время без любого давления (несколько дней или неделя, если босс обеспечит это). Это часто помогает компилировать/создавать проект самостоятельно и смочь выполнить проект в режиме отладки, таким образом, можно ступить через код. Затем начните намочить ноги, исправив небольшие ошибки и делая маленькие улучшения. Вы, надо надеяться, скоро будете готовы к проекту среднего размера, и позже, большому проекту. Продолжите полагаться на своих товарищей по команде, когда Вы идете - часто можно найти тот в особенности, кто готов воспитать Вас.
не также плохо обращаются с собой, если Вы боретесь - это нормально. Может требоваться много времени, возможно, годы, для понимания большой кодовой базы. На самом деле часто имеет место, что даже после того, как годы там являются все еще некоторыми частями кода, которые все еще немного страшны и непрозрачны. Когда Вы получаете время простоя между проектами, можно закопать к тем областям, и Вы будете часто находить, что после нескольких попыток, которые можно изобразить, выравнивают те части.
Удачи!
Я думаю, что необходимо связать это с конкретной задачей. Когда Вы имеете свободное время, пойдите для того, какой бы ни подход Вы находитесь в настроении для.
, Когда у Вас есть что-то, что должно быть сделано, дайте себе узкий фокус и сделайте его.
Работа с другим программистом, который более знаком с системой, чтобы разработать новую возможность или исправить ошибку. Это - метод, который я видел, разрабатывают лучшее.
Если это имеет модульные тесты (я держу пари, что это не делает). Начните с малого и удостоверьтесь, что модульные тесты не перестали работать. Если Вы уставитесь на всю кодовую базу сразу, то Ваши глаза потускнеют, и Вы будете чувствовать себя разбитым.
, Если нет никаких модульных тестов, необходимо сфокусироваться на функции, которую Вы хотите. Запустите приложение и посмотрите на результаты вещей, на которые должна влиять Ваша функция. Затем начните просматривать код, пытающийся выяснять, как приложение создает вещи, которые Вы хотите изменить. Наконец измените его и проверьте, что результаты выходят способ, которым Вы хотите.
Вы упомянули, что это - приложение и библиотека. Сначала измените приложение и придерживайтесь пользования библиотекой как пользователь. Затем после изучения библиотеки, которую будет легче изменить.
От вершины вниз приближаются, приложение, вероятно, имеет основной цикл или основной gui, который управляет всем действием. Стоит понять основной поток управления приложения. Стоит прочитать код, чтобы дать себе широкий обзор основного потока приложения. Если это - приложение для GUI, создавая статью, которая показывает, который там экраны и как добраться от одного экрана до другого. Если это - приложение командной строки, как обработка сделана.
Даже в компаниях весьма обычно иметь этот подход. Часто никто полностью не понимает, как работает приложение. И у людей нет времени, чтобы показать Вам вокруг. Они предпочитают конкретные вопросы об определенных вещах, таким образом, необходимо закопать и экспериментировать самостоятельно. Затем, после того как Вы получаете свой конкретный вопрос, можно попытаться изолировать источник знания для той части приложения и спросить это.
config.autoload_paths
isn' t достаточно, как когда config.threadsafe! включен, требуя классов, которые работает отлично этот путь!
– Jeremy Herrman
2 March 2013 в 06:49
Я соглашаюсь, что это зависит полностью от того, какой ученик Вы. Однако я был в двух компаниях, которые имели очень большие кодовые базы для начала. Как правило, я работаю как это:
, Если возможно, перед рассмотрением любого функционального кода, я прохожу модульные тесты, которые уже записаны. Они могут обычно выручать довольно много. Если они не доступны, то я делаю следующее.
Первый, я в основном игнорирую реализацию и смотрю только на заголовочные файлы или просто интерфейсы класса. Я пытаюсь понять то, какова цель каждого класса. Во-вторых, я иду один уровень глубоко в реализацию, запускающуюся с того, что, кажется, область большей части важности. Это трудно измерить, поэтому иногда я только запускаю наверху и прокладываю себе путь вниз в списке файлов. Я называю это изучение в ширину. После этого начального шага я обычно иду мудрый глубиной через остальную часть кода. Начальный взгляд в ширину помогает укрепиться/устранить любые идеи, которые я получил от интерфейсного уровня, и затем мудрый глубиной взгляд показывает мне шаблоны, которые использовались для реализации системы, а также различных дизайнерских идей. В глубину я подразумеваю, что Вы в основном ступаете через программу с помощью отладчика, ступая в каждую функцию, чтобы видеть, как это работает и так далее. Это, очевидно, не возможно с действительно большими системами, но 20k LOC не то, что многие. :)
Одна вещь, которую я обычно предлагаю людям, который еще не был упомянут, состоит в том, что важно стать опытным пользователем существующей кодовой базы, прежде чем можно будет быть разработчиком. Когда новые разработчики входят в наш большой проект программного обеспечения, я предлагаю, чтобы они провели время, становясь опытными пользователями прежде, чем погрузиться в попытку работать над кодом.
, Возможно, это очевидно, но я видел, что много людей пытается вскочить в код слишком быстро, потому что они стремятся начать делать успехи.
Соединение со строгим вращением.
, Если возможно, при прохождении через документации/кодовой базы, попытка использовать соединение со строгим вращением. Значение, два из Вас сидят вместе в течение установленного промежутка времени (скажите, 2-часовая сессия), затем Вы переключаете пар, один человек продолжит работать над той задачей в то время как другие перемещения к другой задаче с другим партнером.
В парах Вы оба возьмете часть знания, которое может затем питаться другим членам команды, когда вращение происходит. То, что хорошо об этом также, то, что, когда новая пара объединена, тот, который работал над задачей (в этом случае, исследуя код), может затем суммировать и объяснить понятия более понятным способом. В то время как время прогрессирует, все должны быть на подобном уровне понимания и надо надеяться избежать, "О, только John знает что бит кода" синдром.
Из того, что я могу сказать о Вашем сценарии, у Вас есть большое количество для этого (3 пары), однако, если Вы будете распределены, или не работающий к тому же масштабу времени, то это вряд ли будет возможно.
Я предложил бы выполнить Doxygen на нем для получения актуальной диаграммы классов, затем идя широко - в некоторое время. Это дает Вам недоброкачественную продукцию большое изображение, которое можно использовать, поскольку Вы встаете близкий и грязный с кодом.
Заставьте команду помещать Вас на устранение ошибки в течение двух недель (если у Вас есть две недели). Они будут рады заставить кого-то брать на себя ответственность за это, и к концу периода Вы потратите решение проблем такого большого количества времени с библиотекой, что Вы будете, вероятно, знать это вполне прилично.
Другая опция к тестам записи на функции, которыми Вы интересуетесь. Установка тестовой обвязки является хорошим способом установить, какие зависимости система имеет и где ее состояние находится. Каждый тест запускается с утверждения о способе, которым Вы думаете, что система должна работать. Если это, оказывается, прокладывает себе путь, Вы достигли чего-то, и у Вас есть некоторый рабочий пример кода для репродуцирования его. Если это не прокладывает себе путь, у Вас есть загадка для решения и строка запроса для следования.
Это довольно зависит от того, какой ученик и какой программист Вы, но:
(впереди бесстыдный маркетинг)
Вы следует проверить nWire . Это плагин Eclipse для навигации и визуализации больших кодовых баз. Многие наши клиенты используют его для привлечения новых разработчиков, распечатывая визуализации основных потоков.
У меня была похожая ситуация. Я бы сказал, что вы идете так:
Это лучше познакомит вас с системой. Помните, что попытка написать или понять модульные тесты возможна только тогда, когда вы очень хорошо знаете , что тестируется и , почему его нужно тестировать только в таким образом
А в случае большого приложения, которое не ориентировано на базы данных, я бы порекомендовал другой подход:
Для первой стратегии: Возьмите пример этого сайта stackoverflow, например. Изучите хранилище данных, что хранится, как хранится, какие представления эти элементы имеют в коде, как и где они представлены в пользовательском интерфейсе. Откуда они приходят и какая обработка происходит с ними, когда они возвращаются в хранилище данных.
Для второго Возьмите пример текстового процессора для примера. Какие компоненты есть? IO, UI, Page и т.п. Как они взаимодействуют друг с другом? Двигайтесь дальше, когда вы учитесь дальше.
Будьте расслаблены. Письменный код - это чье-то мышление, застывшая логика и стиль мышления, и для прочтения этого мнения потребуется время.
См. этот ответ о том, как использовать инструменты тестового покрытия, чтобы найти код для интересующей функции, ничего не зная о том, где находится эта функция или как она распределена по множеству модулей.
reloadData
делает tableView " forget" выбранные строки. Все же существует быстрое исправление для этого: просто перезагрузите определенные строки путем вызоваreloadRowsAtIndexPaths:withAnimation:
– Philip007 1 February 2013 в 13:04