Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Существует смесь workflowy и todoist для организации процесса GTD?

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

Худший ответ:
offline: qtodotxt
online / offline: moo.do
То, что вы ищите это: https://gtdnext.com/
Но лично мне не понравилось... 
И да, есть проблема с GTD и вложенными проектам, вы офигеете от этой проблемы.
Я сам не знаю как с этой проблемой бороться (уровней вложенности для конкретного проекта может быть несколько десятков (разработка ПО))), GTD говорит, что вложенных проектов не должно быть, должно быть дохрена "различных проектов" на виду, но снова таки, таких проектов может быть около сотни на виду, а в некоторых случаях и более тысячи, и это вызывает чувство угнетения от работы, а не мотивирует что-либо делать.
Вопрос: Background-position обрезает картинку. Как сохранить размер?

Лучший ответ:
Возьмите картинку, попытайтесь её вместить в квадрат, прямоугольники с вертикальным и горизонтальным расположением, и поймёте всю странность своего вопроса.
Либо вам придётся искажать пропорции картинки, растягивая на всю областьbackground-size: 100% 100%;
либо обрезатьbackground-size: cover;
либо вмещать полностью, но тогда останутся незаполненные местаbackground-size: contain;

Худший ответ:
Вам нужно поиграть с background-size. Изучите https://developer.mozilla.org/en-US/docs/Web/CSS/b...
Вопрос: Как реализовать выполнение очереди комманд в дочернем потоке?

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

Худший ответ:
Используйте mutex, locker, или любой другой механизм блокировки (в обоих методах).
Вопрос: Как проверить PV в Xen?

Лучший ответ:
Если вы сами писали конфиг, то должны знать, в каком режиме грузится гостевая система. Откуда вопрос?

По-любому, внутри системы можно сделать dmesg|grep Xen и увидеть:
[ 0.000000] Booting paravirtualized kernel on Xen
[ 0.000000] Xen version: 4.0.1 (preserve-AD)
[ 0.000000] Xen: using vcpu_info placement
[ 0.000000] Xen: using vcpuop timer interface

На HVM же выдаёт:
[ 0.000000] ACPI: RSDP 000ea020 00024 (v02 Xen)
[ 0.000000] ACPI: XSDT fc012cb0 00034 (v01 Xen HVM 00000000 HVML 00000000)
[ 0.000000] ACPI: FACP fc012ad0 000F4 (v04 Xen HVM 00000000 HVML 00000000)
[ 0.000000] ACPI: DSDT fc002c40 0FE0B (v02 Xen HVM 00000000 INTL 20100528)
[ 0.000000] ACPI: APIC fc012bd0 000D8 (v02 Xen HVM 00000000 HVML 00000000)
[ 0.000000] Xen version 4.0.
[ 0.000000] Xen Platform PCI: I/O protocol version 1
[ 0.000000] Netfront and the Xen platform PCI driver have been compiled for this kernel: unplug emulated NICs.
[ 0.000000] Blkfront and the Xen platform PCI driver have been compiled for this kernel: unplug emulated disks.
[ 0.000000] Booting paravirtualized kernel on Xen
[ 0.000000] Xen HVM callback vector for event delivery is enabled

