Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Где искать инвестиции на свой IT-проект на стадии прототипа с готовой бизнес-моделью?

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

Худший ответ:
Так у будущих пользователей и возьмите.
1. Если проект реально нужный людям, то они будут платить за функционал. Прикручивайте оплату и получайте платежи.
2. Если на 100% уверены в бизнес-моделе, то займите денег (у банков, у друзей и т.п.) на создание рабочего проекта. Кстати, качество клиентам не нужно, главное чтобы сперва все работало.
А пока у вас получается, что вы не уверены в своем проекте и хотите переложить все свои риски на других (А свободных денег и времени нет)
Вопрос: Как добавить пользователей в firebase?

Лучший ответ:
Как теперь сделать так чтобы в состоянии например в модуле users/people хранить всех пользователей которые зарегистрировались
Посмотреть как в firebase получить всех пользователей и в нужный момент, выполнять запрос за ними.
Или тут больше вопрос о том чтобы найти в firebase API нужный метод?

Худший ответ:
Работал с firebase и помню что делал такconst authenticateWithEmailAndPassword = (email, password) => {
    // console.log('authenticateWithEmailAndPassword',email, password)
    return dispatch => {
        dispatch({type: types.START_LOGIN});
        firebaseAuth.signInWithEmailAndPassword(email, password)
            .then(result => {
               //Здесь вы ложите email и пасс  пользователя  в users/people/id данного пользователя 
                dispatch(signInEmailPasswordSuccess(result))
            })
            .catch(error => {
                dispatch(signInError(error))
            });
    }
}
И в необходимый момент вы сможете взять всех пользователей из users/people/
Вопрос: Градация разработчика?

Лучший ответ:
Что бы определиться не нужны ресурсы или книги, достаточно самому себе сказать - Я Senior!
Только зачем все это нужно? Для работодателей нужны не ваши регалии, а умение решать поставленные перед вами задачи. Будь вы трижды Senior, но если вы не сможете решить задачу работодателя, вы будете уволены.

Худший ответ:
иногда я не понимаю, что я делаю и почему это работает
Вы что-то делаете, а это уже хорошо. Остальное со временемСлышал о градации программистов на junior, midle, senior. 
Все о ней слышали, вот бы кто стандартизировал, но нет. Скорее всего все выглядит так:
0% начал учить
где-то тут junior превращается в midle
50% пол пути до гуру
где-то тут midle превращается в senior
100% гуру (недостижимая отметка)
Это как с бабочкой, разве можно определить момент, когда она уже не гусеница и точно бабочка.
Вопрос: Wordpress и собственная логика, возможно ли?

Лучший ответ:
Вы неправильно понимаете суть плагинов в WordPress. Воспринимаете это как что-то плохое, или сложное, или тяжелое, или как-то еще. Все на самом деле просто:
1. WordPress в процессе выполнения подключает кучу файлов - и своих, из ядра, и пользовательских.
2. Любой пользовательский код, где бы он ни находился - в mu-плагине, в обычном плагине, в шаблонах темы, в functions.php или в файле, который подгружается с помощью autoload вообще из другой папки при использовании Composer - абсолютно любой пользовательский файл подключается и выполняется идентично и одинаково. Для PHP и для WordPress это просто код, который надо выполнить.
3. Разница между тем, куда помещать свой пользовательский код только в удобстве и очередности подключения и исполнения этого кода, а также обновления и прочие плюшки. Исходя из этого:
- mu-плагин обычно 1 php-файл, его нельзя отключить в админке, выполняется из пользовательского кода условно первым. Не использует систему обновлений плагинов, поэтому изменения надо заливать вручную. Выполняется до pluggable функций WP, то есть может их переопределять. Используется для разных задач, когда конкретный пользовательский код нужно выполнить ДО обычных плагинов, когда он критичен для работы проекта и его нельзя отключать и тд. При смене темы сайта функциональность из mu-плагина остается.
- обычный плагин - может быть как простым (1 файл), так и любой сложности. Выполняется после mu-плагинов, перед pluggable. Используется для всего остального. Можно выключить из админки, обновить (с WP.org, сайта разработчика и даже со своего репозитория), при смене темы сайта остается.
- functions.php активной темы. Загружается после обеих типов плагинов, сразу перед срабатыванием хука init. При смене темы, разумеется, любая функциональность которая определена в этой файле будет утеряна. Обновляется вместе с темой. Еще стоит помнить про то, что их может быть 2 - родительской темы и дочерней.
Еще важно - в теме принято держать только то, что касается вывода и отображения информации на фронте сайта. Тема - это про внешний вид, дизайн и оформление. Функциональность должна быть в плагинах.
Для WordPress в целом абсолютно все равно, где будет ваш код. И да, ваша функция / класс будет идентично работать (и по производительности в том числе), не важно где она будет - в functions.php или в плагине. Это будет все та же функция или класс, только в случае с плагином в голове документа будет блок с комментарием, который и определяет, что это плагин. Все. Больше никакой разницы.

