pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Почему не работает javascript после ajax получения ответа?

Лучший ответ: Добрый день.
Может это конечно и некропост, но все же я хотел написать по поводу 2го пункта, про событие jQuery.on().
Везде написано $("div").on("click", function(){
/** что то делается **/
})
Но более точное и правильное я нашел в сети, чтобы скрипт отрабатывал именно на подгруженных ajax элементах:$('ближайший_родительский_и_статический_элемент').on('событие', 'динамически_подгруженный_елемент', function(){
    // действия, которые надо выполнить
});

Худший ответ: Хотелось бы присоединиться к вопросу. В js разбираюсь не сильно, работаю в основном с плагинами. Проблема такова: как заставить работать плагин после подгрузки контента через Ajax? Использую Magnific-Popup, который отлично работает на уже сформированном контенте, но отказывается что-либо делать на новом. Подскажите, пожалуйста, как это поправить?
Аякс самый банальный, для подгрузки новых постов:jQuery(function() {
	jQuery("p.load a").click(function(){ 
	        jQuery("p.load a").hide();		
		jQuery("#img_load").show();		
		jQuery.ajax({
			url: "wp-content/themes/scopic/ajaxloadpost.php",  
			type: "GET",						
			data: {"page": page},			
			cache: false,
			success: function(response){
				if(response == 0){
					alert("Больше нет записей");	
					jQuery("p.load").hide();
				}else{
					jQuery("#timeline").append(response);	
					page++;			
					jQuery("#img_load").hide();
					if(next!=0){
						jQuery("p.load a").show();
					}
				}
				
			}
		});
	});
});
До этого в коде инициализировался плагин:$('.entry-gallery').magnificPopup({
  delegate: 'a', // child items selector, by clicking on it popup will open
  type: 'image',
  image: { titleSrc: 'title'  },
  gallery: { 
  	enabled: true ,
	navigateByImgClick: true,
  },
  // Animation
  removalDelay: 300,
  mainClass: 'mfp-fade'  
});
Вопрос: Как избежать двойного клика?

Лучший ответ: Двойной клик обычно может происходить по следующим причинам:
1) Задан обработчик на одно и то же событие у самого элемента и у элемента-контейнера, в котором он находится. В этом случае поможет метод event.stopPropagation(), который предотвращает всплытие события.
2) Дополнительно срабатывает встроенный обработчик браузера (в частности, при клике по ссылке браузер попытается по ней перейти). Чтобы запретить браузеру делать какие-то действия по умолчанию, используйте метод event.preventDefault(). Этот метод часто используется совместно с предыдущим.
3) Пользователь слишком быстро делает подряд 2 клика. В этом случае нужно вызывать обработчик не ранее чем через определенное время после последнего срабатывания (debounce)

Худший ответ: Можно в обработчике события клика на body проверять event.target и совершать переход только если это клик не по ссылке.
Можно на ссылку повесить обрабочик события клика и запретить событию всплывать
https://learn.javascript.ru/event-bubbling
Вопрос: Как решить проблему попадания писем в СПАМ?

Лучший ответ: Начни с наведения порядка в DNS:

1.

$ host 109.95.208.165
165.208.95.109.in-addr.arpa domain name pointer www.colocat.ru

$ host www.colocat.ru
www.colocat.ru has address 109.95.208.164

2.

$ host 94.228.168.67
67.168.228.94.in-addr.arpa domain name pointer mail.colocat.ru.

$ host mail.colocat.ru
mail.colocat.ru has address 109.95.208.165

Худший ответ: PTR-запись у ip ваших почтовиков существует? Должна существовать, при возможности — совпадать с MX.
Вопрос: Какие преимущества у AngularJS vs KnockoutJS?

