• Какое железо взять для программирования в 2016 году?

    Noself
    > i7-4770K
    Зачем вам K-процессор, если вам не для игр/разгона? Берите i7-4771, он не обрезан по функционалу в сравнении с 4770K: ark.intel.com/ru/products/75123/Intel-Core-i7-4770... , ark.intel.com/ru/products/77656/Intel-Core-i7-4771... . Кроме того, 4771 должен быть дешевле, судя по интеловским ориентировочным ценам (розницу конечно проверить надо).
  • Как изучать дальше(c++)?

    Nipheris
    @Nipheris Куратор тега C++
    @beduin01
    > Один сейчас пишет MegaFSM -- что то навроде системы управления предприятием. Взлетит или нет правда не знаю. Пока это стартап.
    Ну вот это уже что-то, желаю ему успеха.

    Понимаете, есть десятки языков, стоящих внимания. Большинство языков, которые мне встречались, в целом лучше чем самый популярный на сегодня JS. Какой из этого вывод? Прискорбный: популярность языка гораздо больше определяет экосистема. Это большая удача, когда появляются более-менее приличные языки, и у них есть поддержка, как у Java или C#. Язык сам по себе будет интересен только опытному человеку, которому, как вы правильно сказали, надоел стандарт на овер 1500 страниц. Но такой человек уже сам будет понимать, что хорошей IDE еще может не быть, и что может не оказаться вполне обычных для других экосистем библиотек (вроде работы с JSON или XML).
    Новичок посмотрит на D, попытается написать какое-нибудь оконное приложение, не сможет, и плюнет на него. Он врядли будет сам писать или портировать отсутствующие библиотеки, у него нет для этого нужного уровня знаний.
    И даже если ему язык понравится - потом по человеку ударит отсутствие вакансий даже в крупных городах. Вы правильно поступаете, если пытаетесь популяризовать язык, который вам нравится (тем более, если у вас это не первый язык, то вы имеете право сравнивать). Но вы и правильно заметили, что для вас это не основная специальность. Т.е. вы видимо чем-то другим зарабатываете на жизнь.
    Не буду говорить за автора вопроса, но вероятно его впоследствии заинтересует, как он может превратить свои знания в доход. И тут-то выяснится, что компании не готовы платить за D или Rust, а за C++, на который чел благополучно забил, оказывается еще платят. Конечно, вакансий на Плюсы значительно меньше чем на JS, на на D я до сих пор ни одной не видел.
  • Какое железо взять для программирования в 2016 году?

    Noself
    > Xeon допустимо ставить на замену i7. Теперь осталось выбрать какой Xeon...
    Вы сначала материнку под него подберите. Далеко не каждая будет с Xeon-ом работать, а на те, которые работают, и цены другие. И память там регистровая обычно нужна.
  • Какое железо взять для программирования в 2016 году?

    Noself так а что подробнее? Вам сервер нужен или рабочая станция?
  • Как изучать дальше(c++)?

    Nipheris
    @Nipheris Куратор тега C++
    @beduin01
    Вот мне интересно, а у вас есть какой-то проект в продакшене на Расте? ОДИН хотя бы. У вас лично, ну или в вашей компании? Или на D есть что-нибудь? Ну только побольше 50 строк кода желательно.
    Не поймите неправильно - ничего не имею против Раста, очень интересная вещь, но тем не менее - вы когда человеку советуете эти языки - вы предупредили его, что, к примеру, IDE под него найти немного сложнее, чем под плюсы? Что помощь получить сложнее на каком-нибудь stackoverflow? Что могут возникнуть сложности с библиотеками?
    Ну я понимаю спросил бы человек "Пытался учить C++, огромный, непонятный и неповоротливый язык, может есть чего попроще и посовременнее?" - тогда б ваш ответ еще к месту был. Но вы лепите одно и то же каждый раз в каждом втором вопросе общего характера по C++. Про вас уже легенды тут ходят. Вы не утомились еще?
  • Зачем нужны исключения?

    trevoga_su "News" - слово такое, по нему не поймешь сразу, много или одна)
  • Зачем нужны исключения?

    Запрос по id, нелогично возвращать массив (пустой или непустой). Если конечно это id новости, а не автора или еще чего)
  • Как для List.ForEach() определить текущий элемент?

    Nipheris
    @Nipheris Куратор тега C#
    > А как определить с каким именно?
    Вас индекс элемента тоже интересует или только сам элемент?
  • Цена перехода с С# на C++?

    Nipheris
    @Nipheris Куратор тега C++
    > Все курсовые и практики нам начитывали на шарпе и снижали оценки, если кто опротивился выбору преподователя и выполнил работу на другой технологии.
    Видимо поэтому и не хотите) Не дали попробовать что-либо другое. Это плохо.
  • Цена перехода с С# на C++?

    Nipheris
    @Nipheris Куратор тега C++
    Ivan Sokolov
    "есть, но нужны в 0,1% случаев" ~ "нет указателей"
  • Как правильно организовать проект, выкладываемый в open source?

    Владимир Семенякин
    Итак, давайте еще раз с начала разберемся)

    В связи с тем, что язык C++ содержит много сущностей, информацию о которых невозможно сохранить в тех контейнерах и бинарниках, которые получаются при компиляции C++ кода (obj, dll, lib, o, so, ...). Поэтому, недостающую информацию необходимо восполнять заголовочными файлами (помимо собственно кода скомпилированных функций в объектных или lib-файлах). Компиляторам на данный момент неоткуда узнать о таких вещах в C++ библиотеке, как класс, алиас для типа или шаблон, кроме как из хедеров, т.е. из фрагмента исходного кода библиотеки. Чтобы не дублировать копипастом код библиотеки, мы используем препроцессор, чтобы попросить его добавить этот нужный фрагмент кода автоматически. Возможно, ситуация поменяется, когда стандартизируют модули, но пока это так. В других экосистемах, например Java или .NET, хедеры не нужны, т.к. вся необходимая метаинформация об сущностях в скомпилированной библиотеке поставляется внутри собранного бинарника (в дотнете это т.н. сборки (assemblies), в джаве - пакеты).

    В зависимости от величины этого "фрагмента исходного кода", библиотеки можно условно разделить на:
    - НЕ-header-only, т.е. те, в которых присутствует некоторое количество заранее компилируемого кода, который затем _линкуется
    _, статически (весь код в одном бинарнике) или динамически (линковщик только ставит указатели, реально код находится в динамически загружаемых модулях: .so/.dll).
    - header-only, т.е. те, в которых "фрагмент исходного кода" вырождается в 100% кода библиотеки. В этом случае заранее компилировать просто нечего, ну или почти нечего и нет смысла заморачиваться. Это нормальная ситуация для различных высокоуровневых библиотек, которые добавляют возможности "для программиста", как например многие библиотеки из комплекта Boost.

    Соответственно типу библиотеки, для работы с ней тулчейну необходимо предоставить следующую информацию:
    - для не-header-only это хедеры для компилятора и lib-файлы для линковщика (в них он будет искать бинарный код тех функций, которых НЕТ в объектных файлах вашего проекта);
    - для header-only библиотек это только хедеры для компилятора;

    Идем далее. Когда мы будем писать код с использованием библиотеки, нам понадобятся include-файлы (по указанной ранее причине - чтобы не делать тупое копирование части кода библиотеки во все нужные файлы проекта). Мы будем использовать директиву #include и указывать путь к файлу, который мы хотим подключить. Т.к. мы не хотим писать совершенно непереносимый код, мы не будем писать #include <C:/Lib/foo/bar.h> или #include </usr/lib/foo/bar.h>. Мы хотим указывать лишь необходимую часть пути, абстрагированную от конкретной системы, например #include <foo/bar.h> или #include <system.h>. Поэтому мы будем дополнительно сообщать компилятору то место или несколько мест в системе, где реально лежат include-файлы. Аналогиную вещь мы сделаем и для линковщика. Когда мы передадим ему список lib-файлов, которые необходимо подключать при линковке, ему также их нужно будет где-то найти. Это, как уже вам известно, и есть include-пути и lib-пути.

    Вот теперь мы переходим к самому интересному - к тому, как и где располагать include и lib файлы. Тут уже есть много ситуаций и подходов, и многое зависит от системы и от того, как к вам попадает нужная вам библиотека.
    В *nix системах папки для инклудов и lib являются частью стандартной иерархии файловой системы (см. https://ru.wikipedia.org/wiki//usr ). Когда библиотека устанавливается в системе (неважно как, например с помощью пакетного менеджера, либо с помощью make-скриптов), она просто копирует свои файлы в include и lib папки, и в большинстве случаев при вызове компилятора достаточно передать только один инклуд и lib-путь.
    Другая ситуация возникает в других системах, например в Windows, где нет такой стандартной иерархии, или же если вы не хотите устанавливать вашу библиотеку в стандартные папки (например, вы только пишете её, и хотите работать с ней изолированно, в рамках репозитория). Тогда компилятору и линковщику нужно передавать НЕСКОЛЬКО путей, и компилятор объединит каждую из переданных директорий в одну большую виртуальную директорию, содержащую все инклуды, которые теперь можно использовать в директиве #include.

    Теперь возникает логичный вопрос - как же определить все эти необходимые пути и передать их тулчейну кроссплатформенным способом (т.е. так, чтобы работало еще и на Windows и OSX). Тут то и приходит CMake со своими Find-модулями. Эти модули, написанные на макроязыке CMake, которые облегчают поиск необходимых библиотек. Как они это делают - уже зависит от конкретной библиотеки. Обычно проверяются сначала стандартные/популярные пути, затем еще могут проверяться переменные окружения (в этом нет ничего плохого!). При успешном нахождении такой модуль определяет переменные, содержащие пути к инклудам и lib-ам. Затем эти переменные можно использовать в других командах в сборочном скрипте. Эти модули могут быть как стандартные (см. https://cmake.org/cmake/help/v3.0/module/FindBISON.html или https://cmake.org/cmake/help/v3.0/module/FindJPEG.html ), так и написанные вами, что многие и делают ( https://github.com/LuaDist/libsqlite3/blob/master/... , https://github.com/SOCI/soci/tree/master/cmake/modules ). Другие сборочные системы могут предлагать другие способы поиска библиотек.

    Альтернативой поиску могут выступать и упомянутые вами submodules, достаточно удобные для маленьких header-only библиотек. Тогда в репе создается отдельная папка, например deps ( https://github.com/cpp-netlib/cpp-netlib/tree/mast... ), где в виде сабмодулей находятся нужные библиотеки. Тогда вместо поиска можно указывать относительные пути для поиска всех нужных include-ов (т.к. вы точно знаете, где лежат инклуды относительно вашего сборочного скрипта или файлов исходного кода). Возможно, в вашем случае так и нужно поступить.

    > Добавляем папку include скаченного репозитория в перечень inlcude-пасов для своего проекта. Если в репозитории есть папка libs - добавляем её в перечень путей -L
    В репе её скорее всего не будет, т.к. в репе по определению исходники. В большинстве случаев, нужно именно скомпилировать библиотеку, и в зависимости от настроек проекта или сборочного скрипта библиотеки, где-то появится собранный lib-файл. Опять таки, если интересует CMake, почитайте про сборку внутри дерева проекта и вне его (https://cmake.org/Wiki/CMake_FAQ#What_is_an_.22out... ). ЛИБО, у вас эти файлы уже будут, если вы ставите либу системным пакетным менеджером (см. выше), или скачиваете уже готовый билд (например https://dev.mysql.com/downloads/connector/cpp/ ).
  • Где взять актуальную базу России регионов->городов->улиц в формате sql?

    Денис Ручьев
    Может быть есть уже решение, быстрое и удобное. Не хотелось бы писать пасрер dbf в sql и прогонять им тонны данных...

    Да чего его там писать) 1-в-1 таблицы в SQL перегнали и ок. Или я чего-то не понимаю?
  • Как для переменной @nowtime присвоить значение времени "сейчас" в C#?

    Nipheris
    @Nipheris Куратор тега C#
    Как выглядит запрос? Prepared statements пользуетесь?
  • Как правильно организовать проект, выкладываемый в open source?

    Владимир Семенякин
    > Дело в том, что, как я понял, git не поддерживает возможность привязки отдельных папок, даже через механизм подмодулей (только что проверял - не вышло через подмодули).
    Гит отдельные папки действительно не поддерживает, это несколько противоречит его архитектуре (а именно, тому, коммит - это всегда новая версия всего репозитория целиком). Но тут речь совсем не про гит. Подключение библиотеки сабмодулями - это скорее временное решение, или решение для очень маленьких header-only библиотек. Речь все-таки о том, чтобы научиться передавать компилятору ключи с путями к инклудам и lib-ам. Тогда библиотека может спокойно собираться отдельно и лежать в отдельной, а зависимые от нее проекты - отдельно. Как это делать лучше всего - зависит от сборочной системы. Для CMake я приводил пример.

    > А зачем? Тесты - штука побочная, почти служебная в рамках библиотеки, можно сказать. Чего замусоривать пользовательский билд служебные подобными штуками?
    М, я имел в виду что тесты в идеале должны иметь в качестве зависимости тестируемую библиотеку. И для сборки тестов уж точно ничего не надо копировать - достаточно натравить компилятор на папки include и lib в корне репозитория. Т.к. пути в данном случае будут относительными, это еще проще, чем при подключении библиотеки в другой проект.

    > Да, я уже собирал assimp с cmake (первое моё знакомство с cmake) - чуть с ума не свихнулся пока сделал, день потратил на сборку.
    Ну это нормально, тут нужно просто разобраться и все. Я потратил несколько дней, чтобы нормальный CMakeLists.txt составить для библиотечки, но оно того стоило. В общем-то сейчас это лучший вариант для кроссплатформенных библиотек. Autotools точно не легче в понимании). К сожалению, с плюсами используются довольно много систем сборки - и классический make, и CMake, и SConstruct, и GYP, и много чего еще, это сейчас проблема в экосистеме C++. И все-таки советую CMake, т.к. в современных проектах она явно популярнее остальных.

    Даже если вы считаете, что вашу библиотеку будет удобно подключить как сабмодуль, вам все равно нужно точно так же уметь сообщить компилятору, где лежат инклуды. Копировать инклуды либы прямо в папку с инклудами проекта - довольно плохая идея.
  • Как ускорить работу с Mozilla Firefox (много истории, закладок)?

    Много - это сколько? У меня букмарков более 12 тысяч, проблем с производительностью не наблюдается (кстати, firefox и так все в sqlite-базе хранит). У вас больше?
  • Оправдано ли использование строкового первичного ключа?

    wadeg Ну за Оракл говорить не буду, но вот в Постгресе есть такая процедура, как VACUUM, и время от времени ее проводить бывает полезным (если было много удалений и есть много "мертвых" кортежей).

    Это называется like или поиск подстроки, и это все к полнотекстовому поиску никакого отношения не имеет.
    Под полнотекстовым поиском я понимаю индекс для поиска в середине, такой, по которому можно искать LIKE '%str', где обычное B-дерево не поможет. Я не про морфологию, операторы и/или и прочие высокоуровневые навороты.
  • Оправдано ли использование строкового первичного ключа?

    wadeg Воистину перепутал с BLOB, посыпаю голову пеплом:). Просто у меня много дискуссий на счет них было последнее время (BLOB vs файловая система)..

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

    Запросы на вставку/обновление с полем переменной длины будут дороже однозначно, т.к. записи также будут переменной длины и сложнее поддерживать карту свободного места. Либо придется делать компрессию время от времени (тут нужно про конкретную СУБД говорить). Хотя, если записи не удаляются и не обновляются, тогда без разницы)
  • Каким способом организовать отправку/получение данных?

    Nipheris
    @Nipheris Куратор тега C#
    А почему код должен потерять форматирование? Почему content-type json-овский, почему не text/plain? Нельзя ли послать код в отдельном запросе с подходящим content-type?