Худший ответ:
Ну не создавайте плагин, а добавьте нужный рнр код в functions.php. Будет тот же плагин, только без плагина) 
О какой именно логике идет речь? Может есть что-то готовое...
Вопрос: Какие есть работающие варианты принятия платяжей в РФ изза рубежа?

Лучший ответ:
Три года пользуюсь следующими 100% легальными способами получения средств из-за границы:
1. Получение денег непосредственно от клиента на счёт в банке РФ. Банк устроит договор-оферта, однако, если настоит клиент, то нужно будет заключать двусторонний договор.
2. Получение денег с биржи (ранее elance, сейчас upwork) на Paypal физлица и перевод на Paypal ИП, затем вывод через счёт в банке РФ. Нужен будет договор с биржей - один раз навсегда.
3. Получение денег непосредственно от клиента на Paypal ИП или Paypal физлица (если клиент - юрлицо, то он не сможет перевести деньги на ваш Paypal ИП). Далее вывод денег на счёт в банке РФ. Это самый популярный (для меня) метод получения платежей и в 100% случаев клиента устроил мой договор-оферта.
Даже 3 способа получилось :)
Всего хорошего :)
P.S. Если вас интересовало получение денег из-за рубежа без открытия счёта ИП в банке РФ, то законных способов нет. При осуществлении предпринимательской деятельности обязательно открытие ИП.

Худший ответ:
Никак. Перепробовал тонну сервисов. Какие то обещают, а по факту не проводят.
Вопрос: Как сделать перезагрузку страницы после отправки формы?

Лучший ответ:
Пиши php туда же где и форма, action оставь пустым. Или в скрипте пропиши в конце header("Location: /*ваш урл куда скрипт должен перенаправить*/")

Худший ответ:
форма action которая ведет на файл php
1) Если вы уберете "файл php" из экшна, фрома будет субмититься на текущий урл, что как раз будет давать вам перезагрузку. Естественно код отправки данных на емэйл тоже надо будет расположить в текущем скрипте.
2) Отправляйте данные аяксом через яваскрипт, после чего перегружайте страницу из яваскрипта.
В первом варианте есть нюанс - обновление страницы после субмита методом пост вызывает не совсем юзерфрендли поведение, предлагая снова отправить данные. Обычно после такой загрузки формы делают редирект на нужную страницу методом гет, это решает проблему.
Вопрос: Как перебросить аудиокнижки на телефон со сломанным usb портом?

Лучший ответ:
Гугл Драйв, Дропбокс?

Худший ответ:
Отметил решением ftp в локале потому, что нравится идея, но Без бубна не работает. Dropbox, google drive, ... , работает из коробки, но не нравится идея гонять трафик туда обратно. Лично мне, если кому интересно, подошел сервер поднятый на телефоне с клиентом в браузере десктопа, что нибудь вроде WiFi_File_Explorer.apk Заработало из коробки, стабильно, достаточно быстро и удобно.
Вопрос: Не везде доступен сайт cloudflare?

Лучший ответ:
у cloudflare ингогда бывают проблемы, а еще в РФ есть роскомпозор который может заблочить ип cloudflare.

Худший ответ:
Часть IPшников CloudFlare недоступна из РФ из-за действий антиконституционного цензурирующего органа под названием Росцензура.
Вопрос: Почему не получается достать количество строк из таблицы?