Лучший ответ: Да и по производительности он уступает:
Есть ещё такой тест который показывает обратное: plnkr.co/edit/leZaT043Yffz4LfG8Ykq?p=preview
Я перешел от Knockout.js к Angular.js (а потом и к Angular Light), вот некоторые минусы первого:
1) В ng есть декларативный биндинг, в ko нет (раньше не было), хотя недавно натыкался на какие-то решения.
2) Из-за того что в angular dirty check - не нужно заворачивать данные в observable, это очень удобно.
3) В ng можно без проблем оперировать с данными (большие вычисления), в ko для этого нужно достать данные из observable, провести операции, потом положить обратно.
4) Так же в ko происходит "мгновенное" обновление, что несет 2 неприятности: 1) нагрузка, возможно не нужно обновлять именно сейчас 2) иногда нужно учитывать порядок обновления данных, т.к. зависимые расчеты могут сломаться.
5) Есть ещё не маленькая неприятность, когда в большом проекте нужно сделать доработку - и нужно сделать обычную переменную как observable - заставляет рефакторить, или наоборот перевести из observable в обычную для оптимизации, этой проблемы в angular нет.
Можете так же посмотреть Angular Light, он попроще, + есть некоторые полезные фичи которых нет в Angular.js

Худший ответ: Различия в том, что KO по своей философии не годится для больших SPA приложений. Почему ? Потому что делается там всё через eval. Из этого следует большая вероятность утечек памяти. У него гораздо меньше возможностей "из коробки".
Angular работает несколько иначе. Он больше подходит для больших SPA приложений, больше возможностей из коробки, больше вероятности сделать качественное приложение. 
И всё таки гуглите больше, и найдете ответы на все вопросы :-)
Вопрос: Конструкторы и приравнивание в Си подобных языках?

Лучший ответ: К сожалению, все несколько сложнее, и вам нужно лучше разобраться, что происходит в обоих случаях.
В C++ жизненный цикл объекта, место и способ его существования определяется кодом, создающим объект. Иными словами, тот код, который ИСПОЛЬЗУЕТ класс, определяет, автоматическая ли будет создана переменная (Example a(..)), или динамическая (new Example(..)). Да, в коде класса можно ограничить использующий код, запретив использование конструктора копирования и оператора присваивания, но изначально дизайн языка подразумевает принятие решения не "создателем" класса/структуры, а её "пользователем".
В C# поведение переменной типа класса/структуры зависит прежде всего от самого класса/структуры. Экземпляры классов, т.е. reference-типов, создаются с динамическим жизненным циклом, и для них работает механизм подсчета ссылок и сборка мусора. Экземпляры структур создаются с автоматическим жизненным циклом, переменные структур хранят значения структур, а не ссылки на них.
Иными словами, выражение new T(...) - это просто унифицированный синтаксис создания экземпляра типа, независимый от природы этого типа. Удобно это или не очень - отдельный разговор, однако в текущем дизайне языка это достаточно логично (особенно в контексте generic-ов). Аналогично, T a - унифицированный синтаксис объявления переменной типа.
Нельзя слепо сравнивать то, что происходит в C# и в C++.

Худший ответ: struct Example
{
    explicit Example ( const int &i ) {}
};
И код на С++ будет эквивалентен коду на C#. Т.к. не "то же самое", а неявное приведение типа.
Вопрос: Какими технологиями вы пользуетесь для удалённой работы с коллегами и подчинёнными?

Лучший ответ: skype для звонков и чатов, google docs для обмена и общей работы с документами, гмыло для почты, планфикс для планирования работы, ну и таск от гугла для дат важных.

Худший ответ: К вышеизложенному добавлю трак — trac.edgewall.org/
Вопрос: Шаблонизатор на основе node.js с хранилищем объектов в MySQL и постобработкой на webkit?

Лучший ответ: Хотите переизобрести веб?
1. Избавьтесь от DOM, замените его компонентами, как в Delphi и в .NET. Вообще, HTML и CSS это очень плохие технологии для приложений, которые отбросили нас на два десятилетия.
2. Избавьтесь от HTTP, перейдите к RPC, это удобно для клиент-серверных приложений с установлением соединения, где взаимодействие через: вызов удаленных процедур и трансляцию событий.
3. Избавьтесь от реляционных СУБД и храните объекты без декомпозиции, строя вокруг них индексы, для быстрого поиска в коллекциях.
И да поможет Вам Аллах!

Худший ответ: Я думаю не надо городить аж такой извращённый велосипед. Плюс быстрее отдать с диска чем по вашей схеме.
Вопрос: Как получить(вернуть) значение переменной из функции в python 3?

Лучший ответ: i внутри функции и вне её - разная i.
Если сделать i = fun(0), тогда внешняя i будет равна 3.