Худший ответ:
Эх, к сожалению virsh это утилита KVM, в XEN ее нет :(
Вопрос: Как организовать доступ к внутренним сайтам провайдера из интернета?

Лучший ответ:
Как самое простое и быстрое, но не самое удобное решение - ssh-тунель. Пробрасываете на роутере ssh-порт до дебиана. На своём компьютере, если на нём линукс, пишите в консоли ssh -f <логин>@<ваш белый айпишник> -L<любой незанятый порт>:<айпишник ресурса провайдера>:<порт ресурса провайдера, для хттп 80> -N
Например: ssh -f root@1.1.1.1 -L47364:192.168.26.14:80 -N
Если компьютер под виндой - используете putty.
Чтобы попасть на этот ресурс в браузере вводите 127.0.0.1:<указанный свобондый порт> (для примера выше это 127.0.0.1:47364).
Но по хорошему конечно лучше впн, например openvpn. При этом заворачивать весь трафик через него не обязательно, можно указать только определенные адреса.

Худший ответ:
Нужен VPN в ту провайдеровскую сеть. В статье на хабре все правильно.
Вопрос: Потоки: Чем cin.goodbit отличается от cin.good()?

Лучший ответ:
Лучше использовать good(), зачем писать, то что уже и так в ней написано:
www.cplusplus.com/reference/ios/ios/good
читайте внимательно

Худший ответ:
www.cplusplus.com/reference/ios/ios_base/iostate
Я давно не писпл на C++. Но есть фраза, разные программисты разный код. Как удобней так и используй.
Вопрос: Как можно быстро запарсить более 1000 картинок с сайта?

Лучший ответ:
Советую библиотеку PHPQuery, в ней нету таких глюков, как simple html dom (я пробовал и тм и тем, но понравилась именно phpquery).
Ссылки на уроки:
habrahabr.ru/post/69149
i-novice.net/parsim-sajty-s-phpquery
Недавно как раз и парсил картинки этой библиотекой и она очень хорошо справилась
Для того, что бы сохранить конкретно картинку, то надо при помощи библиотеки найти ссылки на картинки, я искал на странице и помещал все найденные ссылки в массив, пример кода:$model_page_url = file_get_contents($page);  //Получаем всю страницу
  $model_page = phpQuery::newDocument($model_page_url); //Создаём объект страницы библиотекой
  $images_link = $model_page->find('img'); //Ищем все теги img
  foreach ($images_link as $image_link) {
    $images[] = pq($image_link)->attr('src'); //В цикле помещаем ссылку на картинку в массив
  }
Затем примерно так:foreach($images as $image){
        $image_name = basename($image); //Определяем имя и расширение картинки
        if(!file_exists('img/'.$image_name)){ //Проверяем нет ли такой картинки
          file_put_contents('img/'.$image_name, file_get_contents($image)); //через file_get_contents($image) получаем картинку по ссылке и file_put_contents кладём её в нужную нам папку
        }else{
          continue;
        }
      }
Весь примерный процесс парсинга изображений

Худший ответ:
Может есть какое-нибудь другое решение?
Вопрос: Какие есть сервисы, похожие на mailgun, годные для рассылки менее 10000 писем в месяц?

Лучший ответ:
mandrill.com
Позволяет слать по SMTP + есть отлично документированное API. 12000 сообщений в месяц бесплатно.

Худший ответ:
А чем не устраивает гугл смтп с 400 писем в день (12000 в месяц) на бесплатном тарифе?
Есть еще mailchimp.com
Вопрос: Почему не удается прочитать из файла — io.UnsupportedOperation: not readable?

Лучший ответ:
Сколько почестей.
Ты сам открыл файл на запись, а потом хочешь его считать. Не надо так.

Худший ответ:
Ясно, спасибо, я только вчера с Python`om познакомился. Так, что, простите за глупый вопрос.
Вопрос: Почему span не хочет менять цвет?

Лучший ответ:
«a5a5a5» — вы в коде точно латиницей "a" написали?

Худший ответ:
codepen.io/anon/pen/EaKXYQ
Без заглядывания в верстку тяжело понять в чем проблема.
Вопрос: Как правильно перевести `assets` и `dist`?

Лучший ответ:
assets - активы (гугл перевод), используется для обозначения нужных файлов/обьектов которые необходимы для работы приложения. К примеру: main.css и main.js можно положить в папку assets.dist - ~расстояние~ дистрибутив (:D), используется для обозначения "внешних" файлов (к примеру чужие плагины, модули, пакеты и тд.). К примеру: jquery.js можно положить в dist.Примечание: в папку assets можно положить и файлы из dist т.к. без dist проект должен существовать (это как папка инсталл в этом случае, установив скрипты в assets, мы можем ее удалить).
Описал все своими словами, не ругайтесь.

Худший ответ:
assets так и переводится - ассеты, dist  - дистрибутив
Вопрос: Как использовать в гит-репозитории ещё один гит-репозиторий?

Лучший ответ:
Submodules
P.S. когда-же вы все начнёте читать документацию, учитывая что она да-же не могучем имеется :(

Худший ответ:
Возможно, это не Best Practice, однако у нас в фирме это сделано так:
В папке куда цепляется еще один репо кидается .gitignore, который запрещает хранить все кроме себя тут.
И в основном репо есть ридми, где по-пунктам расписано как и откуда тянуть какие репы и в какие папки складывать.
Имхо, можно фигануть shell-script в основном репозитории, который притянет в нужные папки нужные репы автоматом.
Вопрос: Снизилось количество проектов на одеске?

Лучший ответ:
Лето, сезон отпусков.

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

Лучший ответ:
Здравствуйте. Я хочу купить квартиру, но есть одна проблема. У меня только сто тысяч наличкой, а реелтер сказал что она стоит два миллиона. Могу ли я купить квартиру со ста тысячами? Смотрю на эту квартиру давно. Из разговора соседей я знаю, иногда люди получают квартиры в наследство. Как тут вообще в наследство квартиры получают?

Худший ответ:
+1 к карме
Вопрос: Опыт использования Grunt в больших проектах

Лучший ответ:
С зависимостями может помочь Bower. 
Есть yeoman.io/, который использует Grunt (и многие его плагины) и Bower.

Худший ответ:
Для dev как раз не нужно
Вопрос: Как составить «хитрый» MySQL запрос?

Лучший ответ:
Итак, исправляю сам себя.

Чтобы в наш интервал не попали 16 часов, он целиком должен помещаться между двумя ближайшими 16-часовыми отметками на временной прямой. Их можно получить искусственно: первая отметка это наиболее поздние дата-время, когда было 16 часов, но не позже, чем start, а вторая — ровно на сутки позже. Назовём условно эти отметки a и b. Так как start всегда попадает в [a, b], вся задача сводится к проверке попадания end в интервал [a, b]. При end < b в интервале [start, end] не будет ни одной 16-часовой отметки. Теперь вернёмся к исходной задаче. Обращаем условие: при end >= b в интервал [start, end] попадёт хотя бы одна отметка в 16 часов.

Теперь постараемся получить b. Чтобы получить a, вычтем из start 16 часов, обнулим временную часть (прыгнув таким образом к началу суток) и прибавим обратно 16 часов. Величину b получить ещё проще: прибавляем сутки к a.

И в SQL:
SELECT *
FROM my_table
WHERE
    end >= DATE( start - INTERVAL '16:00:00' HOUR_SECOND ) + INTERVAL '16:00:00' HOUR_SECOND + INTERVAL 1 DAY


Худший ответ:
start_time < 16:00 AND end_time > 16:00 OR start_time > end_time
Если ничего не упустил можно как-то так попробовать.
Вопрос: Приведение обьекта производного класса к базовому?

Лучший ответ:
поля объявленные в производном классе исчезают?
Это называется object slicing. Это явление проявляется в языках, где сложные типы данных вроде классов и записей а) могут наследоваться и добавлять новые поля при наследовании; б) могут присваиваться по-значению (by value). Это и приводит к тому, что поля потомка при присвоении в переменную типа предка отсекаются. Такое присвоение само по себе некорректно, т.к. если вы работаете с объектами классов-наследников через интерфейс базового класса, это подразумевает полиморфное поведение и работу через ссылку/указатель, т.е. чтобы вместо самого объекта копировалась ссылка/указатель на него (т.е. его identity, "уникальный ключ"), а сам оставался нетронутым и лежал там же, где и лежал.
При работе через ССЫЛКУ на базовый класс (т.е. Base&) таких проблем не будет, однако ссылка сама по себе переменной не является (в отличие от указателя) - это лишь дополнительное ИМЯ для некоторой другой переменной или области памяти. Поэтому, вы не сможете сохранить ссылку в векторе - ваш код не скомпилируется. В векторе вам нужно будет хранить указатели. Например, std::vector<Base*>.
Запомните простое правило - если ваши объекты подразумевают работу через интерфейс базового класса (т.е. полимофрное поведение), то в большинстве случаев вам следует работать с ними через указатель (и, в большинстве случаев, размещать эти объекты в куче). В том числе через умные указатели (unique_ptr, shared_ptr).
В других языках (C#, D вроде тоже) существует фундаментальное разделение на типы-значения и ссылочные типы, и для всех ссылочных типов работа "через ссылку" предоставляется автоматически. В C++ такого разделения нет, и как работать с типом вы выбираете сами, при его ИСПОЛЬЗОВАНИИ (т.е. используете либо по-значению, либо через указатель).
P.S. С днем рождения!

Худший ответ:
Найди эту книгу: www.ozon.ru/context/detail/id/1631049 там все это расписано, на сколько я помню.
Вопрос: Apache в локальной сети

Лучший ответ:
1. если это только локалка, файрволл не нужен. В OpenSUSE есть гуевый(и ncurses) yast, а сверху iptables враппер suse-файрволл, но можно и через iptables:

/sbin/service iptables stop
/sbin/service iptables save
/sbin/chkconfig iptables off

2. Проверяем, куда биндится Apache:

netstat -atunp 

?

3. смотрим, наконец, error_log апача

Худший ответ:
Проверяйте фаервол, настройки листен в апаче.
Зайдите по айпишнику со второго компа.
Вопрос: Постоянно падает сервер на node.js?

Лучший ответ:
Могу предположить, что процесс падает из-за разрыва соединения по таймауту со стороны mySQL если длительное время не было активности на подключении. В этом случае исключение имеет следующий вид:Error: Connection lost: The server closed the connection.
    at Protocol.end (*path_to_project*/node_modules/mysql/lib/protocol/Protocol.js:103:13)
    at Socket.<anonymous> (*path_to_project*/node_modules/mysql/lib/Connection.js:88:28)
    at Socket.emit (events.js:117:20)
    at _stream_readable.js:944:16
    at process._tickCallback (node.js:442:13)
Лечится выставлением таймаута для подключения к mySQL вручную:
mysqlConnection.query("SET SESSION wait_timeout = 604800"); // 7 days timeout
А вообще конечно надо запускать node-процесс под супервайзером (pm2, forever, supervisor) и заворачивать поток ошибок в соответствующий error.log. Там сразу будет видно с каким исключением завалился процесс. В противном случае с такими вопросами обращайтесь на битву экстрасенсов.

Худший ответ:
помог модуль forever
var forever = require('forever-monitor');
//------------------------------------------------------------
var child = new (forever.Monitor)('/var/www/nj/server.js',
{
 'minUptime': 50,    
 'spinSleepTime': 10,
 'logFile': '/var/www/nj/log_fr.txt', // Path to log output from forever process (when daemonized) 
 'outFile': '/var/www/nj/out_fr.txt', // Path to log output from child stdout 
 'errFile': '/var/www/nj/err_fr.txt' // Path to log output from child stderr 
}
Вопрос: Как уменьшить planning time в postgresql?

Лучший ответ:
Я думаю потому что план попадает в кэш.  
Как вариант - использовать подготовленные запросы или не разрывать соединение (pgbouncer в помощь).

Худший ответ:
Неплохо было бы взглянуть на полный вывод EXPLAIN ANALYZE, но предполагаю, что причина в том, что первый запрос вытаскивает все данные с диска, а при запуске второго запроса postgresql уже закешировал часть данных. Ну и как сказал He11ion, план запроса тоже кешируется на сессию. Соответственно сравнение не корректное получилось. Если первым запустить поиск с английским словам, а потом по русским, я думаю результат эксперимента будет обратным.
Вопрос: Как правильно выносить код в разные файлы?

Лучший ответ:
Сложность этого действия зависит от двух факторов:
- от качества кода на данный момент
- от качества того, что хотите получить на выход
По первому пункту, если у вас код грамотно разбит на классы и/или функции, то проблемы быть не должно. Как уже писали, просто вынесите все определения в хедеры, все остальное оставьте в .cpp. С другой стороны, я себе слабо представляю как написать грамотный код в одном файле.
Это приводит нас ко второму пункту. Для того, чтобы в итоге получился качественный продукт, необходимо логическое разделение на подзадачи. Если это выполнить грамотно это приведет к небольшим функциям, которые всегда делают что-то одно и/или к небольшим классам, которые отвечают за одну сущность. Такую структуру легко вынести в разные файлы.
Если же у вас много глобальных переменных и тп, то код тоже можно легко разнести в разные файлы, но с группировкой по файлам будет сложно, да и смысла в этом много не будет.
ПС. Не уверен, знаете ли вы, но не забывайте в каждом .h файле:#ifndef MY_AWESOME_HEADER_H
#define MY_AWESOME_HEADER_H
// код вашего файла
#endif
это убережет вас от последущих повторных включений этого файла.

Худший ответ:
Вам нужен рефакторинг. То, что Вы описали, говорит о том, что Ваш код далёк от совершенства.
Вам нужно для начала применить extract method, затем exctract class или подобные методы. После чего можно будет спокойно классы разнести по отдельным файлам.
Вопрос: Приложение музыкальной группы в AppStore?

Лучший ответ:
Если музыка ваша, то не нарушает. Если не ваша, то да.

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

Лучший ответ:
Если Вас устраивает готовое решения, берите его. 
Хорошего специалиста не должна пугать не популярность или еще что-то. школьник, да, не справятся.
Сotonti - у него есть документация, а это уже хорошо. Свое решение, вы будете писать, месяц, два, потом еще столько же дорабатывать, есть шанс так на говонокодить...
А со временем если будет такая нужда, то напишите с нуля с учетом всех проб и ошибок. 
Просто Ваш проект может не взлететь или еще-что, ну так бывает, уж простите ;)

Худший ответ:
Я Вам порекомендую Ruby, а точнее фреймворк Ruby on Rails. Да хостинг будет дороже чем на PHP. А если еще и с английским проблем нет, то в сети куча мануалов и ответов на них.
Не так давно сделал закрытую фриланс-биржу, где-то за 2-3 недели целиком все собрали
Вопрос: javascript replace all

Лучший ответ:
Как написано тут, через split/join оно быстрее работает, чем через регулярки в replace

Худший ответ:
Как я помню replace заменяет только первое найденное, а split-join все. Хотя могу ошибаться.
Вопрос: Как сверстать волнистую линию?

Лучший ответ:
Картинкой.

Худший ответ:
Это фоновое изображение.
Вопрос: Underscore Template, как выводить лишь если параметр задан?

Лучший ответ:
<%if(typeof description !== "undefined" ){%>
<p class="description"> <%= description %> </p>
<%}%>
Проверку можешь подогнать под свое условие

Худший ответ:
Попробуйте так<script class="tpl_container" type="text/template" data-name="type">
   <div class="success alert alert-success" role="alert">
      <% if (typeof(description ) != "undefined") { %>
         <p class="description"> <%= description %> </p>
      <% } %>
       <p><%= message %></p>
    </div>  
</script>How to use if statements in underscore.js templates?
Вопрос: Linux во фрилансе и на удаленке — какие направления есть?

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

Худший ответ:
Самое крутое - это DevOps,
но вам, судя по описанию, до этого еще рости и рости долгие и долгие годы.
Вопрос: Как скачивать программы для iPad, не покупая?

Лучший ответ:
Скачивать бесплатные программы.

Худший ответ:
За вами выехали :)
Вопрос: Новый способ блокировки любого Skype аккаунта

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

Худший ответ:
Получалось разблокировать аккаунт. Нужно проявлять настойчивость, но не переходить на грубости. Можно КАПСОМ, тогда отвечают быстрее. Имеет смысл цитировать предыдущие диалоги. С N-ой попытки через X часов аккаунт разблокировали.

Ходят слухи, что обладателям Skype Premium аккаунтов не приходится бояться блокировок.
Вопрос: Grunt и проблема с файлами (тысячи их). Что делать?

Лучший ответ:
Ну, вообще обычно копируются только рабочие файлы проекта, без папки node_modules (в частности, когда происходит работа с репозиториями git, папки такого рода помечаются как git-ignore). То-еть, по сути, нужно хранить только package.json, в котором хранится информация обо всех необходимых модулях. После переноса проекта другому разработчику всего-навсего придётся дать консольную команду npm install, и Node.js установит все необходимые модули.
P. S.: Да, в gulp.js всё примерно так же.

Худший ответ:
Не знаю как в Grunt, но в Gulp это все модули от Node.js. Вы объявляете все зависимости в package.json и просто исключаете node_modules из бэкапов. npm install является частю процесса деплоя и нет никакого смысла в синхронизации ненужных частей проекта. Кроме того, могу порекомендовать что-то вроде процесса непрерывной интеграции. А вообще идеально хранить код проектов VCS, а данные пользователей в отдельном месте. 
Так делается в правильных проектах.
Вопрос: Можно ли как-то перетащить определенные файлы в другой (физически) сектор диска?

Лучший ответ:
Как вариант сделать следующее:
1) скопировать нужный файл под другим именем
2) удалить предыдущий файл
3) новому файлу дать имя предыдущего.
Таким образом ты получишь тот же файл, но он будет располагаться в других секторах(кластерах)

Худший ответ:
Просто и гениально. Че-то я совсем ступил. :)
Вопрос: Как удалить Мой мир с mail.ru?

Лучший ответ:
Как удалить mail.ru из моего мира? :)

Худший ответ:
Может быть это тире-дефис?
Вопрос: Как в Python можно хранить список в памяти, чтобы он съедал меньше этой самой памяти

Лучший ответ:
Мой тест показал, что 1 млн строк (10-13 символов) в питоновском списке занимает около 40 МБ в памяти. Что многовато, но не так уж плохо. 

Протестировал ctypes вот так:
>>> from ctypes import *
>>> FixedSizeStr = c_char*13
>>> MillionStrings = FixedSizeStr*1000000
>>> ms = MillionStrings( *(FixedSizeStr(*str(i)) for i in xrange(1000000)))
Это +215 МБ?!..

Предложенный выше вариант с кодированием в число, хоть и экономит место, но существенно сожрет производительность, если вы будете пробегаться по этому списку и сравнивать с другой строкой.

Так что если вам дейстивтельно нужна оптимизация, то придется писать на С/С++ свой класс и экспортировать в питон. Все остальное будет полумерой.

Худший ответ:
Может быть, если вас не пугает Си, и вы уверены, что на нем получится компактнее, его использовать его через ctypes, например? С поддержкой такого решения на *nix системах проблем не будет.
Еще один извращенный способ, который пришел в голову — подмонтировать рамдиск через fusepy, создать в рамдиске файл через zlib и ходить по нему seek-ом. :) 
Ну и третий вариант — еще раз подумать. Строки у вас юникодные или ASCII? Нужно ли держать весь список в памяти (это требование производительности?) или приемлемо подгружать очередную порцию, например, фоново, когда текущая подходит к концу?
Вопрос: Гугл банит мой аккаунт, как обойти?

Лучший ответ:
как можно решить мой вопрос.
Кажется, гугл уже решил этот вопрос.

Худший ответ:
Так вы же сайт какой-то рекламируете наверное - по нему он и банит
Вопрос: Книги по PyQt

Лучший ответ:
Зачем? Если знаем Qt — читаем пару статей, чтобы понять, что там все то же самое, а потом просто постоянно пользуемся маном. Даже не по PyQt, а официальным по Qt, там лучше написано.

Худший ответ:
Насколько я знаю по PyQt уже давно ничего свежего не выходило, когда сам писал — не вылезал из документации на сайте нокии (да-да, нокии, документация к биндингам значительно хуже).
Вопрос: Типографская раскладка Бирмана без правой клавиши?

Лучший ответ:
Control+Alt не заменяют?

Худший ответ:
Может, проще ноутбук свежекупленный возвратить в магазин и вместо него приобрести другой?
Вопрос: Ubuntu 12.04. Учусь программированию. На чем писать программы в этой системе?

Лучший ответ:
Судя по тому что вы пишете, вам рано писать без IDE. Потому я, со своей стороны, проголосую за QtCreator. Он из всех сишных IDE под убунтой самый понятный, как мне кажется. Вообще, я в свое время, начинал из под винды на Visual Studio. Раньше там было все очень понятно и самое адекватное автодополнение. Не знаю что творится там сейчас. На начальном уровне я бы советовал не зацикливаться на системе из под которой вы программируете. Чем больше она берет на себя, тем лучше.
Когда вы будете свободно программировать в выбранной вами IDE (это довольно продолжительное время), можете переходить к программированию в любом текстовом редакторе, с последующим билдом с помощью gcc, g++ а затем и make, это углубит ваше понимание того, что на самом деле происходит "за кулисами". 
А ваш warning: return type of «main» is not «int» [-Wmain]
оттого, что по стандарту функция main вашей програмы должна возвращать int. Когда вы пишете void ошибки не будет, но компилятору это не понравится.

Худший ответ:
Eclipse? А компилятор, я думаю, уже стоит и настроен.