Лучший ответ:
Разберитесь, что делает метод ExecuteNonQuery. В данном случае, вам он не подходит. Скорее всего вам нужен ExecuteScalar.

Худший ответ:
ExecuteNonQuery() возвращает количество affected rows, но так как вы не изменяете таблицу (SELECT statement), то и ждать количество измененных строк нет смысла.For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command.When a trigger exists on a table being inserted or updated, the return value includes the number of rows affected by both the insert or update operation and the number of rows affected by the trigger or triggers.For all other types of statements, the return value is -1.If a rollback occurs, the return value is also -1.
В данном случае вас должен интересовать метод ExecuteScalar()
Вопрос: Какие книги почитать про хакинг?

Лучший ответ:
С тебя ТОННЫ нефти
Книги для исследователя:
1. Practical Reverse Engineering: x86, x64, ARM, Windows Kernel, Reversing Tools, and Obfuscation
2. Касперски https://nezumi.cyberpunk.us
3. Hacking: The Art of Exploitation
4. The Shellcoder's Handbook: Discovering and Exploiting Security Holes
5. Practical Malware Analysis: The Hands‑on Guide
6. Lerning Linux Binary Analysis
7. The IDA Pro Book: The Unofficial Guide to the World's Most Popular Disassembler
8. Rootkits: Subverting the Windows Kernel
9. Reverse Engineering for Beginners free book, Денис Юричев
10. ФСБ взрывает Россию. Александр Литвиненко
11. https://en.wikibooks.org/wiki/X86_Disassembly (вклад приветствуется)
Журналы:
www.phrack.org/archives/tgz
https://www.alchemistowl.org/pocorgtfo/
https://vxlab.info/inception/
magazine.hitb.org/hitb-magazine.html
uninformed.org/?v=all
Мета-ссылки с ресурсами:
https://habrahabr.ru/company/dsec/blog/334832/
https://yadi.sk/d/brMRyXSu3JkdFx
https://forum.reverse4you.org/showthread.php?t=1327
https://vk.com/topic-114366489_33670323
https://samsclass.info/126/126_F14.shtml
https://fat-crocodile.narod.ru
https://www.corelan.be/index.php/articles/
https://www.scip.ch/en/?labs.20171005
https://j00ru.vexillium.org/
z0mbie.daemonlab.org
www.anti-reversing.com
https://www.codeproject.com/Articles/30815/An-Anti...
https://github.com/ytisf/theZoo
https://github.com/mwsrc
pentestit.com/malware-sources
www.freetrojanbotnet.com

Худший ответ:
Судебную практику- ее иногда в виде книг издают.
Вопрос: Как настроить этот скрипт?

Лучший ответ:
Там же даже инструкция есть, что может быть не понятно? codepen

Худший ответ:
Там внизу страницы для чайников как раз) "Просто вставьте этот код и скрипт запустится." (и ниже код. Ищи. Удачи.)
Вопрос: Научится алгоритмическому мышлению?

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

Худший ответ:
Кроме книги Грокаем алгоритмы, которую предложил VicTHOR , добавил бы, что главное -- это решение задач и большая практика.
Для алгоритмического решения может помочь решение простых олимпиадных задач школьных / студенческих. Самые простые из них достаточно простые для самых начинающих.
https://acm.timus.ru -- тут достаточно быстро растёт сложность, зато не туча задач.
https://codeforces.com -- тут задач очень много, так что есть и сотни простых.
Есть много иностранных подобных сайтов.
Полезно будет также качать логику вообще, не только алгоритмическую.
Вопрос: Как на сервере сделать автоматическую очистку папки?

Лучший ответ:
cron — классический демон, использующийся для периодического выполнения заданий в определённое время. Регулярные действия описываются инструкциями, помещенными в файлы crontab и в специальные директории.

Худший ответ:
Привет,man cron
man rm
Вопрос: Что такое авторские права в мире дизайна?

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