Худший ответ: Твой последний принт выводит 5 строку, где i остается равной нулю, т.к. она не переопределяется в глобальной области видимости
Вопрос: Как сделать выпрямитель и стабилизатор напряжения?

Лучший ответ: С такой постановкой задачи - купить. Потому как импульсную технику без обширного опыта и парка измерительной техники (недешевой) собрать весьма трудно.

Худший ответ: ну на ум приходит поставить диодный мост для выпрямления и интегральный стабилизатор для постоянного напряжения но это на 3А максимум. А на 80-120А наверное проще поискать готовый.
Вопрос: Как использовать phpdoc для PHP 7?

Лучший ответ: ну зайдите на пхпдок и спросите у них или посмотрите их таймлайн или роадмап

Худший ответ: Пишут, что PHP 7 планируется только в phpDOcumentor 3 :/
Вопрос: ПО для инвертаризации софта и железа в небольшой компании

Лучший ответ: Если имеется в виду инвентаризация, то на хабре было множество топиков на эту тему, например, habrahabr.ru/blogs/sysadm/104141/ или habrahabr.ru/blogs/sysadm/111653/

Худший ответ: Я юзал для этого консольный режим эвереста, задаешь параметры и он сохраняет отчет в файле, а потом на каждом компе запускаешь его в консоли по сети.
Вопрос: Хабр только у меня поломался? Отдаёт 404

Лучший ответ: У меня так уже месяцами, в одном из пяти случаев не зайти на главную.

Худший ответ: В течение дня тоже то работал, то не работал.
Вопрос: Как увеличить скорость загрузки сайта?

Лучший ответ: У вас страница генерится аж 4.5 секунд. Что ж вы хотите? Ищите разработчика что бы тот оптимизировал. Много чего можно сделать что бы в короткие (относительно) сроки вклинить кэш... Может быть вам просто PHP надо обновить или может не установлен APC/OpCache... Может в базе индексы не расставлены (в любом случае кеширование стоит сделать).

Худший ответ: Кажись длинный wait = большой пинг.
Вопрос: Как защититься на мобильных устройствах от перевода стрелок вперед?

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

Худший ответ: А как у вас связаны таймеры с реальным временем? Не хватает подробностей для дельного (или не очень) совета.
Вопрос: Можно ли рисовать сайт в InDesign?

Лучший ответ: А зачем вы хотите программу, заточенную под полиграфическую вёрстку, использовать при построении макетов для веб? Бесспорно, у неё есть замечательная вещь — Pages, но на этом и всё.
У Adobe есть купленная её когда-то в пакете программа с такой же крутой для макетирования возможностью. Это Fireworks. Создана для веб-вёрстки, которая в ней почти идеальна. Даже поголовная работа дизайнеров с Photoshop не помеха. Есть непонимание некоторых фильтров при открытии PSD в Fireworks.
А ваш вариант экзотичен. Для макетирования сайта InDesign пойдёт, хотя для скетчей есть всевозможные Mockups, а для прототипирования  есть Visual Studio и разные там Azure.
Для обработки изображений вы всё равно будете использовать Photoshop (и правильно, ведь InDesign только для вёрстки).
Из Adobe:
Web: Fireworks + Photoshop (+ Illustrator для SVG)
Печать: InDesign + Photoshop
Видео: Premiere + AfterEffects + Photoshop

Худший ответ: Пользоваться нужно программами для того, для чего они предназначены. 
Сомневаюсь, что Вы найдёте хоть какую-то информацию. Для рисования сайтов можно использовать Фотошоп, иногда можно пользоваться ДримВивером, но я не знаю, где вообще есть необходимость в нём.
А современный дизайн дошёл до того, что рисовать почти никогда и ничего не нужно. Например, в дизайне Тостера (и Хабра) нет никаких элементов, где мог бы пригодиться графический редактор. И за этим будущее!
Вопрос: Перенос Java кода c PC на другие платформы?

Лучший ответ: 1) Какая основная платформа?
2) Какой язык разработки?
Универсально можно ответить как то так... Логика - переносится легко, главное чтобы был компилятор вашего языка для целевой платформы. Всякие взаимодействия с API платформы - либо надо сразу писать на чем то универсальном и транслируемом (Qt), либо на каждой платформе писать свое взаимодействие с API.

Худший ответ: Сдается мне невозможно малой кровью сделать переносимость с PC на Android. Слишком большая разница в UI.
Вопрос: Лента в RSS, как?

Лучший ответ: Последовательность «habrahabr -> Лента -> Посты» выводит меня на страницу с адресом habrahabr.ru/feed/posts, если скопировать этот адрес в «Subscribe» гугл ридера, он сообщает «Your search did not match any feeds.» Браузер FF14.
В итоге нашел ответ в похожем вопросе в Q&A — вручную достал ссылку фида из исходного кода страницы Ленты, говорят, бывает браузер ее не подхватывает.
В любом случае спасибо.

Худший ответ: habrahabr -> Лента -> Посты -> RSS-ленты страницы
Это будет ваша личная RSS-лента
Вопрос: Как быстро разрабатывать на Java?

Лучший ответ: Play,Spring,Spring,Vaadin,Apache Wicket.
А вообще для быстрой веб разработки лучше будет python.(Java для долговременной поддержки кода)

Худший ответ: php берет свое начало с функционального программирования, Java изначально создавалась, как объектноориентированный. Это только все различие в синтаксисе.
То, что вы используете какие-то реализации фреймворков из одного языка не означает, что такого невозможно создать в другом языке. Переведите фреймворки из одного в другой и будет счастье.
Конечно, не все так кучеряво и безоблачно. PHP скриптовый язык. Он после выполнения сессии освождает всю память. Java очень тесно интегрирован с операционной системой для управления ресурсами и такм уже нужно заботиться хотяб о расходе памяти. Самым простым различием является работа с массивами. В PHP она упрощена и утрирована. В Java помимо обычных массивов с которыми нужно обходиться не так фривольно как в PHP , сущестуют отдельный классы такие как Array, Vector, Map, List и комбинации от них. Причем каждый тип лучше использовать под определенную цель.
Так что философия Java тут не при делах.
Вопрос: Какие есть инструменты для начинающего верстальщика?

Лучший ответ: - Хороший редактор кода или IDE
- Веб сервер
- Расширения к браузеру (хотя бы линейку)
- Фотошоп
- FTP-клиент (если его нет в редакторе/IDE)
- Хороший просмотрщик графических файлов
Желательно так же иметь:
- Широкий и высокий монитор (а лучше 2)

Худший ответ: Здравствуйте!
Если хотите отказаться от cms и перейти на самописку,нужно 
под рукой иметь следующие программки.
Программки:
1.Редактор кода(он должен быть быстрым,удобным,простым,для того,чтобы 
пользоваться им быстро,не тратя время на лишнее) - мой выбор Sublime Text 2 
2.Редактор с графическим интерфейсом,где можно редактировать дизайн,
не в коде а прямо на странице,типо Dreamweawer.(необязательно)
3.etc программка №1, часто нужно подбирать цвета для вашего сайта,
бывает такая ситуация,когда видишь в браузере красивый цвет,хочешь на
сайт такой же,для того чтобы узнать # или rgb нужна программка,мой 
выбор Color Mania 3
4.etc программка №2, иногда видишь сайт с каким-то хедером(px,пиксели).
есть программы,котором помогут определить сколько px хедер и т.д(типо веб линейки)
5.etc программка №3, видишь красивый сайт в нете,понимаешь что самописка,
берешь и скачиваешь его - Http website copier
Все эти программы необязательны,нужно иметь под рукой браузер и редактор.
А все остальное уже дополнения.
Вопрос: Как сделать исключение в роутинге в rails 3

Лучший ответ: Все довольно просто, routes.rb:
match "/favicon.ico" => "tools#favicon"
match "/:url" => "main#article", as: :article, constraints: DoesntMatch.new(path:


tools_controller.rb
class ToolsController < ApplicationController
  def favicon
    data = File.open("public/favicon_test.ico", "rb").read
    send_data(data, :filename => "favicon.ico", :type => "image/png")
  end
end


Худший ответ: Проще наверное будет поднять nginx+unicorn, чем городить такие велосипеды, а жаль =)
Вопрос: Как бы сделать так, чтобы авторизация на хабре не слетала регулярно?