Худший ответ:
Они явно не "сворованы", однако хотелось бы заметить, если не вглядываться, есть ощущения что иконки рисовал один художник, в продолжение к прошлым. Вы взяли его манеры, его фигуры, его стилистику, его тени, но нарисовали свое содержимое. На стилистику может быть наложен патент, поэтому позиция руководства понятна.
Вы не правильно воспринимаете слово "вдохновился", вдохновляться надо несколькими работами и на основе увиденного сделать свою идеи, а не повторять стилистику другого произведения.
Но я скажу так, что самое сложное в этих иконках - содержимое, оно у вас нарисовано красиво, я не думаю, что для вас будет сложно переделать их в другую стилистику.
Вопрос: Как отловить код который вызывает ошибку компиляции «uses unchecked or unsafe operations.»?

Лучший ответ:
Откройте build.gradle, найдите секцию allprojects, добавьте в неёallprojects {
    ...

    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked"
        }
    }   
}
и попробуйте ещё раз собрать проект. Будут вам указания на строки.

Худший ответ:
Читать внимательно ошибку.Recompile with -Xlint:unchecked for details. 
Ставите этот флаг и будет вам больше деталей.
Скорее всего где то юзаете коллекции без точного указания типа
Вопрос: Объясните толком про интерфейсы в ООП (Delphi). Как их использовать?

Лучший ответ:
А ничего дальше делать не надо - не доросли еще до этого уровня. Обычно, дело с интерфейсами обстоит так: подходит сеньор и говорит - "для того чтобы сделать эту задачу отнаследуйте класс от такого-то интерфейса"; наследуемся от интерфейса и кодим реализацию по ТЗ. Интерфейсы придумывают сеньоры и архитекторы, а остальные программисты используют - где и как описано в манулах к либе и т.д. 
В процессе работы программы у отнаследованных классов вызываются методы(в библиотеке). А вот для того чтобы программа не упала с сегфолтом и нужны интерфейсы, в которых прописано, что метод A вызывается с параметром int, а не float.

Худший ответ:
Так же можно посмотреть как используются интерфейсы на примере SynEdit именно в Delphi.
Вопрос: Как сделать django на nginx а остальное на apache?

Лучший ответ:
а то у nginx с php очень плохоС каких это пор?
Коротко говоря: никак не сделать, nginx занял 80-й порт. Единственное решение - запустить apache на другом порту и через nginx проксировать туда запросы.

Худший ответ:
Фронтендом ставите nginx , под php проекты ставите php-fpm , под django ставите uwsgi демон. Далее под каждый нужный проект рулите через сокеты к бекендам.
Вопрос: Как защититься от любопытных пользователей?

Лучший ответ:
Не даете ноутбук. 100% защита.

Худший ответ:
Можно просто зашифровать/скрыть папки через сторонний софт.
https://habrahabr.ru/company/cybersafe/blog/252561/
Вопрос: Как сделать проверку, присутствует ли Кириллица в строке?

Лучший ответ:
String s = "Тест";
boolean cyrillic = s.chars()
                    .mapToObj(UnicodeBlock::of)
                    .anyMatch(b -> b.equals(UnicodeBlock.CYRILLIC));

Худший ответ:
String s = "Тест";
boolean cyrillic = s.chars()
                    .mapToObj(UnicodeBlock::of)
                    .anyMatch(b -> b.equals(UnicodeBlock.CYRILLIC));
Вопрос: Почему изменяется начальное содержимое объекта?

Лучший ответ:
Когда вы нажимаете в консоли на стрелочку раскрытия объекта/массива, консоль только в этот момент пытается получить это значение (вызвать геттер). Если хотите видеть содержимое в момент вывода в консоль, то сериализируйте например в JSONconsole.warn(JSON.stringify(store.all()))
Так вы сразу получите раскрытую строку.

Худший ответ:
Это корректное поведение консоли, так как отображается один и тот же объект.
Вопрос: На какой платформе лучше всего развертывать проект на Django?

Лучший ответ:
Если у вас количество серверов за десяток не выйдет и нет надобности быстро разворачивать новые чуть ли не ежедневно, вам не нужны Doker, Vagrant, Ansible. Вы — не Google.

Худший ответ:
Ну возьмите Heroku.
Там все тоже - только завернуто гораздо удобнее. Минимум телодвижений по администрированию.
А Docker, Ansible, Vagrant - это вы еще увязните в изучении...
Вопрос: Через что реализовать очень простую сетевую игру?