Лучший ответ: Это похоже на проблемы самого хабра.
Учитывая, что он судя по всему написан на php (используется куки PHPSESSID) и то, что по умолчанию сессия хранится в файле на диске, то при попадании на другой бэкенд-сервер (например при смене вашего IP при условии, что фронтенд распределяет пользователей по бэкенд-серверам на основании их IP) вы теряете сессию.
Я конечно хочу верить, что разработчики хабра сделали хранение сессий как минимум в мемкешди, но симптомы говорят не в пользу этой версии.

Худший ответ: В почту приходят ссылки с ключом авторизации. Если заходить на Хабр по такой ссылке, вы будете авторизованы.
Вопрос: Есть ли жизнь на PowerMac G5?

Лучший ответ: нет

Худший ответ: Что делать-то собираетесь? Так-то неплохая машина. Систему можно и поновее, вполне потянет.
Вопрос: Как сделать preloader на сайт, индекатор загрузки которого будет в процентах?

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

Худший ответ: Посмотрите это
Вопрос: Gmail недоступен?

Лучший ответ: Убавил MTU до 1400 и заработало.

Худший ответ: Перепрошил TPLink на openwrt backfire — всё починилось.
Правда с openwrt пришлось повозиться… по умолчанию web-интерфейса нету — надо ставить отдельно:
opkg update
opkg install luci

ПОЧЕМУ таки ошибка изначально возникла и причём тут роутер — так и не понял, везде об этом молчат :/
Вопрос: Как делать такие заголовки?

Лучший ответ: На мой взгляд самый простой вариант - через псевдоэлементы (:before :after).
Примерно вот так: codepen.io/GoooodBoy/pen/wKmBKN

Худший ответ: Варианты:
1. На background  положить картинку или две.
 1.1. Контейнер для заголовка с полоской на фоне, а заголовок перекрывает фон и имеет width:auto; и margin:auto;
2. Таблицей 3 столбца две строки, средняя rowspan-2 у левой верхней и правой верхней бордер снизу
Вопрос: Не выводится в ember model?

Лучший ответ: Пиши так:{{#each posts as |post|}}
    {{post.title}}
{{/each}}

Худший ответ: DEPRECATION: Using the context switching form of {{each}} is deprecated. Please use the keyword form (`{{#each items as |item|}}`) instead.
Как-то так :)
Вопрос: Каким образом можно заменить один кусок текста другим сразу в нескольких файлах html?

Лучший ответ: Notepad++ простой, быстрый редактор. Поиск и замена в одном или множестве файлов, как открытых, так и в указанной папке

Худший ответ: на сервере удобно использовать основы php , берем делаем папку аля "сниппеты" , туда создаем файлы text.php, kusok_koda.php и т.п 
В тех местах где нужно выводить код делаем импорт файла php 
Выходит у нас некая cms только без удобного управления.
Вопрос: Какой CSS-фреймворк используете?

Лучший ответ: Bootstrap , популярный , поэтому решил попробовать и привык

Худший ответ: Если у тебя уже есть готовый сверстанный шаблон, нужно только к нему добавить адаптивности, скачай компонент сетки из Bootstrap(greed system называется, кажется) и добавь к своим стилям.
Вопрос: Мне одному мешают &quot;Похожие посты&quot; под статьями?

Лучший ответ: Нет
В первый даже раз промелькнула мысль, что реклама какая-то, типа Sape

Неудобно. Но может это дело привычки.

Худший ответ: Спасает только Stylish/Stylebot.
Вопрос: Одновременная работа LAN и WAN через wi-fi роутер

Лучший ответ: ASUS RT-G32 B1? RaLink 3052? Ставьте wive-ng-rtnl, не пожалеете. Там это все с пол-пинка настраивается.

Худший ответ: >>А какие адреса используются во “внешней” локалке? kekoz, сегодня в 00:52
>172.25.xx.xx
>я настроил внутреннюю локалку роутера так же думая, что из этого что-нибудь выйдет.

В этом и есть твоя главная проблема.

Подключаться надо через WAN.

Теперь “на пальцах” показываю: если в твоей локалке используются те же адреса, что и во внешней (как, кстати, ты собирался разрешать конфликты ip-адресов?), то с точки зрения маршрутизатора обращения с твоих компов к компав внешней локалки не нуждаются в маршрутизации. А это значит, что пакеты рассылаются только по LAN-портам, в WAN-порт они просто не попадают. Решить задачу можно двумя способами:

1. proxy-arp. На все запросы из внешней локалки вида “Какой mac-адрес у хоста 172.25.xxx.xxx (xxx.xxx — твоей локалки)?” твой маршрутизатор на WAN-порте отвечает “Это Я!” Умеет ли это твоя железка, я не знаю, разбирайся сам.

2. ip-адреса в твоей сети должны быть из другого ip-пространства. Но это порождает следующую проблему.

Опять на пальцах показываю. Допустим, ты делаешь у себя внутри 192.168.25.0/24. С твоего хоста 192.168.25.5 ты пингуешь 172.25.25.25. Пакет попадает в твой маршрутизатор. Маршрутизатор видит, что пакет назначен в другую сеть, он его выбрасывает на WAN-порт. Там он попадает на 172.25.25.25. Тот рожает ответ на пинг. Пакет от 172.25.25.25 к 192.168.25.25. И куда он пойдёт? Откуда хосты во внешней локалке могут знать, что пакеты на 192.168.25.0/24 надо слать именно на твой маршрутизатор? А не знают они этого. И потому ответов из внешней локалки к себе ты не получишь. Здесь опять два способа решения:

1. Сделать так, чтобы внешняя локалка знала о твоей сети. Если ты не являешься администратором этой самой внешней локалки, то задача вряд ли разрешимая :) — требуется либо поднять там соответствующий статический маршрут, либо какой-то протокол маршрутизации (хотя бы RIP).