Лучший ответ:
У Вас крайне простая игра крестики-нолики. Получается для сетевой игры нужно передавать следующее:
- Событие новой игры ; //Идентификатор пакета 1
- Событие установки крестика\нолика(int "x" , "y", и к примеру булевой тип isCircle)//Идентификатор пакета 2
- Событие победы. //Идентификатор пакета 3
- Событие ошибки(неверный ход) //Идентификатор пакета 4
Т.е. всего 4 типа данных.
Сетевой пакет можно представить следующим текстовым видом:"число_идентификатор_типа_пакета;опциональные данные;опциональные данные"
; - делитель(delimiter строки)
Серверная сторона порт=7777:ServerSocket ss = new ServerSocket(7777); //создали сервер
Socket socket = ss.accept();//Ждем клиента
//Сюда попадаем только когда подключился клиента
DataInputStream in = new DataInputStream(socket.getInputStream(); //Получаем поток ввода
DataOutputStream out = new DataOutputStream(socket.getOutputStream()); //Получаем поток вывода
String line = null;
while(true) {
     line = in.readUTF(); // Тут ждем и получаем строку от клиента
     String[] data = line.split(";"); //Разделяем полученную строку в массив строк
     if(data[0].equals("1")){
     //Сбрасываем уровень начинаем новую игру}
     if(data[0].equals("2")){
     //Ставим крестик\нолик по координатам
     int x =data[1]; int y=data[2];boolean isCircle=data[3] //Не забудь типы привести, ну там Integer.parse(data[номер])
     //Ну возможно отправить ответ клиенту
    out.writeUTF(line); // шлем его же строку обратно чтобы клиент у себя отрисовал фигуру или пакет с ошибкой
    out.flush(); // заканчиваем передачу в поток.
     }
     ....
}
У клиента:Socket socket = new Socket(InetAddress.getByName("IP сервера"), 7777);  //создаем сокет
DataInputStream in = new DataInputStream(socket.getInputStream(); //Получаем поток ввода
DataOutputStream out = new DataOutputStream(socket.getOutputStream()); //Получаем поток вывода
String line = null;
while(true) {
... тут все аналогично серверу только с правками для клиента
}
Если хочется абстракции то заверни псевдокод выше в свой класс. 
Spring вообще не для этих целей служит, в данной задаче это всеравно что забивать гвозди микроскопом.
Для вашей задачи сокеты это какраз то что и нужно изза того что все крайне просто и на глазах Проблем с сокетами тоже никаких быть не может.

Худший ответ:
"не охота копаться в устройстве велосипеда, возьму танк" :)
java.net.Socket это уже и есть абстракция. Этот API избавляет вас от необходимости разбираться в устройстве сетевых коммуникаций.
так что я за ответ  Дмитрий Александров 'а
Вопрос: Подойдет ли такая оперативка?

Лучший ответ:
Подойдет. А в приличных магазинах и возврат можно оформить, если что.

Худший ответ:
ark.intel.com/de/products/53483/Intel-Pentium-Proc...
Проц поддерживает DDR3 до 1066 так что он снизит такт шины до 1066. Можно сэкономить и  взять 1066 память.
Я бы апнул лучше жесткий диск на SSD толку для производительности будет больше, имхо.
Надумаете апать проц, смотрите чтобы кеш был больше это важнее чем мегагерцы.
Вопрос: Как отслеживать новые объявления на Avito?

Лучший ответ:
Можно попробовать вот это http://beesoftware.ru/podelki/21-avitochecker-ska...
Писал под себя, но думаю сгодится и для других

Худший ответ:
Вот не плохая программулина для оповещения о появлении новых объявлений https://avitomonitor.cursor.pw/
я ей пользуюсь. Но на самом деле вариантов много. Достаточно погуглить.
Вопрос: Не работает css в WordPress?

Лучший ответ:
 Меняете не тот файл Кэширование CTRL + F5 F12 >

Худший ответ:
У меня такое было на "заказном" шаблоне - программист создал подключаемый редактируемый css, а в link добавить его забыл...
Вопрос: Смысл дефолтного namespace?

Лучший ответ:
Если дефолтный namespace не нужен в exe, то нужен ли он в библиотеке, которой никто кроме вас никогда не будет пользоваться? Если все так будут размышлять, то рано или поздно мы вернемся к аду dll, только уже для классов. Именно поэтому Майкрософт рекомендует обзывать namespace как CompanyName.TechnologyName[.Feature][.Design]

Худший ответ:
Это ограничение C# и её объектной модели. Каждый класс должен быть определён в пространстве имён (чёрт, ну русский же есть!), как его называть - ваше право. Необходим он, чтобы избежать коллизии имён. Причина по которой создаётся пространство имён по умолчанию очень проста - изменять стороннее пространство имён вне своих приложение/библиотек вы никак не можете, но и без оного код никак не соберётся в исполняемую кучу.
UPD. Вообще говоря, если не указывать namespace, то его принято называть assembly. И это не самая правильная практика.
Вопрос: DTO, как готовить в симфони?

Лучший ответ:
Symfony не имеет никакого отношения к DTO и не накладывает каких-то требований на реализацию.

Худший ответ:
В случае с PHP, DTO - ни что иное, как обычный класс без поведения (т.е. имеющий только свойства). Его можно без проблем сериализовать и десереализовать в любой удобный формат для передачи по сети, будь то стандартный `serealize` или `json_encode`
Вопрос: Какую выбрать клавиатуру с очень легким ходом клавиш?

Лучший ответ:
https://www.microsoft.com/accessories/ru-ru/produc...
Только брал я ее в 3 раза дешевле

Худший ответ:
Замечательные клавиатуры делает, как ни странно, M$. Удобные, эргономичные, с тихим ходом, с легким нажатием. Не все, правда. Нужно идти в магазин и пробовать.Моя. До сих пор работает, правда уже еле-еле, чем ...
Вопрос: Wake-on-lan teamviewer как работает?

Лучший ответ:
Wake-on-lan teamviewer как работает?
Точно так же как и обычный Wake-on-lan без всякого teamviewer.
Отправляется широковещательный пакет,  с маком компьютера, и компьютер просыпается.

Худший ответ:
Ну, это нужен какой-то третий компьютер, в той же сети, который будет включен и сможет послать WOL выключенному компьютеру.
WOL работает на основе трех условий:
- машины в одном домене вещания (между ними нет маршрутизации)
уточнение (@nikolayvaganov) -  если отсылать по MAC и IP - можно пройти маршрутизатор через порт udp 9. 
- на включаемой машине в BIOS включен WOL
- включающая машина знает MAC включаемой
Вопрос: Как в инпут писать old, value из модели, или пустой value?

Лучший ответ:
Я если правильно тебя понял, то тебе просто нужно написать<input type="text" name="name" value="{{ old('name', $model->name) }}">
То есть, при отправке формы, если есть ошибка, покажет то что ввел пользователь, а так покажет значение модели.
Тебе не нужен LaravelCollective

Худший ответ:
https://github.com/LaravelCollective/html и Form::model.
Вопрос: Как обновить в торговом каталоге коэффициент единицы измерения?

Лучший ответ:
Нашел ответ на свой вопрос, для того что бы изменить данный коэффициент необходимо его в начале добавить через функцию:$ID = CCatalogMeasureRatio::add(Array('PRODUCT_ID' => 27387, 'RATIO' => 2));
Выше код выдаст нам необходимый ID для обновления коэффициента через функцию:CCatalogMeasureRatio::update($ID, Array('PRODUCT_ID' => 27387, 'RATIO' => 5));
Если же ID коэффициента есть, его можно узнать через функцию:CCatalogMeasureRatio::getList(Array(), array('IBLOCK_ID' => 12, 'PRODUCT_ID' => 27387), false, false);

Худший ответ:
ProductTable::update должен возвращать объект класса Result. Посмотрите что в нём$updateResult = \Bitrix\Catalog\ProductTable::update(19612, Array('RATIO' => 2)); 

print_r($updateResult);
Вопрос: Когда выйдет Adobe Photoshop CC 2018?

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

Худший ответ:
Уже вышли