2. Пакеты из твоей сети должны выглядеть так, как будто они всё же из внешней сети. Вот это уже очень просто — это NAT. И это твой маршрутизатор стопудово умеет. Именно это ты и должен сделать.
Вопрос: Можно ли писать код в Visual Studio под Linux?

Лучший ответ: нет, не можно
забудьте всё, к чему вы привыкли в виндузях.

Худший ответ: Конечно можно. Просто не нужно юзать виндовые библиотеки. Но что-то серьезное написать будет крайне сложно.
Вопрос: Чистый js или jquery — что лучше?

Лучший ответ: Лучше не будет, т.к. придется больше писать и тестировать. 
Сфокусируйтесь на своих разработках, а не на изобретение велосипедов.

Худший ответ: Что если взять несжатый исходник jQuery и выдернуть то, что вам нужно?
Вопрос: Как правильно переключаться между программами OS X?

Лучший ответ: Странно, ⌘ + Tab работает как положено.

Худший ответ: Нашел вот такую штуку:

В новом «Леопарде» версии 10.5.2 появилась скрытая возможность изменить поведение Spaces при переключении приложений с помощью Cmd-Tab. Можно отменить переключение рабочих столов при смене активного приложения. Для этого нужно выполнить в терминале следующую команду:

defaults write com.apple.Dock workspaces-auto-swoosh -bool NO

После этого перезагрузите Dock с помощью killall Dock.

У этого метода есть одна особенность. Если вы привязали программу к определённому рабочему столу, и пытаетесь в неё переключиться находясь на другом рабочем столе, вы её не увидите. Например, Safari привязана к первому столу в то время, как вы находитесь на втором. Вы нажимаете Cmd-Tab, переключаетесь в Safri и нажимаете Cmd-N для того, чтобы создать новое окно. Окна на втором рабочем столе вы не увидите. Но оно создастся на первом. В принципе, это выглядит достаточно логично, но иногда сильно сбивает с толку. Имейте в виду.

Только не понятно как с этим жить, и как исправить.
Вопрос: Как научиться программировать на Swift?

Лучший ответ: В iTunes есть бесплатный курс Стэнфордского университета: «Developing iOS 8 Apps with Swift» https://itunes.apple.com/ru/course/developing-ios-...
Курс на английском, но есть субтитры и язык довольно прост.  Для начала подойдёт.

Худший ответ: https://www.youtube.com/user/AlexSkutarenko/videos
но лично я,не советую учить с 0 swift/obj-c
Вопрос: А где вы храните цифровые фото?

Лучший ответ: А почему бы нескольким фотографам не объединиться и для начали синькать фотки между собой, в идеале, купить совместно место в облаке?
Чем не вариант?

Худший ответ: На 2-х винтах дома в двух экземплярах + иногда синкаю с НАСом на работе + Яндекс.Фотки (там место неограничено)